制作图像数据集规范

进行图像处理经常需要使用图像数据集,常用的包括cifar-10/mnist等等

很多时候也需要自己进行图像的采集,如何有效的保存和管理这些图像,以及训练完成后得到的数据?参考DATA LOADING AND PROCESSING TUTORIAL进行图像数据集的制作

需求分析

图像数据集可能包含以下两种数据:

  1. 采集得到的原始图像数据

  2. 训练完成后得到的图像和其他数据(比如标注信息,检测的结果)

为了方便保存和传输,需要以字节形式保存图像到文件;如果图像数据过大,可以保存成多个文件;同时,应该区分训练数据和测试数据,分别保存在不同文件中

为了减轻内存压力,图像的文件名/编号/标注等文本信息应该和图像数据分开保存,这样可以根据需求加载图像到内存

为了充分利用不同语言的特性,应该有多个版本的保存方式,比如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
2
3
4
{
'data': ...
'batch_info': 'train data batch 1 of 1'
}
  • 训练图像标签文件命名为train_labels_batch,其文件内保存4个键值对
1
2
3
4
5
6
{
'labels': ...
'sizes': ...
'filenames': ...
'batch_info': 'train labels batch 1 of 1'
}

测试图像数据文件和标签文件命名参考训练文件命名方式

示例2

图像数据过大,需要划分为多个文件保存,比如划分为5个训练文件,那么

  • 训练图像数据文件命名为train_data_batch_<num>,其文件内保存两个键值对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# train_data_batch_1
{
'data': ...
'batch_info': 'train data batch 1 of 5'
}
# train_data_batch_2
{
'data': ...
'batch_info': 'train data batch 2 of 5'
}
...
...
# train_data_batch_5
{
'data': ...
'batch_info': 'train data batch 5 of 5'
}
  • 训练图像标签文件命名为train_labels_batch_<num>,其文件内保存4个键值对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# train_labels_batch_1
{
'labels': ...
'sizes': ...
'filenames': ...
'batch_info': 'train labels batch 1 of 5'
}
# train_labels_batch_2
{
'labels': ...
'sizes': ...
'filenames': ...
'batch_info': 'train labels batch 2 of 5'
}
...
...
# train_labels_batch_5
{
'labels': ...
'sizes': ...
'filenames': ...
'batch_info': 'train labels batch 5 of 5'
}

测试图像数据文件和标签文件命名参考训练文件命名方式

c版本

未完待续...

类库解析

python

使用panda进行csv文件的读取和写入

使用pickle进行数据的保存

示例1

示例2

第一级区分训练和测试数据,第二级区分类别,第三级保存图片