点击上方蓝字“中大AI技术俱乐部”一起玩耍!😌
日前,以俱乐部主席吴文熙、算法部部长刘凌波为主力的队伍 “SYSU_HCPLab” 顺利通过The Nature ConservancyFisheries Monitoring竞赛答辩,从全球2293支队伍中脱颖而出,正式获得了Kaggle本项赛事的金牌!
图1:非受控渔业作业场景
比赛要求:给定一张非受控渔业作业场景的图片(如图1所示),赛事要求参赛者设计算法预测这个图片中是否出现鱼类,以及出现的鱼类的类别(总共有7类鱼)。由于图片中存在关照变化大、鱼类角度多变和被遮挡、训练数据稀少且分布不均衡等问题,使得这个任务极具挑战性。
图2:算法总流程
针对上述问题,我们通过精心设计算法,采用深度学习多模型融合的方法,取得了很好的成绩。如图2所示,对于给定的一张图片,我们的算法分成3个步骤,第一步是鱼类检测(Fish Localization),即定位出图像中出现的鱼类的位置,每一条鱼都称为一个Instance,第二步是鱼类识别(Fish Verification),即判断给定的一条鱼(Instance)是属于哪种鱼(Instance level label),第三步是集合(Aggregation),当图片中存在多个Instance时,需要融合它们的instance level label,最后得到整张图片的鱼类类别(Image level label)。
下面将详细介绍我们的方法
01
鱼类检测
我们采用基于ResNet-101的Faster R-CNN框架实现对图片中鱼类的定位。如图3所示,我们的检测方法分成3个步骤:
➤通过RPN提取可能是鱼的区域(proposals);
➤通过RoI Pooling提取proposals的特征;
➤基于RoI Pooling后的特征,判断proposals是否真的是鱼类以及进一步优化proposals的坐标位置;
与传统Faster R-CNN不同的是,我们采用了更为先进的Region Sensitive RoI-Pooling layer,提高了检测子对遮挡鱼类的鲁棒性。同时,我们采用了在线难样本挖掘的方法(online hard example mining),增量了模型的判别能力,加快了模型收敛速度。另外,在训练和测试的时候,采用multi-scale 和 multi-cropped的策略也会提高预测效果。
02
鱼类识别
由于赛事举办方提供的训练数据集规模小,类别数目分布不均衡,有些类有几千张图片,有些类只有一百多张图片,所以需要通过数据增量(Data Augmentation)的方法人为增大训练数据。
数据增量的方法包括:
➤图片水平或垂直翻转;
➤图片旋转,-90度到90度;
➤随机裁剪,256 -> 224 or 128 -> 112;
图4:鱼类识别框架
如图4所示,我们采用基于CrossEntropy Loss和Triple loss的鱼类识别模型。首先,我们对训练数据进行重采样,构建三元组,每个三元组包括两张属于同一类鱼的图片以及另外一种鱼的图片。
我们把三元组输入三个参数共享的模型,再提取到图片的特征后,再使用softmax对每张图片进行分类。我们要求模型不仅能正确判断三元组每张鱼类图片的类别,而且使得属于同一种鱼的两张图片的特征尽可能相似,属于不同鱼的两张图片的特征差别尽可能地大。
我们使用了4种不同的网络模型和学习策略实现我们的识别框架。
➤模型A:基于GoogLeNet的识别框架
以112*112*3的图片作为网络输入,经过GoogLeNet后提取到64维的特征,再使用softmax分离器预测鱼类的类别;
➤模型B:基于ResNet152的识别框架
以224*224*3的图片作为网络输入,经过152层的ResNet后提取到64维的特征,再使用softmax分离器预测鱼类的类别;
➤模型C:基于ResNet101的识别框架
与模型B类似,以224*224*3的图片作为网络输入,经过101层的ResNet后提取到64维的特征,再使用softmax分离器预测鱼类的类别;
➤模型D:基于ResNet101和自步学习策略的识别框架
与模型C类似,我们结合了自步学习(SelfPaced Learning)的策略训练我们的识别模型。如图5所示的鱼类难样本,我们人类也很难区分它们的类别,如果简单直接地把它们加进去训练识别模型,反而使得我们的模型也迷惑掉,导致效果下降。
图5:鱼类难样本
所以我们采用自步学习的方法,自步学习能够自主选择训练样本, 挖掘异常样本。在训练的时候,当一个训练样本的预测结果离人工标注结果足够远时,我们就认为这个训练样本是个异常难的样本,所以就让暂时把它从训练集里移除。我们实验发现,采用了自步学习策略后,确实近一步提供了预测效果。
在测试的时候,我们采用多模型加权平均的方法得到一个Instance的类别预测结果。我们通过在验证集上确定每个模型的权值。
03
集合
经过上诉两个步骤,我们可以得到每个Instance的预测结果。当一张图片有多个Instance时,我们需要综合考虑每个Instance的预测结果,得到图片级别的鱼类类别预测结果。在这里,我们简单地采用平均的方法得到最后的结果。
下面是跟我们方法相关的一些论文,建议每位同学可以认真阅读下面论文,以增加对我们鱼类检测和识别算法的理解。
[1] RenS, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detectionwith region proposal networks[C]//Advances in neural information processingsystems. 2015: 91-99.
[2] LiY, He K, Sun J. R-fcn: Object detection via region-based fully convolutionalnetworks[C]//Advances in Neural Information Processing Systems. 2016: 379-387.
[3]Shrivastava A, Gupta A, Girshick R. Training region-based object detectors withonline hard example mining[C]//Proceedings of the IEEE Conference on ComputerVision and Pattern Recognition. 2016: 761-769.
[4] WangG, Lin L, Ding S, et al. Dari: Distance metric and representation integrationfor person verification[J]. arXiv preprint arXiv:1604.04377, 2016.
[5]Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]//Proceedingsof the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 1-9.
[6] HeK, Zhang X, Ren S, et al. Deep residual learning for imagerecognition[C]//Proceedings of the IEEE Conference on Computer Vision andPattern Recognition. 2016: 770-778.
[7] LinL, Wang K, Meng D, et al. Active self-paced learning for cost-effective andprogressive face identification[J]. IEEE transactions on pattern analysis andmachine intelligence, 2017.