比赛总结 | JDATA 2019 雪豹识别挑战赛冠军方案

作者:情书
知乎链接: https://zhuanlan.zhihu.com/p/108812579
本文已由作者授权转载,未经允许,不得二次转载。
这次复盘的其实是去年12月份结束的雪豹识别的比赛,话说去年是和猫科动物杠上了。由于中间一直各种事情,被各种拖拖拖~好吧,我确实是鸽王。
https://jdata.jd.com/html/detail.html?id=9
还是老规矩,先上代码,欢迎Star~
https://github.com/LcenArthas/JDATA-2019-Snow_leopard

1 比赛介绍

雪豹被称为“雪山之王,其中全球50%以上的雪豹适宜栖息地及其种群分布在中国境内。传统监测手段,面临很多问题,包括:监测影像数据大量冗余,物种及雪豹个体识别带来大量人力负荷,数据时效性较差,预测分析不够智能。本次比赛需要通过数据挖掘的技术和机器学习的算法,根据提供的雪豹视频数据设计和训练模型,实现对不同雪豹个体的识别。
说白了,就是利用视频对出现的雪豹个体进行分类。可以看作是视频分类任务,但是又由于雪豹个体间差异性小的原因,又可以看作是细粒度分类。

2 数据分析

比赛主办方WCS(国际野生生物保护学会)提供了一个雪豹的视频数据集,现在简单来分析下这个数据集。
训练集提供了35只雪豹的视频数据,每只雪豹包含了3到37个不等的视频片段,视频长度大部分为1秒到15秒。测试集则是提供了135个不同的视频片段,需要判断每个视频片段中出现的雪豹ID(35个ID)。
对于数据需要注意的是,如下图所示:
  1. 其中视频中存在着因为隐秘敏感信息而有的噪声。

  2. 视频中很多片段雪豹都不出现在视域中。

  3. 视频大致分为白天和夜间红外两种模态。

  4. 视频图像中抓拍的雪豹个体很多都是不完整的,且雪豹的尾巴占据身体图像的二分之一。

质量堪忧的数据
以上可以看出提供的数据是真的原始且粗糙ㄟ( ▔, ▔ )ㄏ,但是好在主办方明确了可以自主标注数据。
那我直接标注测试集ID就好了嗷~
想什么呢?!小老弟~只能标注训练集。

3 方法模型

数据预处理

这里主要做了就是两个工作,数据清洗和图像标注
1. 针对上文提到的噪声过大的视频片段,直接剔除,一共有删除了11个视频片段。
2. 将视频数据进行抽帧作为图像数据来处理。均匀抽帧,每五帧抽取一次。
3. 针对视频中下方出现的噪声带,直接在保存图像时切割。
4. 标注雪豹的检测数据,这里随机在所有的图片中随机提取了1200张图片,利用软件进行了标注。其实就是每个图片框一个框,用不了多少时间。但是在标注时,如下图红框所示,并没有框到雪豹的尾巴。因为如果标注尾巴,如蓝色框,会引入更多额外的噪声。
人工标注,红色框为正确的标注
雪豹检测

选择 Cascade_Rcnn + fpn 网络进行雪豹检测,Backbone 选择的是ResNeXt101,其中需要注意:
  • 输入尺寸是 1000 * 800

  • 选择Coco数据集的预训练模型,而不是ImageNet,链接地址: github.com/open-mmlab/m

  • 训练时候采用多种数据增强策略,例如翻转,色彩增强,亮度增强,随机切割等

  • 测试时候采用Soft NMS策略

雪豹识别

我一共尝试了 Vgg19、Vgg16、Vgg13、Desnet201、Resnet152、Resnet101、Desnet169、Desnet161等分类模型其中Vgg19效果最好,这里要注意的是:
  • 采用了Label-smoothing策略

  • 采用多种数据增强策略,翻转、旋转、随机裁剪、颜色噪音、平移等

  • 增大Resnet最后一层的步数,扩大特征图的输出

  • 采用ImageNet的预训练模型

在识别这块非常推荐大家这篇论文[1],包含了很多分类的一些tricks,但是效果好坏见仁见智。

4 总结

其实现在回顾这场比赛,可能真正的提分点主要在于数据的处理阶段。因为原始数据真的太粗糙了,对每个细节的处理都可能决定最后的分数。而且测试集一共就135个片段需要判别,一个片段的正误都可能有几个点的差距,最后的排行榜其实分差也就是几个片段的差距而已。所以这次也有运气的成分。
决赛的答辩也遇到了很多厉害的选手,发现自己其实还有很多的不足,还可以做得更好一些。

参考:

1. ^Bag of Tricks for Image Classification with Convolutional Neural Networks https://arxiv.org/pdf/1812.01187.pdf

(0)

相关推荐