制作图像数据集规范
进行图像处理经常需要使用图像数据集,常用的包括cifar-10/mnist等等
很多时候也需要自己进行图像的采集,如何有效的保存和管理这些图像,以及训练完成后得到的数据?参考DATA LOADING AND PROCESSING TUTORIAL进行图像数据集的制作
需求分析
图像数据集可能包含以下两种数据:
采集得到的原始图像数据
训练完成后得到的图像和其他数据(比如标注信息,检测的结果)
为了方便保存和传输,需要以字节形式保存图像到文件;如果图像数据过大,可以保存成多个文件;同时,应该区分训练数据和测试数据,分别保存在不同文件中
为了减轻内存压力,图像的文件名/编号/标注等文本信息应该和图像数据分开保存,这样可以根据需求加载图像到内存
为了充分利用不同语言的特性,应该有多个版本的保存方式,比如python/c版本
格式解析
分为python和c版本
针对标注信息等多数字内容,保存在csv文件中,以逗号隔开
python版本
保存格式
针对图像数据及其标签信息,使用dict方式保存
对于图像数据,其保存键为'data',值为numpy 2维数组形式,第一维表示图像编号,第二维表示图像字节数据,对于彩色图像而言,以RGB格式排列
对于图像标签,保存了两种形式:第一种其保存键为'labels',值为列表形式,以整数数字表示;第二种其保存键为'labels_name',是整数数字的语义化,值为列表形式
对于图像文件名,其保存键为'filenames',值为列表形式
每个图像大小可能会不一致,所以还需要设置键'sizes',值为numpy 2维数组形式,第一维表示图像编号,第二维表示图像高,第三维表示图像宽
还需要在每个保存文件中添加一个键'batch_info',表示当前文件基本信息,防止因为文件名修改而导致信息混乱
文件命名
训练图像数据文件命名为train_data_batch_<num>
,图像标签及相关文本信息命名为train_labels_batch_<num>
测试图像数据文件命名为test_data_batch_<num>
,图像标签及相关文本信息命名为test_labels_batch_<num>
示例1
测试数据和训练数据均保存在单个文件中,那么
- 训练图像数据文件命名为
train_data_batch
,其文件内保存两个键值对
1 | { |
- 训练图像标签文件命名为
train_labels_batch
,其文件内保存4个键值对
1 | { |
测试图像数据文件和标签文件命名参考训练文件命名方式
示例2
图像数据过大,需要划分为多个文件保存,比如划分为5个训练文件,那么
- 训练图像数据文件命名为
train_data_batch_<num>
,其文件内保存两个键值对
1 |
|
- 训练图像标签文件命名为
train_labels_batch_<num>
,其文件内保存4个键值对
1 | # train_labels_batch_1 |
测试图像数据文件和标签文件命名参考训练文件命名方式
c版本
未完待续...
类库解析
python
使用panda进行csv文件的读取和写入
使用pickle进行数据的保存
示例1
示例2
第一级区分训练和测试数据,第二级区分类别,第三级保存图片