构建自己的图像分类数据
参考资料:
- 同济子豪兄教学视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid=606800
- 项目代码:https://github.com/TommyZihao/Train_Custom_Dataset
本章节内容主要讲述应用于图像分类数据集的收集处理,主要包含数据收集、数据清洗、以及数据集划分和数据特征查看。
1. 数据收集
数据收集方面,针对图像数据,可以使用公用数据集,也可以采用爬虫等方式进行网络爬取。针对部分细分领域的应用,一般需要使用者自建数据集(手动or自动拍照)。
数据收集有以下几大原则或者注意事项,是为了保证数据集的多样性、代表性、一致性。数据集应尽可能包括目标物体的各类场景,训练出的图像分类模型才能在各类测试场景中具备好的泛化性能,防止过拟合。
- 不同尺寸、比例的图像
- 不同拍摄环境(光照、设备、拍摄角度、遮挡、远近、大小)
- 不同形态(完整西瓜、切瓣西瓜、切块西瓜)
- 不同部位(全瓜、瓜皮、瓜瓤、瓜子)
- 不同时期(瓜秧、小瓜、大瓜)
- 不同背景(人物、菜地、抠图)
- 不同图像域(照片、漫画、剪贴画、油画)
如果训练集的图像分布与测试集(或真实测试场景)的图像分布不一致,会出现OOD(Out-Of-Distribution)问题。
2. 数据清洗
数据清洗部分是为了去除项目附加文件以及代码无法读取的图片文件。
对于项目附加生成文件,采用文件格式后缀进行处理;
对于图片读取,则通过OpenCV读取进行判断,以及一些特殊要求的文件,都可以在建立数据集前通过数据清洗进行处理。
3. 数据集划分
对于每类图片,按照一定比例划分为训练集和验证集,本项目按照8:2比例设置。(本项目未划分测试集)
对每个类别文件进行按比例随机抽取,将源文件夹中的图片数据移动至相应文件夹,本项目文件夹布置如下:
melon17_split
├── train
│ ├── 白兰瓜
│ ├── 冬瓜
│ ├── 佛手瓜
│ ├── 哈密瓜
│ ├── 黄瓜
│ ├── 苦瓜
│ ├── 木瓜
│ ├── 南瓜
│ ├── 人参果
│ ├── 丝瓜
│ ├── 甜瓜-白
│ ├── 甜瓜-金
│ ├── 甜瓜-绿
│ ├── 甜瓜-伊丽莎白
│ ├── 西瓜
│ ├── 西葫芦
│ └── 羊角蜜
└── val
├── 白兰瓜
├── 冬瓜
├── 佛手瓜
├── 哈密瓜
├── 黄瓜
├── 苦瓜
├── 木瓜
├── 南瓜
├── 人参果
├── 丝瓜
├── 甜瓜-白
├── 甜瓜-金
├── 甜瓜-绿
├── 甜瓜-伊丽莎白
├── 西瓜
├── 西葫芦
└── 羊角蜜
其中train与val分别表示训练集与测试集。
4. 数据特征查看
数据集特征,包括图像数据尺度特征以及不同类型图像数量分布。
- 可视化图像尺寸分布:
对于选定图像数据,观察图像长宽分布:
- 预览图片:
预览选定图像部分图片:
![在这里插入图片描述](https://img-blog.csdnimg.cn/6093d393ffb9405e943dcd57ee9dfe1f.png#center - 统计各类别图像数量:
通过pandas统计各类别图像数量:
数据集图像数量柱状图可视化: