2. 中国科学院大学 计算机与控制学院, 北京 100049
2. School of Computer and Control Engineering, University of Chinese Academy of Sciences, Beijing 100049, China
随着科技的进步与发展, 计算机视觉迅速发展. 其中, 目标检测是计算机视觉领域的一个重要分支, 它的主要任务是找出图像中的目标对象的位置信息, 判断目标框中对象的类别, 并为检测到的所有目标在图像上画出预测边框. 随着深度学习相关技术的快速发展, 计算机视觉领域也不断取得突破[1]. 基于深度学习的目标检测算法主要分为两类: 一类是RCNN系列, 如FastRCNN[2]、FasterRCNN等two-stage方式, 另一类是YOLO[3]、SSD[4]等end-to-end的one-stage方式. 与传统方法[5–9]相比, 使用深度学习算法进行目标检测不仅减少误检、漏检, 还更好的适应复杂场景, 在检测速度方面也有较大的提升. 针对one-stage方式的算法, 如果我们需要训练目标检测模型但是没有现成的数据集, 传统的做法是使用LabelImg等软件人工标注图像[10]中目标对象的位置, 并标注对象的类别. 对于数据集中大量的图像, 制作、处理数据集是繁琐耗时的工作. 除了传统人工标注的做法外, 还可以使用OpenCV阈值过滤的方法[11], 通过提取指定灰度值范围内的部分获得目标位置, 但是这种方式对图像的要求比较高, 如果图像中的目标对象与背景颜色相近或者背景比较复杂的时候, 就难以提取出图像中的对象.
基于以上原因, 本文提出一种方法, 通过使用官方提供的已训练的目标检测模型, 对输入图像批量检测, 实现自动定位图像中的目标物体, 记录物体坐标位置、类别信息作为标签, 以此制作自己的数据集. 以YOLOv3算法和SSD算法为例, 使用已训练的目标检测模型, 对数据集中的图像进行初步的目标检测, 记录检测目标在图像中的位置信息, 数据集中图像的类别是已知的, 此时可以为数据集中的图像生成相应的标签. 这种方法可以帮助我们高效地生成模型训练所需要的数据集, 但是由于已训练模型的数据集与自己的数据集不同, 导致检测目标定位不够准确, 所以生成的数据集质量不可预估. 为了提高数据集质量, 本文使用多种不同的深度学习目标检测算法对自己的数据集进行目标检测生成标签, 并对检测结果图像进行裁剪、缩放操作, 再进行图像相似度的对比, 实现高效生成标签以及筛选符合预期效果图像的功能.
1 算法介绍 1.1 YOLOv3算法YOLOv3是一个融合多种先进算法思想构成的目标检测网络, 通过在COCO和ImageNet数据集上联合训练, 得到能够检测出80种类别物体的模型. YOLOv3采用darknet-19 与 ResNet[12]中残差思想融合的 darknet-53为网络主干, 网络兼具ResNet的较高准确率和YOLO系列检测速度快的特点, 同时还避免了网络深度过深导致梯度消失. 此外, YOLOv3 可以在 DarkNet、OpenCV、TensorFlow 等多种框架中实现. 本论文中使用基于 DarkNet实现的YOLOv3算法, 使用Python和C++两种语言完成实验.
YOLOv3运用了类似FPN的思想, 将原始图像缩放到416×416大小, 然后分别在13×13、26×26、52×52这3种尺寸的特征图上做目标检测, 最后融合3个检测结果, 这样使得YOLOv3在小目标的检测效果上有所提升. YOLOv3的每一个网格单元使用3个anchor, anchor所在网格在图像中的相对位置为(cx, cy), 每个anchor预测3个边界框, 边界框的长和宽分别为pw和ph. 每个网格单元的每个边界框产生4个位置预测值(tx, ty, tw, th)和1个置信度.σ指Sigmod函数.
$\left\{ \begin{aligned} &{b_{x}=\sigma\left(t_{x}\right)+c_{x}} \\ &{b_{y}=\sigma\left(t_{y}\right)+c_{y}} \\ &{b_{w}=p_{w} e^{t w}} \\ &{b_{h}=p_{h} e^{t h}} \end{aligned}\right. $ |
YOLOv3, 使用多个独立的logistics代替Softmax分类器, 这样使每个预测框可以单独分类, 即使是重叠物体, 模型也可以检测出来.
1.2 SSD算法SSD算法与YOLO系列算法相同都是one-stage的算法, 都具有检测速度快的特点. SSD算法融合了Fast-RCNN的anchor思想, 同时对每个default box还生成不同横纵比的候选框, 这样减小了漏检的可能. SSD算法采用预训练模型VGG16和额外的卷积层, 实现在不同层次的特征图中进行目标检测, 相当于在不同尺寸的特征图上多次执行目标检测, 高层特征图检测大物体, 低层特征图检测小物体, 最后综合各层次的检测结果, 可以更准确的识别图像中的目标物体. SSD算法在不同层次的特征图上使用更小的卷积核预测, 在许多不同横纵比的defaultbox中, 选择出满足条件的一些prior box与ground truth box匹配, 最终得到预测框, 具有比YOLOv3算法更高的精度. 但是, SSD和YOLOv3与多数目标检测算法相同, 对小尺寸物体检测效果不太好. 对于prior box等参数需要提前人工设置, 而且参数的设置对检测的结果会产生影响.
2 数据集介绍 2.1 COCO数据集COCO[13]是微软团队提供的一个可以用来进行图像识别的数据集. COCO中有80个对象类别和各种场景类型的图像, 现在有3种标注类型: 目标实例、目标上的关键点、图像文字描述, 可以在目标检测、实例分割、目标关键点追踪等任务中使用.
2.2 ImageNet数据集ImageNet[14]数据集是用于计算机视觉领域的大型图像数据库, 数据集有1400多万张图图像, 涵盖2万多个类别, 超过百万的图像有明确的类别标注和图像中物体位置的标注, 可以在图像分类(CLS)、目标定位(LOC)、目标检测(DET)、视频目标检测(VID)等任务中使用.
2.3 ILSVRC数据集ILSVRC[14]数据集是ImageNet数据集的子集, ILSVRCCLS-LOC是ImageNet中图像分类和目标定位的数据集子集, 其中包括1000个对象类别.
2.4 实验数据集实验数据集中只包含图像, 这些图像均来自网络及实际工作过程中长期积累的图像数据.
2.5 数据集格式YOLOv3的数据集包括两部分: 标签labels和图像images, 其中, labels文件夹中每一个文本文件中存放的是图像中目标对象的坐标位置信息, 每张图像对应一个txt标签(目标定位)文件, 要求图像名称与目标定位的txt标签文件名称必须相同, 并且labels文件夹和images文件夹在同一个目录下. YOLOv3.txt标签文件的数据格式如下:
当检测框boundingbox的左下、右上坐标分别为(x1, y1)(x2, y2), 图像的宽和高分别为W, H, 此时可以计算:
$\left\{ \begin{array}{l}{x=\left(\left(x_{1}+x_{2}\right) / 2.0\right) / W} \\ {y=\left(\left(y_{1}+y_{2}\right) / 2.0\right) / H} \\ {w=\left(x_{2}-x_{1}\right) / W} \\ {h=\left(y_{2}-y_{1}\right) / H}\end{array}\right. $ |
SSD 的数据集同样包括标签和图像两部分. JPEGImages文件夹下存放图像, Annotations文件夹下存放xml格式的标签文件, 并且要求图像的名称与标签的名称必须一致. SSD算法中, 还有一个ImageSets文件夹下的main文件夹中存放test.txt、val.txt、train.txt、trainval.txt 4个文件, 这4个文件中分别存放用来测试、验证、训练、训练和验证的图像文件的文件名列表. SSD标签文件格式如下:
然后, 将上面的标签文件处理成xml文件的数据格式如图1. 与图1对应的图像如图2.
但是, xml格式的标签不能直接在SSD算法中使用, 所以需要对标签文件做处理, 将xml格式的标签文件转换成TensorFlow统一使用的数据存储格式——tfrecord格式. tfrecord格式文件主要通过Example数据结构存储, 格式如图3.
3 图像相似度算法
图像相似度检测[15]是对多张图像的内容相似程度进行分析, 目前广泛应用在图像搜索、图像过滤、目标识别等领域. 图像相似度对比的方法有很多, 包括: SIFT算法[16]、图像直方图相似度、哈希的图像相似度等方法. 图像直方图方式最简单, 但是图像转为直方图丢失大量信息, 误判概率比较大. SIFT算法复杂, 会产生大量SIFT特征向量, 但是能够识别图像不超过25%的变形. 根据实验的需求, 选择了介于两者算法性能、复杂度之间的哈希图像相似度检测算法. 基于哈希的图像相似度检测算法包括: 均值哈希算法、感知哈希算法和差异值哈希算法. 以上三种相似度检测算法分别适用于不同的应用场景. 差异值哈希算法在识别效果方面优于均值哈希算法, 不如感知哈希算法, 但是在识别速度方面优于感知哈希算法[17]. 本论文中, 采用差异值哈希算法[18], 可以在使用较少的时间实现较好的效果. 使用差异值哈希算法, 首先需要对图像进行缩放, 可以选择缩放为8×8、16×16、32×32不同尺寸的图像, 然后, 将图像灰度化, 接下来是对图像差异值的计算, 以缩放尺度9×8(差异值哈希得到8×8的图像需要缩放成9×8, 同样16×16的需要缩放为17×16)为例, 通过分别对9×8图像的每一行中相邻的两个像素进行相减得到每个像素间的差异值, 最后得到8×8的图像哈希值. 最终, 通过两张图像哈希值的汉明距离计算, 得到图像的相似度.
4 架构与流程
目标检测数据集自动生成架构及执行流程如图4所示, 分为如下3个阶段.
阶段一: 获取原始标注图像. 使用基于DarkNet的YOLOv3算法和基于TensorFlow的SSD算法, 以及在COCO数据集上训练的YOLOv3模型和在ILSVRC CLS-LOC数据集预训练的SSD模型. 首先, 将原始数据集中的图像输入YOLOv3模型, 检测后得到带boundingbox的图像和位置坐标文件, 然后, 对坐标文件进行初筛, 丢弃未检测到目标的图像. 同时, 将原始数据集中的图像输入到已经训练好的SSD模型, 同上, 保留适当的图像集和位置坐标文件, 并且对两种方式获得的检测图像按照boundingbox进行裁剪.
阶段二: 图像相似度比较. 利用差异哈希算法, 对阶段一裁剪后的两个图像集中同名的图像逐一进行相似度检测, 根据相似度结果, 按照预先设置的阈值, 保留阈值范围的图像.
阶段三: 人工图像筛查. 通过对原始图像与检测图像的缩略图快速对比, 对阶段二得到的图像进行人工筛选, 选择正确的图像与相应的坐标文件, 得到最终的数据集. 获得的数据集, 作为将来目标检测模型训练的训练数据集, 使新训练的模型能够正确分类. 对于未检测到目标的图像, 根据模型在实际场景中是否达到预期效果, 决定是否对图像进行人工标注, 加入训练数据集, 增强模型目标检测的能力.
在SSD算法中, 传统数据集制作需要人工完成: 图像目标框标注、类别标注并生成xml标签文件、xml文件格式转换为tfrecord格式等工作. 在YOLOv3算法中, 传统数据集制作需要人工完成: 图像目标框标注、类别标注并生成txt文件等步骤. 对比本文方法, 现在只需要快速简单的人工筛查即可替代传统复杂、耗时的工作. 使用这种方法生成数据集代替人工标注图像, 不仅加快了标注速度, 而且引入相似度对比、人工筛查的步骤, 更好的保证了最终数据集的质量.
5 实验过程以基于DarkNet的YOLOv3为例, 需要修改网络结构(.cfg)文件的batch、division等参数存放在cfg中, 将指明训练集/测试集路径、类别数量、类别名称等信息的文件存放在data中.
5.1 实现方法首先, 将待生成标签的图像输入到已训练的模型中, 检测图像中目标物体的位置, 通过在DarkNet中绘制预测框命令前添加命令, 将图片路径、预测框的相对坐标以及目标框相对宽高写入文件, 输出的文件格式如图5(a)所示. 然后将图像的类别编号追加到上述的坐标位置文件中, 如图5(b)所示, 坐标位置文件的名称与图像名称一致.
然后, 使用基于TensorFlow的SSD算法, 直接使用SSD[4]论文中提到的在ILSVRC CLS-LOC数据集上预训练的SSD模型, 将待生成标签的图像输入, 然后把得到检测结果中目标框的坐标位置等信息整理成xml格式, 最终通过Python脚本生成tfrecord格式标签.
通过前面两步, 得到两组检测结果图像. 最后, 对以上两组结果图像按照目标框进行裁剪, 如图6和图7, 对比两组裁剪后图像的相似度为17. 输入图像大小对差异值相似度有影响[17], 经过对8×8、16×16、32×32不同尺寸图像的相似度检测结果对比, 8×8的图像在减少计算量的同时较好的保留图像信息. 将裁剪后的图像统一大小为9×8, 再计算相似度, 根据实验测试, 相似度阈值设置为30, 当相似度小于阈值的时候, 认为两张图像相似, 图像和标签是有效的.
5.2 实验结果
为了避免大量选取COCO数据集中包括的物种, 导致测试准确率虚高. 本实验选择猴类图像3797张、鹿类3530张、兔子类2407张、松鼠类2122张、老虎227张以及狼126张, 总共选取了约12 000张哺乳类动物的图像, 为其生成标签. 实验分别选择: 1)单独使用YOLOv3算法, 2)单独使用SSD算法, 3)同时使用YOLOv3和SSD算法以及相似度对比3种方法, 为图像生成标签. 为了实验结果有对比性, 3组实验使用相同的数据集. 具体实验结果如表1所示.
使用YOLOv3+SSD+相似度对比方法时, 数据集选择YOLOv3和SSD中均检测到对象的图像集作为数据集. 检测数目为经过相似度筛选后保留的图像数目. 检测率为图像检测数目占图像数目的比例. 检测准确率为准确图像占检测数目的比例.
6 结论与展望通过实验对比, 可以直观的看出, 当使用YOLOv3+SSD+相似度对比的方法, 不仅在生成数据集的速度上有提升, 而且对目标物体检测的准确率也有一定的提升. 但是, 这种方法存在不足: 筛选图像的质量依赖相似度阈值的设置, 如果阈值设置过小, 准确率率提升不明显, 设置过大, 导致大量的图像和标签被丢弃, 最终训练的数据量变小, 所以, 此后还需要寻找一种阈值设置的标准和方法. 另外, 检测图像时可能存在两种算法出现相同错误的情况, 导致该方法效果下降, 所以通过加入人工筛查来克服这个缺点. 如果最终数据集过小, 可以适当增大阈值的设置, 之后通过人工筛选过滤掉不符合要求的图像.
[1] |
LeCun Y, Bengio Y, Hinton G. Deep learning. Nature, 2015, 521(7553): 436-444. DOI:10.1038/nature14539 |
[2] |
Girshick R. Fast R-CNN. 2015 IEEE International Conference on Computer Vision (ICCV). Santiago, Chile. 2015. 1440–1448.
|
[3] |
Redmon J, Farhadi A. YOLOv3: An incremental improvement. Computer Vision and Pattern Recognition. arXiv: 1804.02767, 2018.
|
[4] |
Liu W, Anguelov D, Erhan D, et al. SSD: Single shot multiBox detector. European Conference on Computer Vision. Cham, Switzerland. 2016. 21–37.
|
[5] |
Lowe DG. Distinctive image features from scale-invariant keypoints. International Journal of Computer Vision, 2004, 60(2): 91-110. DOI:10.1023/B:VISI.0000029664.99615.94 |
[6] |
Schapire RE, Singer Y. Improved boosting algorithms using confidence-rated predictions. Machine Learning, 1999, 37(3): 297-336. DOI:10.1023/A:1007614523901 |
[7] |
Dalal N, Triggs B. Histograms of oriented gradients for human detection. 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. San Diego, CA, USA. 2005. 886–893.
|
[8] |
Ojala T, Pietikäinen M, Harwood D. A comparative study of texture measures with classification based on featured distributions. Pattern Recognition, 1996, 29(1): 51-59. DOI:10.1016/0031-3203(95)00067-4 |
[9] |
Ng PC, Henikoff S. SIFT: Predicting amino acid changes that affect protein function. Nucleic Acids Research, 2003, 31(13): 3812-3814. DOI:10.1093/nar/gkg509 |
[10] |
殷帅, 胡越黎, 刘思齐, 等. 基于YOLO网络的数据采集与标注. 仪表技术, 2018(12): 22-25. |
[11] |
不用人工打标制作目标检测数据集的方法. https://blog.csdn.net/u011983997/article/details/80089418. [2018-04-26].
|
[12] |
He KM, Zhang XY, Ren SQ, et al. Deep residual learning for image recognition. 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, NV, USA. 2016. 770–778.
|
[13] |
Chen XL, Fang H, Lin TY, et al. Microsoft COCO captions: Data collection and evaluation server. Computer Vision and Pattern Recognition. arXiv: 1504.00325, 2015.
|
[14] |
Deng J, Dong W, Socher R, et al. ImageNet: A large-scale hierarchical image database. 2009 IEEE Conference on Computer Vision and Pattern Recognition. Miami, FL, USA. 2009. 248–255.
|
[15] |
王法强, 张宏志, 王鹏, 等. 计算机视觉中相似度学习方法的研究进展. 智能计算机与应用, 2019(1): 149-152. DOI:10.3969/j.issn.2095-2163.2019.01.035 |
[16] |
Lowe DG. Object recognition from local scale-invariant features. Proceedings of the International Conference on Computer Vision. Corfu, Greece. 1999. 20–27.
|
[17] |
黄嘉恒, 李晓伟, 陈本辉, 等. 基于哈希的图像相似度算法比较研究. 大理大学学报, 2017, 2(12): 32-37. DOI:10.3969/j.issn.2096-2266.2017.12.007 |
[18] |
尹玉梅, 彭艺, 祁俊辉, 等. 基于双重Hash的图像相似检索算法研究. 信息通信技术, 2019(1): 33-38. |