知乎链接: https://zhuanlan.zhihu.com/p/108812579
这次复盘的其实是去年12月份结束的雪豹识别的比赛,话说去年是和猫科动物杠上了。由于中间一直各种事情,被各种拖拖拖~好吧,我确实是鸽王。https://jdata.jd.com/html/detail.html?id=9https://github.com/LcenArthas/JDATA-2019-Snow_leopard
1 比赛介绍
雪豹被称为“雪山之王,其中全球50%以上的雪豹适宜栖息地及其种群分布在中国境内。传统监测手段,面临很多问题,包括:监测影像数据大量冗余,物种及雪豹个体识别带来大量人力负荷,数据时效性较差,预测分析不够智能。本次比赛需要通过数据挖掘的技术和机器学习的算法,根据提供的雪豹视频数据设计和训练模型,实现对不同雪豹个体的识别。说白了,就是利用视频对出现的雪豹个体进行分类。可以看作是视频分类任务,但是又由于雪豹个体间差异性小的原因,又可以看作是细粒度分类。
2 数据分析
比赛主办方WCS(国际野生生物保护学会)提供了一个雪豹的视频数据集,现在简单来分析下这个数据集。训练集提供了35只雪豹的视频数据,每只雪豹包含了3到37个不等的视频片段,视频长度大部分为1秒到15秒。测试集则是提供了135个不同的视频片段,需要判断每个视频片段中出现的雪豹ID(35个ID)。
其中视频中存在着因为隐秘敏感信息而有的噪声。
视频中很多片段雪豹都不出现在视域中。
视频大致分为白天和夜间红外两种模态。
视频图像中抓拍的雪豹个体很多都是不完整的,且雪豹的尾巴占据身体图像的二分之一。
以上可以看出提供的数据是真的原始且粗糙ㄟ( ▔, ▔ )ㄏ,但是好在主办方明确了可以自主标注数据。
3 方法模型
1. 针对上文提到的噪声过大的视频片段,直接剔除,一共有删除了11个视频片段。2. 将视频数据进行抽帧作为图像数据来处理。均匀抽帧,每五帧抽取一次。3. 针对视频中下方出现的噪声带,直接在保存图像时切割。4. 标注雪豹的检测数据,这里随机在所有的图片中随机提取了1200张图片,利用软件进行了标注。其实就是每个图片框一个框,用不了多少时间。但是在标注时,如下图红框所示,并没有框到雪豹的尾巴。因为如果标注尾巴,如蓝色框,会引入更多额外的噪声。选择 Cascade_Rcnn + fpn 网络进行雪豹检测,Backbone 选择的是ResNeXt101,其中需要注意:
我一共尝试了 Vgg19、Vgg16、Vgg13、Desnet201、Resnet152、Resnet101、Desnet169、Desnet161等分类模型其中Vgg19效果最好,这里要注意的是:
在识别这块非常推荐大家这篇论文[1],包含了很多分类的一些tricks,但是效果好坏见仁见智。
4 总结
其实现在回顾这场比赛,可能真正的提分点主要在于数据的处理阶段。因为原始数据真的太粗糙了,对每个细节的处理都可能决定最后的分数。而且测试集一共就135个片段需要判别,一个片段的正误都可能有几个点的差距,最后的排行榜其实分差也就是几个片段的差距而已。所以这次也有运气的成分。决赛的答辩也遇到了很多厉害的选手,发现自己其实还有很多的不足,还可以做得更好一些。
参考:
1. ^Bag of Tricks for Image Classification with Convolutional Neural Networks https://arxiv.org/pdf/1812.01187.pdf