基于YOLOv3的物体检测案例分析——津南数字制造算法挑战赛初赛

写在前面

第一次做物体识别的比赛,磕磕绊绊进了复赛。有几点感受想和大家分享一下:

  • 不论是遇到什么样的bug,不论你现在排在什么名次,一定要坚持到最后一天,相信水到渠成。
  • 单干太辛苦,组队以后,尝试更多的idea,和队友一起坚持到底。
  • 一个强大的开源库往往能够让你事半功倍。推荐商汤的mmdetection

赛题介绍

本次比赛是利用X光图像及标注数据,监测图像是否包含危险品及其大致位置。初赛阶段提供了五类带有两种矩形框位置标记的限制品标注数据,以及一定数量无限制品包裹数据,限制品包括:铁壳打火机、黑钉打火机、刀具、电池电容以及剪刀五类(类别id依次从1到5)。
评测方式采用计算box mAP的方式,对IoU = 0.5:0.05:0.95,分别计算mAP,再做平均得到最后的mAP。

数据集分析

训练集里有限制品的图片样本(restricted)共977张,供选择使用的无限制品图片样本(normal)共2539张。对restricted的图片样本进行分析:

  • 样本均衡性分析
    赛题里说明有五种限制品,首先看一下训练样本集里各限制品的样本数。
    样本数目统计
    显然,铁壳打火机的样本数很少,而黑钉打火机、电源和电池样本数最多。样本有点失衡。
  • 图片尺寸分析
    宽度:
    基于YOLOv3的物体检测案例分析——津南数字制造算法挑战赛初赛_第1张图片
    高度:
    基于YOLOv3的物体检测案例分析——津南数字制造算法挑战赛初赛_第2张图片
    横轴表示尺寸大小,竖轴表示样本数目。从上图中可以看出样本尺寸在500-600像素区间分布较多,所以,网络输入图片样本的尺寸最后定在了640x640(也是考虑到硬件显存有限…哎)。
  • 其他尝试
    分析了两两类别的相关性,没有发现同时出现频率很高的两类别。

数据预处理

  • 考虑到样本有点失衡,适当增加了铁壳打火机、剪刀和刀具的数量。具体做法:在normal数据集上贴上裁剪出的铁壳打火机,剪刀和刀具,新生成200张铁壳打火机样本,100张剪刀和刀具样本。
  • 数据增强:
    基本操作:正负5°的旋转、0.1倍的缩放、正负2°的shear。

物体检测框架选择

物体检测目前分为one-stage和two-stage。one-stage的以YOLO、SSD等为代表,two-stage的以Faster-RCNN、SPPNet等为代表。如果比赛对实时性没有要求,建议采用two-stage的网络架构,精度更高,可操作性比较强。
初赛采用了YOLOv3,关于YOLOv3的讲解可以参考这篇博客。这里借用博客里的YOLOv3结构图:
基于YOLOv3的物体检测案例分析——津南数字制造算法挑战赛初赛_第3张图片
值得注意的几点:

  • YOLOv3里没有池化层,尺寸的缩小以stride=2实现;
  • DBL是YOLOv3的基本单元;
  • YOLOv3借鉴了残差网络里的残差结构,使得网络可以更深;、
  • YOLOv3实现了多尺度检测,类似于FPN,大尺度的feature map检测小物体,小尺度的检测大物体;
  • YOLOv3每个单元格预测3个box,每个box有5个参数(x,y,w,h, confidence),所以每个单元格有3*(5+n_class)的输出;
  • YOLOv3的loss是wh_loss+xy_loss+confidence_loss+class_loss,其中wh、xy采用了平方误差,confidence和class都用了交叉熵。

调参过程

  • 使用k-means算法聚类,更换anchors。成绩提升不大,个人认为k-means的框的尺寸应该是数据增强后的尺寸,而不是原始数据集尺寸。
  • 使用数据扩充的数据集(前面提到的400张新图片)。提升大概5%。
  • SGDR+增大epoch。提升大概1%。
  • 分析发现测试集里normal数据大概占了2/3,因此设计了一个二分类网络预先对测试集数据分类,阈值设置偏小,提升召回率。提升大概接近2%。
  • soft-nms。soft-nms对于IOU比较高的同类两物体比较友好,比赛里用了提升不大。
  • 输入尺寸、batchsize等超参数的调整还是看硬件配置,硬件条件有限,尽可能大吧。

小结

  • 比赛里object里很多是小物体,检测结果显示,YOLOv3对小物体的识别还是可以的,基本能够将测试集里的object都检测出来。
  • 然而,YOLOv3定位不是很准确,相比于two-stage的检测网络,YOLOv3框的精度还是有所欠缺,所以比赛并不讨喜。
  • 网络还可以调整的地方:
  1. 输出anchors的数量可以缩减;
  2. loss可以调整调整,YOLOv3在样本不平衡方面有自己的解决方法,focal loss似乎改善不大。
  3. backbone可以换一换。

你可能感兴趣的:(深度学习(图像))