CVPR 2019细粒度图像分类竞赛中国团队DeepBlueAI获冠军 | 技术干货分享
【导读】CVPR 2019细粒度图像分类workshop的挑战赛公布了最终结果:中国团队DeepBlueAI获得冠军。本文带来冠军团队解决方案的技术分享。
近日,在Kaggle上举办的CVPR 2019 Cassava Disease Classification挑战赛公布了最终结果,国内团队 DeepBlueAI 获得冠军。
国际计算机视觉与模式识别会议(CVPR)是IEEE一年一度的学术性会议,CVPR是世界顶级的计算机视觉会议之一,会议的主要内容是计算机视觉与模式识别技术。CVPR 2019 在洛杉矶长滩举行,FGVC6 Workshop也将作为 CVPR 2019 的一部分如期召开。FGVC6 Workshop 共有十个挑战赛,每个都代表了细粒度视觉分类在某个细分领域的挑战。
FGVC全称为Fine-Grained Visual Categorization,细粒度图像分类,即区分不同的动物和植物、汽车和摩托车模型、建筑风格等,是机器视觉社区刚刚开始解决的最有趣和最有用的开放问题之一。细粒度图像分类在于基本的分类识别(对象识别)和个体识别(人脸识别,生物识别)之间的连续性。相似的类别之间的视觉区别通常非常小,因此很难用当今的通用识别算法来解决。
今年是FGVC举办的第六届比赛,往届比较著名的比赛诸如iNaturalist和iMaterialist,前者侧重于区分自然界不同的生物,后者则是侧重于区分不同的人造物体。
不同于传统的广义上的分类任务,FGVC的挑战致力于子类别的划分,需要分类的对象之间更加相似,例如区分不同的鸟类、不同的植物、不同的日用品等。
赛题介绍
Cassava Disease Classification挑战赛是一个根据木薯的叶子区分不同种类的木薯疾病的任务。Cassava 译为木薯,是非洲第二大碳水化合物供应者,因为其能够承受恶劣的环境。因此木薯是小农种植的一种关键的粮食安全作物,在撒哈拉以南非洲,至少80%的小农家庭种植木薯,而病毒性疾病是低产量的主要来源。
在这次比赛中,主办方引入一个包含5种类别的木薯叶疾病的数据集,该数据集源于在乌干达定期调查中收集到的9436标记图像,主要从农民在自家田地里拍摄的图片,然后由国家作物资源研究所(NaCRRI)与Makarere大学的人工智能实验室共同对图像进行标注。
数据集包括木薯植株的叶子图像,9,436张带注释的图像和12,595张未标记的图像。参与者可以选择使用未标记的图像作为额外的训练数据。目标是学习一个模型,使用训练数据中的图像将给定的图像分类为这4个疾病类别或健康叶子的类别。
团队成绩
题目特点以及常用方法
细粒度图像分类 (Fine-grained imagecategorization), 又被称作子类别图像分类 (Sub-category recognition)。其目的是对属于同一基础类别的图像进行更加细致的子类划分, 但由于子类别间细微的类间差异以及较大的类内差异, 更传统的图像分类任务相比, 细粒度图像分类难度明显要大很多。从下图中的木薯的叶子可以看出,不同的叶子病变情况长相非常相似,此外同一类别由于姿态,背景以及拍摄角度的不同,存在较大的类内差异。
细粒度图像分类的常用方法可以分为两种,分别是基于强监督信息的方法和仅使用弱监督信息的方法。前者需要使用对象的边界框和局部标注信息,后者仅使用类别标签,Cassava Disease Classification是一种弱监督信息的细粒度识别,一般采用预训练模型finetune,并结合训练技巧对模型精调。
实验模型:SENet、ResNet、DenseNet
ResNet是CNN历史上一个里程碑事件,模型深度达到了152层,这和之前CNN的层数完全不在一个量级上。ResNet中的identity的这条线类似一条电路上的短路(shortcuts,skip connection),使得模型学习更加容易,深层可以直接得到浅层的网络特征。
DenseNet的原理不同于ResNet通过加深网络层数以及Inception通过加宽网络宽度来提高模型识别能力,而是利用特征重用和类似ResNet的Bypass的方式,减少了网络参数和缓解了梯度消失的问题。
SENet提出了Sequeeze and Excitation block,该模块于传统网络的最大区别在于其侧重于构建通道之间的依赖关系,利用global average pooling来Sequeeze特征图,并用Excitation对前者进行非线性变换,最后再叠加到输入特征上。可以自适应的校准通道的相应特征,并且该模块可以嵌入到现有的网络结构中,实现精度的提升。
模型训练与评测
原图 VerticalFlip HorizontalFlip RandomRotate RandomCrop
RandomErasing
CutOut
由于训练集样本过少,对比分析后对输入数据采取 VerticalFlip,HorizontalFilp 、RandomRotate和RandomCrop的增强操作。此外,还使用了RandomErasing和Cutout,方法会在原图随机选择一些矩形区域,改变该区域的像素值,通过这些数据增强的方式,训练集的图片会被不同程度的遮挡,这样可以进一步降低过拟合的风险并提高模型的鲁棒性。
同样的,为了增强模型的鲁棒性减少过拟合,本次比赛我们利用5-fold crossvalidation,交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现。用crossvalidation之后,SE_ResNeXt50测试集准确率提升0.01016,ResNet34测试集准确率提升0.01142。
这次比赛中,我们还使用了Mixup和label smoothing的训练策略。Mixup顾名思义就是将两张图片按一定比例融合起来作为输入,计算loss时,针对两张图片的标签分别计算,然后按比例加权求和。Mixup是一种抑制过拟合的策略,通过增加了一些数据上的扰动,从而提升了模型的泛化能力。
实验证明,该方式能将Top1准确率提高近一个百分点。对于分类问题,常规做法时将类别换成one-hot vector。由于标签是类别的one-hot vector,这样做易导致过拟合使得模型泛化能力下降;同时这种做法会将所属类别和非所属类别之间的差距尽可能大,因此很难调优模型。
为此,可以用label smoothing对标签进行平滑处理,软化one-hot类型标签,使得计算损失函数时能有效抑制过拟合现象。
训练以Adam为optimiser,学习率的设置为阶梯状,共四个取值,[3e-4, 1e-4,1e-5, 1e-6],设置patience为4来衰减学习率,即模型连续4个epoch在验证集上效果没有提升则衰减学习率,训练总的epcoh在20次左右。本实验使用的GPU为4卡2080Ti,并行训练一个模型,batchsize通常设为32,较大的模型根据实际情况适当减小。
模型在预测时采用了数据增强的方式Test time augmentation(TTA),即将样本图像进行多个不同的变换获得多个不同的预测结果,再将预测结果进行平均,提高精度。本次任务利用3*TTA,包括 RandomCrop, RandomCrop+HorizontalFlip 和RandomCrop+VerticalFlip 。
模型集成是算法比赛中常用的提高模型精度方法,本次比赛我们训练了大量在ImageNet上表现优良的模型,其中表现较好的模型如下表所示、在采取多种融合方式之后,最终发现SE_ResNeXt50、SE_ResNeXt101、SENet154以及DenseNet201按照归一化后权重的融合效果最好,在测试集上的准确率达到了0.92516。
|
模型 |
测试集准确率 |
|
SE_ResNeXt50 |
0.92251 |
|
SE_ResNeXt101 |
0.92384 |
|
SENet154 |
0.92384 |
|
DenseNet201 |
0.91721 |
|
MobileNetV2 |
0.91601 |
|
ResNet152 |
0.91710 |
|
SE_ResNeXt50+SE_ResNeXt101+SENet154+DenseNet201 |
0.92516 |
本次比赛主办方提供了12595张未带label的额外数据集,为了充分利用该数据集,利用在测试集表现最好的融合模型给这些数据集贴上伪标签。然后利用训练集和伪标签数据集训练模型,为了防止模型在伪标签上过拟合,我们对伪标签采取了一定的筛选操作。
采取的思路是:用多个不同概率阈值的过滤所得到的伪标签进行线下实验,看哪个阈值下的数据在线下的表现最好,就用通过该阈值筛选过滤出的数据,最终以0.95的阈值筛选出一半的数据作为添加到训练集的伪标签数据。
实验证明这种半监督的学习方法具有更强的泛化能力。
|
模型 |
测试集准确率 (public leaderboard) |
Private leaderboard |
|
SE_ResNeXt50 |
0.92251 |
0.93012 |
|
SE_ResNeXt50 with pseudo data |
0.92195 |
0.93512 |
|
SE_ResNeXt101 |
0.92384 |
0.93134 |
|
SE_ResNeXt101 with pseudo data |
0.92202 |
0.93409 |
|
SENet154 |
0.92384 |
0.93054 |
|
SE_ResNeXt154 with pseudo data |
0.92283 |
0.93428 |
|
SE_ResNeXt50+SE_ResNeXt101+ SENet154+DenseNet201 |
0.92516 |
0.93727 |
|
SE_ResNeXt50+SE_ResNeXt101+ SENet154+DenseNet201 with pseudo data |
0.92516 |
0.93860 |
进一步工作
针对细粒度图像分类,MSRA有一个结论:分析该问题时图像的形态、轮廓特征原没细节纹理特征重要,而传统的CNN模型都是在构建轮廓特征,因此在构建神经网络时,应该更加精确地找到图像中最有区分度的子区域,然后再对这些区域采用高分辨率、精细化特征的方法,这样可以进一步提高细粒度图像分类的准确率。
另外对数据本身我们可能需要做更多的工作,在任务初期没有做足够的探索性数据分析,例如数据的分布、类型、输入图像的尺寸等都是影响结果的因素,因此数据分析也是后面的一个尝试点。
参考文献
[1]A. Krizhevsky, I. Sutskever, and G. E. Hinton. Imagenetclassification with deep convolutional neural networks. In Advances in neuralinformation processing systems,pages1097–1105,2012.
[2]K. He, X. Zhang, S. Ren, and J. Sun. Deep residuallearning for image recognition. arXiv preprint arXiv:1512.03385,2015.
[3]K. Simonyan and A. Zisserman. Very deep convolutionalnetworks for large-scaleimage recognition. arXiv preprint arXiv:1409.1556,2014.
[4]C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D.Anguelov, D. Erhan, V.Vanhoucke, and A. Rabinovich. Going deeper withconvolutions. In Proceedings ofthe IEEE Conference on Computer Vision andPattern Recognition,pages 1–9,2015.
[5]R. Srivastava, K. Greff and J. Schmidhuber. TrainingVery Deep Networks. arXiv preprint arXiv:1507.06228v2,2015.
[6]S. Hochreiter and J. Schmidhuber. Long short-termmemory. Neural Comput.,9(8):1735–1780, Nov. 1997.
[7]K. He, X. Zhang, S. Ren, and J. Sun. Identity Mappingsin Deep Residual Networks. arXiv preprint arXiv:1603.05027v3,2016.
[8]S. Xie, R. Girshick, P. Dollar, Z. Tu and K. He.Aggregated Residual Transformations for Deep Neural Networks. arXiv preprint arXiv:1611.05431v1,2016.
[9]G. Huang, Z. Liu, K. Q. Weinberger and L. Maaten.Densely Connected Convolutional Networks. arXiv:1608.06993v3,2016.
[10]G. Huang, Y. Sun, Z. Liu, D. Sedra and K. Q.Weinberger. Deep Networks with Stochastic Depth. arXiv:1603.09382v3,2016.
[11]N. Srivastava, G. Hinton, A. Krizhevsky, I. Sutskeverand R. Salakhutdinov.Dropout: A Simple Way to Prevent Neural Networks fromOverfitting. The Journal of Machine Learning Research 15(1) (2014) 1929–1958.
[12]A. Veit, M. Wilber and S. Belongie. Residual NetworksBehave Like Ensembles of Relatively Shallow Networks. arXiv:1605.06431v2,2016.
[13] Hu, J., Shen, L., Albanie, S., Sun, G., Wu, E. 2017.Squeeze-and-Excitation Networks. arXiv e-prints arXiv:1709.01507.
[14] Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking theInception Architecture for Computer Vision[C]// Computer Vision and PatternRecognition. IEEE, 2016:2818-2826.
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/
CVPR 2019细粒度图像分类竞赛中国团队DeepBlueAI获冠军 | 技术干货分享的更多相关文章
- CVPR 2019轨迹预测竞赛冠军方法总结
背景 CVPR 2019 是机器视觉方向最重要的学术会议,本届大会共吸引了来自全世界各地共计 5160 篇论文,共接收 1294 篇论文,投稿数量和接受数量都创下了历史新高,其中与自动驾驶相关的论文. ...
- 自动驾驶研究回顾:CVPR 2019摘要
我们相信开发自动驾驶技术是我们这个时代最大的工程挑战之一,行业和研究团体之间的合作将扮演重要角色.由于这个原因,我们一直在通过参加学术会议,以及最近推出的自动驾驶数据集和基于语义地图的3D对象检测的K ...
- Relation-Shape Convolutional Neural Network for Point Cloud Analysis(CVPR 2019)
代码:https://github.com/Yochengliu/Relation-Shape-CNN 文章:https://arxiv.org/abs/1904.07601 作者直播:https:/ ...
- CVPR 2019 行人检测新思路:
CVPR 2019 行人检测新思路:高级语义特征检测取得精度新突破 原创: CV君 我爱计算机视觉 今天 点击我爱计算机视觉置顶或标星,更快获取CVML新技术 今天跟大家分享一篇昨天新出的CVPR 2 ...
- 中国.NET:各地微软技术俱乐部汇总(持续更新中...)
中国.NET:各地微软技术俱乐部汇总(持续更新中...) 本文是转载文,源地址: https://www.cnblogs.com/panchun/p/JLBList.html by 史记微软. ...
- FD.io 社区中国行暨未来网络技术沙龙 南京站 参会小结
FD.io 社区中国行暨未来网络技术沙龙 南京站,2018 年 3 月 17 日. 开场致辞 Ray 介绍了一些有的没的 ⁃ (Future Event)DPDK summit, FD.io summ ...
- 一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队
一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队
- cvpr 2019 workshop&oral session
1. Verification and Certification of Neural Networks神经网络的验证与认证 2. Automated Analysis of Marine Video ...
- ADN中国团队參加微软的Kinect全国大赛获得三等奖
上周末我们团队參加了微软的Kinect全国大赛,我们的Kinect + Navisworks漫游荣膺三等奖 团队经理Joe写了篇详实的总结,我就直接转载了. http://blog.csdn.ne ...
随机推荐
- CSS——NO.4(继承、层叠、特殊性、重要性)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- IP 地址与MAC硬件地址
IP 地址与MAC硬件地址 我们都知道数据通信要使用IP地址加MAC地址,两个地址缺一不可,下为原理图: 1.下面介绍计算机A与计算机B通信的过程 交换机基于数据帧的MAC地址转发数据帧,路由器基于数 ...
- VUE实现Studio管理后台(三):支持多语言国际化(vue-i18n)
RXEditor的第一版本是英文版,有些朋友看起来觉得不习惯,后来因为惰性,不愿意再修改旧代码加入中文版,这次提前就把这个问题解决了,克服惰性最好的方式,就是想到就尽快去做,避免拖延. 本来计划在界面 ...
- MVC05
1. 添加搜索功能 如何实现url添加查询字符串实现查询指定项目的功能? 来到MovisController,修改Index方法如下 public ActionResult Index(string ...
- java网络编程——socket实现简单的CS会话
还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...
- 前端每日实战:52# 视频演示如何用纯 CSS 创作一个小球绕着圆环盘旋的动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKxyWo 可交互视频 此视频是可 ...
- JZOJ 3927. 【NOIP2014模拟11.6】可见点数
3927. [NOIP2014模拟11.6]可见点数 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description ZP ...
- C++ 命令行窗口打印二叉树(图形)
写这个程序的目的是学习数据结构的时候方便调试,学习起来也比较直观. 这个是我测试SplayTree时候的gif STEP 1 新建一个头文件,命名为DrawATree.hh, 将以下内容复制进去 #i ...
- ES6中的Promise使用总结
One.什么是Promise? Promise是异步编程的解决方案,而它本身也就是一个构造函数,比传统的异步解决[回调函数]和[事件]更合理,更强大. Two.Promise有何作用? 作用:解决回调 ...
- Java Grammar(三):修饰符
简介 修饰符是用于限定类型以及类型成员申明的一种符号,从修饰对象上可以分为类修饰符,方法修饰符,变量修饰符:从功能上可以划分为访问控制修饰符和非访问修饰符.访问修饰符控制访问权限,不同的访问修饰符有不 ...