赶时间请直接跳转到“冠军的竞赛思路”一节。
目标检测是计算机视觉中的一个重要的应用方向,与之相关的应用也越来越多。百度飞桨与北京林业大学合作开发的AI识虫项目,是将AI与农业相结合的典型案例。本次比赛将使用林业病虫数据集,使用目标检测算法对图片中的虫子类别和位置进行预测。
在《零基础实践深度学习课程》中,老师讲介绍如何使用YOLO-V3算法检测虫子,但老师所讲授的内容只包含最基本的功能。学员需要在此基础上对模型参数或者模型结构进行调整,以得到更好的评估结果。主要改进方案参见下面的指导说明。
课堂上老师会讲述YOLO-V3模型,教案里面给出的是最基础的模型介绍及实现,在此基础上的主要改进方案有:
1、 使用其它模型如faster rcnn等 (难度系数5)
2、 使用数据增多,可以对原图进行翻转、裁剪等操作 (难度系数3)
3、 修改anchor参数的设置,教案中的anchor参数设置直接使用原作者在coco数据集上的设置,针对此模型是否要调整 (难度系数3)
4、 调整优化器、学习率策略、正则化系数等是否能提升模型精度 (难度系数1)
参赛者需要训练好目标检测模型,并且用训练好的模型在测试数据集上进行预测,每张图片的预测输出结果为图片中包含的虫子的 类别、位置、和置信度得分 。
请将结果保存为json文件。参赛者需提供飞桨训练好的模型参数,可以在AI Studio Notebook中一键运行的预测代码,还有存放预测结果的json文本文件。
我主要是针对指导说明中的2、3、4点来进行优化,其中第四点属于是经验玄学调参了,这里不再赘述。
这里我采用了基本的数据增广方式,如旋转、裁剪、缩放、填充、亮暗、对比度等,代码可见我另一篇博客(点击此处跳转)。经过这步操作后,mAP得分提高了5个百分点左右。
由于练习赛给出的baseline中的anchor参数设置直接使用YOLOv3作者在coco数据集上的设置:YOLOv3在每个区域的中心位置产生3个锚框 (anchor box),在3个层级的特征图上产生锚框的大小分别为P2 [(10×13),(16×30),(33×23)],P1 [(30×61),(62×45),(59× 119)],P0[(116 × 90), (156 × 198), (373 × 326]。越往后的特征图上用到的锚框尺寸也越大,能捕捉到大尺寸目标的信息;越往前的特征图上锚框尺寸越小,能捕捉到小尺寸目标的信息。
anchor实际上是由k-means算法在所用数据集上聚类得到的,所以我考虑计算林业病虫数据集的anchor。参考了这篇博客的代码(点击此处跳转),其中需要设置CLUSTERS
参数,它代表你要得到的anchor box个数,比如这里用到了三个层级的特征图,每个特征图对应三个anchor box,所以设置为9。使用得到的新anchor后,mAP得分提高了8个百分点左右。
注意: 由于KMeans算法的结果对于初始点的选取敏感,因而每次运行的结果并不相同。至于 哪个anchor参数好,只有自己去尝试了。
由于水平有限,时间也不够,最后我没有再进行优化。得分也定格在了82.3,附上一张在这个精度下的测试结果图。
首先上代码,冠军已经将他的代码开源到了GitHub,此大神不是仅仅用了paddle detection上的模型(Paddle GitHub),而时在此基础上做了二次开发,属实牛批。其中也用到了很多技巧,关键是大佬对数据的分析真是让人眼界打开,下面我会详细介绍大佬的思路。
【转自冠军代码分享】
大家好,之前AI识虫的比赛代码我已经推到Github上了,有需要的同学自取哈
https://github.com/LKKlein/AI-Insects-Challenge
另外,我在AIStudio中也同步建立了一个公开的Repo,有兴趣的同学可以看一看
https://aistudio.baidu.com/aistudio/projectdetail/289616
有问题的话大家一起交流交流,我之前试过运行,偶尔会有报错的情况,请大家谅解
从表格和图像中可以得到以下几个信息:
数据预处理部分除了使用基本数据增广,还用到了 MixUp(MixUp介绍点此处),简单来说就是将两个图按一定比例混合在一起,相当于做了视觉干扰,改变了图像本身的分布,增加的新样本。效果图如下:
后续还有一些基本操作,如:图像归一化,gt_bbox压缩到[0,1],Kmeans聚类得到新anchor,前面已有介绍。
将上一步中得到的检测结果采用分类模型进一步预测,提高分类准确率和分类阈值。方法如下图:
最后检测结果mAP评分达到了惊人的满分!
比赛官网. https://aistudio.baidu.com/aistudio/competition/detail/24
基本数据增广. https://blog.csdn.net/m_buddy/article/details/82926024
Paddle Detection. https://github.com/PaddlePaddle/PaddleDetection
MixUp. https://blog.csdn.net/u013841196/article/details/81049968
Zhang, Zhi, et al. “Bag of freebies for training object detection neural networks.” arXiv preprint arXiv:1902.04103 (2019). (冠军的主要思路来于此论文,总结了最新的神经网络训练技巧)