图像处理—数据集的构建
1. 概述
人类在认识世界的过程中,首先是获取信息,如眼睛看、耳朵听、鼻子闻等。只有获取了信息后才能进行认知,而这些信息的质量对我们的学习效果影响重大。深度学习也是类似的,我们提供了什么数据,计算机才能分析什么样的数据,对于未提供的数据,计算机往往无法判读。
一切模型训练的基础就是数据集,对于深度学习来说,好的数据集具有的特点:
(1)数据量充足
(2)特征明显
(3)分布均匀
越好的数据集,模型训练的效果越好,例如MS COCO、PASCAL VOC数据集等均为优秀的数据集。
在我们开展实验的过程中,如何获得一个理想的数据集是我们所关心的。为此,我根据自己的理解,总结出以下数据集构建的经验。个人水平有限,不足之处还望批评指正!
注:本内容仅仅针对有监督学习的图像处理类数据。
2. 采集数据
计算机中的数据有两种来源:
(1)实时数据(借助传感器等获取的);
(2)现有数据(常被分为:训练集、验证集、测试集)。
目前,深度学习常用的方法是,通过构建算法对现有数据(训练集)进行学习后获得模型。然后,利用该模型对实时或现有数据进行检测(其中,实时数据检测用于应用端;现有数据检测用于评估模型效果,这种往往被称为验证集、测试集)。我们所做的采集数据工作,是为了构建现有数据集用于模型训练与评估。
目前常见的数据采集方法包括:
(1)网络公开数据集
网络上有各种各样的开发数据集,我们只要找到相应的网址获取下载链接,就可以得到不同领域的数据集,一般这些数据集是为了帮助学习者或者数据分析相关人员提供帮助,也有的是为了举办各种比赛,以此来寻找到更好的数据分析方案和结果。例如MS COCO、PASCAL VOC数据集等,这类数据一般质量较高,推荐用于学习!!!
(2)传感器采集
传感器(英文名称:transducer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类。比如我们用的摄像头、录音设备、体温检测……等等设备。
(3)网络爬虫
网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。(不推荐使用该方法,爬虫有风险。)
(4)业务数据集
相信在很多公司都会有相应日常运营和业务部门,各种相关的数据都会记录在某些文件或者系统中,例如常见的Excel 文件,各种办公系统的数据库系统等等。这些数据一般为内部数据,就不要多想了。
(5)数据交易平台
通俗说就是在网上购买数据集,这个主要看自己预算了。
对于一名研究生,为了发表论文,数据集常常需要依靠自己利用传感器采集(例如:光学相机、CT扫查、B超图像、红外温度图等)。个人在采集时要尽可能做到以下几点:
(1)数据量至少是500往上,越多越好。
(2)同一个目标,可以选取不同角度,不同的距离,不同的信号强度等进行采集,丰富数据。
(3)采集数据时分布要均匀,不可顾此失彼。
3. 数据集制作步骤
收集完图片后,就需要进行打标签了,标签的好坏对模型具有决定性影响,所以标签必须弄好,不然就白白浪费你的数据了。这个过程是个费时费力的过程,需要你沉得住气,数据量太大的话建议花钱众包。
在图像处理领域,我们主要使用labelimg与labelme。下面两个链接是其操作的过程(这部分内容网上有非常好的教程,我就不做重复工作了):
链接: 数据集制作——使用labelimg制作数据集
链接: 数据集制作——使用labelme制作数据集
转载来源:
萝北村的枫子——https://blog.csdn.net/thy0000/article/details/123533410
黑暗星球——https://blog.csdn.net/u014061630/article/details/88756644
数据标注后,为了方便检查标注情况,我们可以将标注结果显示在图片上层。我在这将个人查询到的代码进行分享,出处不记得在哪里了。
链接: 数据标注的可视化——labelme、labelimg
4. 数据集处理方法
数据集标签打好后,还需要一定的处理才能真正用到模型训练上面。目前常用的数据集标准有coco、voc与yolo。为了方便操作,在此我将提供其互相转换的代码。
coco数据集
链接: 数据集处理——labelme2coco
链接: 数据集处理——voc2coco
voc数据集
链接: 数据集处理——labelme2voc
链接: 数据集处理——yolo2voc
链接: 数据集处理——coco2voc该部分装载自萌萌滴太阳
yolo数据集
链接: 数据集处理——voc2yolo
5. 数据集增强方法
数据增强(Data Augmentation, DA)缓解了深度学习中数据不足的场景,在图像领域首先得到广泛使用,进而延伸到 NLP 领域,并在许多任务上取得效果。一个主要的目的是增加训练数据的多样性,从而提高模型泛化能力。
常用的一些方法,包括了翻转、旋转、缩放、裁剪、移位等方法。在实际模型训练中,数据增强的使用包括:
(1)模型训练前增强(即单独编写数据增强算法,扩充数据集。数据扩充完毕后再进入到模型训练中去。)
(2)模型训练中增强(即数据增强算法与模型训练算法同步进行,这个在一些成熟的模型中包含了数据增强,如mmdetection、yolov5等源码中都自行包括了数据增强,只需要你调用相应代码就好了。)
两者各有优劣,在模型训练前增强,能方便开发人员准确掌握数据集情况;而模型训练中增强,效率更高,修改更加方便。
个人比较喜欢模型训练前增强,下面链接为数据集增强代码链接。
链接: 数据集增强——Data to enhance
转载来源:https://github.com/maozezhong/CV_ToolBox
以上内容均是我个人经验总结,使用的代码均是在网络开源代码、或者在其基础上进行了细微调整。在此非常感谢各位开源大佬,本人代码均为开源,如若有侵权存在,我表示道歉并会及时下架侵权内容。感谢大家的支持与理解!!!
参考
版权归原作者 梦無限大 所有, 如有侵权,请联系我们删除。