cv数据工程框架
gapcv的Python项目详细描述
间隙Cv
简介
gap是机器学习的数据工程框架。gap cv是计算机视觉(cv)gap的一个组成部分。组件管理图像的数据准备、神经网络模型的输入和服务以及持久存储的数据管理。
该模块是用现代的面向对象编程(oop)抽象语言编写的,具有命令式编程风格,与正在进入命令式编程的ml框架(如keras和pytorch无缝配合。模块的底层是用裸金属写的,以获得高性能。
GAP是受波特兰(或2018年5月)数据科学家和机器学习爱好者会议的启发。第一个版本的gap在夏季发布,当地的软件社区通过会议、聊天、kaggle小组和在牛津套房举行的一次会议进行了交流。在秋季,gap的领导david molina牵头,andrew ferlitsch和google ai协助,决定将gap重构为工业级应用程序。
为什么和为什么现在
在2018年春季,我们中的许多人观察到了在重新设计ML框架(例如Keras和Pythorch)方面的进步,这些框架将在软件工程社区中得到更广泛的采用。但是,主要关注的是模型构建,而不是数据工程。在互联网上,在博客、教程和在线课程之间,数据工程的例子仍然是一个疯狂的西方。对我们来说,我们把它看作一个缺口,因此就有了"缺口"这个名字。
ML从业者今天认识到数据工程是机器学习生态系统中的重要组成部分,需要现代化、精简和标准化,以满足软件开发社区的需求,同时框架的改进也在不断地进行。e建模组件。
功能摘要
图像类型
支持以下图像格式:
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
图像集(数据集)布局
支持以下图像数据集布局(即,可以通过间隙摄取):
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
对于csv和json,图像数据可以嵌入(内存中)、本地(磁盘上)或url路径(远程)。
图像转换
支持以下图像转换:
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
转换可以在处理图像数据集(摄取)时执行,也可以在输入(训练)神经网络时动态执行。
图像增强
支持以下图像增强功能:
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
图像增强可以在神经网络的输入(训练)过程中动态地进行。
图像输入
支持以下图像馈送机制:
* Splitting
* Shuffling
* Iterative
* Generative
* Mini-batch
* Stratification
* One-Hot Label Encoding
* Streaming
在馈送时,使用间接索引处理乱序,保持数据在堆中的位置。执行一个标签的热编码 当进料器被实例化时动态地。
内存管理
内存管理支持以下内容:
* Contiguous Memory (Numpy)
* Streaming
* Indirect Indexing (Shuffling w/o moving memory)
* Data Type Reduction
* Collection Merging
* Asynchronous and Concurrent Processing
图像数据的集合,否则是不相交的,可以有效地合并,并与标签一热编码动态地执行,以从其他不同的来源馈送神经网络。
持久存储管理
磁盘管理支持以下内容
* HDF5 Storage and Indexing
* Metadata handling
* Distributed
安装
PIP安装:
在windows、macos和linux上支持gapcv框架。已通过PYPI打包分发。
安装miniconda
安装conda虚拟环境和所需的软件包:
- 使用以下命令创建环境:
conda create-n gap python==3.5 jupyter pip
- 激活:
源激活间隙
pip安装gapcv
- 使用以下命令创建环境:
正在退出Conda虚拟环境:
- 窗口:
停用
- Linux/MacOS:
源代码停用
- 窗口:
setup.py安装:
通过setup.py安装gapcv
从github repo复制。
git克隆https://github.com/gapml/cv.git
使用gapcv安装文件安装。
- 访问文件夹
cd cv
python setup.py安装
- 访问文件夹
导入GAPCV
要将gapcv导入python应用程序,请执行以下操作:
fromgapcv.visionimportImages
快速启动
图像的准备、神经网络的输入和图像数据集的管理是通过类对象images
来处理的。我们将在这里简要讨论
使用图像类的各种方法。
初始值设定项没有必需的(位置)参数。所有参数都是可选(关键字)参数。最常用的参数是:
Images( name, dataset, labels, config )
name : the name of the dataset (e.g., 'cats_n_dogs')
dataset: the dataset of images
labels : the labels
config : configuration settings
准备数据集
第一步是将图像数据集中的图像转换为机器学习准备数据。如何转换图像取决于图像源和配置设置。默认情况下,所有图像都转换为:
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
0
在本快速入门部分中,我们将简要介绍如何准备磁盘上、远程存储或内存中的数据集。
目录
图像数据集的一种常见格式是将它们存储在磁盘上的目录布局中。布局由根目录(父目录)和一个或多个子目录组成。每个子目录都是 类(标签),例如cats。子目录中有一个或多个属于该类的图像。下面是一个示例:
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
1
以下images
类对象的实例化将根据默认转换设置将图像从本地磁盘加载到内存中。在内存中,转换后的图像集将分为两类:猫和狗。
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
2
加载后,可以将转换数据的信息作为images
类的属性获取。下面是一些常用的属性。
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
3
为images
类重写了几个内置函数。下面是一些常用的重写内置函数:
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
4
列表
或者,可以将本地磁盘上的图像指定为路径列表,并具有相应的标签列表。下面是一个示例,其中数据集
参数被指定为
指向图像的路径,以及labels
参数是相应标签的列表。
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
5
或者,可以使用url路径将图像路径指定为远程位置。在这种情况下,将发出一个http请求,以从远程站点获取图像的内容。
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
6
内存
如果数据集已经在内存中,例如作为框架一部分的已整理数据集(例如,CIFAR-10 inKeras),则已整理图像和标签的内存多维numpy数组作为值传递给数据集
和标签
p参数。
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
7
csv
数据集可以指定为CSV(逗号分隔值)文件。美国都支持mma)和eu(分号)分隔符标准。csv文件中的每一行对应一个图像 以及相应的标签。映像可以是本地的、远程的或嵌入的。下面是一些csv布局示例:
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
8
对于csv,在实例化images
类对象时指定config
参数,以设置设置:
* JPEG and JPEG2000
* PNG
* TIF
* GIF
* BMP
* 8 and 16 bits per pixel
* Grayscale (single channel), RGB (three channels) and RGBA (four channels)
9
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
0
对于欧盟风格(分号),使用sep
设置指定分隔符是分号:
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
1
json
数据集可以指定为json(javascript对象表示法)文件,其中文件作为对象数组进行布局。每个对象对应一个图像和相应的标签。 映像可以是本地的、远程的或嵌入的。下面是一些json布局示例:
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
2
对于json,在实例化images
类对象时指定config
参数,以设置:
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
3
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
4
转换
图像转换的默认设置可以重写为settings
到config
参数:
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
5
例如,如果目标神经网络是dnn,而输入是28x28的平坦灰度向量(例如mnist),则可以指定:
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
6
如果要将像素数据标准化而不是标准化,可以指定:
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
7
如果您的硬件支持半精度浮点(16位浮点),并且您的神经网络设计为不受消失梯度的影响,则可以减小
通过将像素数据类型设置为float16
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
8
在另一个例子中,您可以进行空间与速度的权衡。像素数据类型可以设置为uint8
(8位整数)。在这种情况下,像素规格化被延迟并动态执行
每次图像被输入到神经网络。图像数据的内存大小将比相应的float32
版本小75%,或比相应的float32
版本小50%
float16
版本。
* On-Disk (directory, CSV and JSON)
* In-Memory (list, numpy)
* Remote (http)
9
输入数据集
images
类提供几个setter/getter属性,用于在训练期间为神经网络提供数据。默认情况下,转换的(机器学习就绪)图像数据被拆分为
80%的训练和20%的测试。在分割之前,图像数据被随机洗牌。或者,可以为测试指定不同的百分比,并使用
split
用作setter的属性。
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
0
预分割数据集
用作getter时,split
属性将返回图像和相应标签的预分割数据集(train and test)(以sci learn train_test_split()熟悉的方式)。
在分割之前,训练数据将被随机洗牌。图像部分(x_列和x_测试)是多维numpy阵列,标签部分(y_列和y_测试)
是一个经过热编码的numpy矩阵。
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
1
如果像素数据类型是uint8(或uint16),则在返回训练和测试数据之前,像素数据将被规格化。
迭代
重写next()
运算符,使其充当为神经网络馈送的迭代器。每次调用next()都将返回训练集中的下一个图像和标签。一旦所有
图像数据已被枚举(即epoch),next()
运算符将返回none
并随机重新排列下一个epoch的训练数据。返回图像和标签数据
分别作为多维numpy数组和一个热编码numpy向量。
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
2
如果像素数据类型是uint8(或uint16),则每次调用next()
运算符时,像素数据都将动态规范化。
如果config
设置流指定后,每次调用
next()
运算符时,像素数据都会从hdf5存储中流入(无内存)。
小批量(生成型)
当用作setter时,mini batch
属性将设置用于创建生成器的mini batch size,以便在mini batch中馈送神经网络。默认情况下,小批量大小为32。
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
3
当用作getter时,minibatch
属性会在每次调用时创建一个生成器。生成器将返回一系列图像和标签,其大小指定为参数
(或默认值)指定为setter时设置为minibatch
。生成器的每次迭代都将按顺序遍历训练数据。当到达培训数据的末尾时,
训练数据被随机重新洗牌,并且minibatch
getter被重置为从训练数据的开头开始。返回图像和标签数据
分别作为多维numpy数组和一个热编码numpy向量。
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
4
如果像素数据类型是uint8(或uint16),则每次创建一个小批量生成器时,像素数据都将动态规范化。
如果指定了config
设置stream
,则每次调用minibatch
属性(用作getter)时,每批像素数据都会从hdf5存储中流入(内存不足)。
分层小批量
当用作setter时,layedized
属性将设置用于创建生成器的小批量大小,以便在分层的小批量中为神经网络提供数据。默认情况下,小批量大小为32。当最小批是批内类的均匀分布时,它是分层的。
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
5
当用作getter时,stratify
属性会在每次调用时创建一个生成器。生成器将返回一系列图像和标签,其大小指定为参数
(或默认)当指定为setter时,将分层。生成器的每次创建都将按顺序移动训练数据。当到达培训数据的末尾时,
训练数据被随机重新洗牌,"分层"获取器被重置为从训练数据开始。返回图像和标签数据
分别作为多维numpy数组和一个热编码numpy向量。
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
6
如果像素数据类型是uint8(或uint16),则每次创建分层的小批量生成器时,都会动态规范化像素数据。
如果指定了config
设置stream
,则每次调用minibatch
属性(用作getter)时,每批像素数据都会从hdf5存储中流入(内存不足)。
图像增强
图像增强(新图像的合成)在输入神经网络时动态地发生,并且在实例化
图像
类对象。augment
参数的设置为:
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
7
下面是在神经网络馈送期间指定图像增强的示例:
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
8
图像增强是在喂食过程中动态发生的。对于每个图像馈送,将跟随第二个增强图像。例如,如果训练集是1000个图像,则next()运算符将 每个历元提供2000个图像。如果将mini batch或stratify size设置为32,则相应的生成器将提供64个图像。如果指定了多个图像增强设置,则 随机选择每幅图像的增强类型。例如,如果指定旋转、缩放和水平翻转,则每次图像增强时,随机选择是 三者之间制作。
管理数据集(持久存储)
已转换为机器学习就绪数据的图像数据集可以在持久存储中存储和管理,使用hdf5文件系统格式。可以执行以下操作:
* Color -> Gray
* Resizing
* Flattening
* Normalization and Standardization
* Data Type Conversion: 8 and 16 bpp integer and 16, 32 and 64 bpp float
9
保存到永久存储
可以使用config
设置store
将转换后的图像数据集(即集合)保存到持久存储中,并随后从持久存储中检索。如果指定,则
(机器学习准备数据)图像数据集以及相关的元数据被存储到hdf5存储器中。在hdf5存储器中,数据的每一类(标签)都被压缩并索引到hdf5存储器中的一个连续卷中,以便随后快速检索。
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
0
如果图像数据集太大而无法将整个数据集保存在内存中,则可以交替地一次处理一个图像并将其流式传输到hdf5存储器中。在这种模式下,
进程只消耗单个映像的内存资源。当指定了config
设置stream
时,将调用stream模式。
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
1
从永久存储加载
images
类的load()
方法将从持久性存储中检索(加载)一组转换的(机器学习就绪的数据)图像和相关元数据。一旦加载,该集合就可以输入到神经网络进行训练。
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
2
应用变换
在从持久存储加载转换后的图像数据集之后,可以进一步重新转换数据集以匹配另一个神经网络的输入要求,而无需重新处理原始图像数据。重新转换支持作为图像的setter属性
类:
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
3
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
4
组合收藏
持久性存储中的现有集合可以使用overrided+=
运算符组合为单个新集合。合并后,将重新分配标签分配。例如,
如果两个集合都是一个单独的类,并且两个集合都具有该类的相应值0,则在组合版本中,一个类为0,另一个为1。
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
5
参考
测试
gap框架是使用测试驱动开发方法开发的。框架的自动化单元测试使用pytest,它是xunit风格的测试形式(例如junit、nunit、jsunit等)。
安装和文档
pytest应用程序可以使用pip安装:
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
6
pytest的在线文档
执行
以下是预构建的自动单元测试,位于子目录测试下:
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
7
自动测试执行如下:
从目录根输入
cd tests
测试可以由以下人员运行:
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
8
代码覆盖率
使用pytest cov可以获得有关自动测试覆盖的代码百分比(以及未覆盖的源代码行)的信息。此版本的pytest使用pip:
* Rotation
* Horizontal and Vertical Flip
* Zoom
* Brightening
* Sharpening
9
从目录根输入
cd tests
运行覆盖率测试:
* Splitting
* Shuffling
* Iterative
* Generative
* Mini-batch
* Stratification
* One-Hot Label Encoding
* Streaming
0