一只初学者,如何登顶野生动物识别挑战赛?| 附代码

简介:

最近,HackerEarth举办的一项初学者深度学习挑战赛,落幕了。

比赛内容是,识别野生动物

来自印度的本科生Abhishek Sharma登上了冠军宝座。

d8ef9e7120430428ff5389f8938d82663b3e7827

于是,他写了写自己的心得,给小伙伴们参考:

怎样的挑战

比赛数据集里有19,000张图,包含30个不同物种的野生动物。

b55f4c2072feb1a5361d677db0a3bec1ecd020f5

来自比赛数据集

动物的照片是在真实场景里拍摄的,姿势不同,背景复杂,光线、天气条件、视角、遮挡情况也不同。

比起这些容易造成混淆的因素,有些不同的物种,看上去并没有那么大的差别。

哪个类别的预测概率最高,图像就分给哪个物种。

评估指标:分类器的logloss

怎样上手

拿到任务之后,要做的第一件事就是去看,以前有没有类似的问题,前人方法能不能借鉴。

少年发现,比赛数据集和ImageNet有不少交集。

ea5480322367e97754344fcfd39ca75c33962d59

ImageNet数据集里的一些栗子

那么,怎样利用它们之间的异同来改进现有的方法?

首先,本次任务里的未知 (Unknown) ,和ImageNet是非常相似的。

所以,可以用迁移学习,拿CNN做初始化或者做固定特征提取器。

迁移学习论文:

https://arxiv.org/abs/1411.1792

一个区别在于图像尺寸,ImageNet里面的图像都是224 x 224像素,而动物识别任务里,图像要更大一些

因此,要改进算法来处理大图。

熟悉问题之后,就先搭建一个简单的pipeline:从加载数据集,到训练,到验证。可以迭代几次。

怎样防止过拟合

6ac3138f35e4e5df6aeb8f4b3305f92db643e4e6

可爱的过拟合

19,000张图像里面,有13,000张属于训练集,余下6,000张是测试集。

数据集并不是很大,为了避免过拟合,少年做了以下几种尝试:

数据扩增

就是通过旋转、翻转、裁剪等这样简单的操作,把一幅图变成几幅。

这里,用了transforms_side_on随机旋转,翻转,还调了光。

数据扩增论文:

http://cs231n.stanford.edu/reports/2017/pdfs/300.pdf

学习率

深度学习网络里,最重要的超参数就是学习率

程序猿用的是lr_find的方法,是fastai库里面提供的,用来找最优值。

这个方法是Leslie Smith提出的:刚开始训练的时候,学习率设得很低,然后给每个Batch的学习率做指数增长

Smith论文在此:

https://arxiv.org/abs/1506.01186

训练用的图像尺寸是324 x 324,因为这些图像在验证集上表现比较好。

少年也尝试了不同的批尺寸 (Batch Size),试到32的时候,GPU存储到了上限。然后,他就为学习率做了相应的微调。

学习率vs批尺寸:

https://miguel-data-sc.github.io/2017-11-05-first/

扩大图像尺寸

用小图训练几个Epoch之后,就可以换大图 (450 x 450) 再持续训练几个Epoch。

这也是防止过拟合的一种不错的方式,在少年的logloss身上,产生了明显疗效。

9c0e76423ee0ead03d5daab47b6a4dcd1237dd89

各种模型合起来

少年训练了各种模型,比如resnet50,resnext101_64,inception_4,restnet152以及restnext101。然后,把它们给出的结果用加权平均整合到一起,就获得了榜首的高分。

哪些做法没有用

一是,受到下面这个Kaggle内核的启发,程序猿做了些图像相关的统计数据 (Image Related Statistics) 。

但是,在把各种网络结合在一起的时候,这些统计就减分了。

Kaggle Kernel传送门:

https://www.kaggle.com/greenmtn/xgb-starter-lb-0-88232/code

二是,在瓶颈特征 (Bottleneck Features)上训练逻辑回归 (Logistic Regression) 。瓶颈特征,是进入全连接层之前,卷积层输出的最后结果。

这个方法,在Kaggle狗狗品种识别挑战赛里,效果很好,但在这里就不太行。

38b04f7b4c77229d2a9bfdc904303706fccdd914

印度少年说,大家一定要尝试从各种不同的角度来看问题,不要放弃。

虽然奖金没多少……

HackerEarth是一个编程技能的线上评测系统,也举办过许多编程比赛。

a8e7943c64532076438263597d6f20f9a24b6673

虽然,有些比赛奖金并不丰厚。不过,据说比赛成绩好的选手可能获得名企的推荐资格。


原文发布时间为:2018-09-4

本文作者:关注前沿科技

本文来自云栖社区合作伙伴“量子位”,了解相关信息可以关注“量子位”。

相关文章
|
18天前
|
人工智能 搜索推荐
杨笛一新作:社恐有救了,AI大模型一对一陪聊,帮i人变成e人
【4月更文挑战第24天】杨笛一团队研发的AI大模型,以“AI伙伴”和“AI导师”框架帮助社恐人群提升社交技能。通过模拟真实场景和个性化反馈,该方法降低训练门槛,增强学习者自信。但也有挑战,如保持AI模拟的真实性,防止反馈偏见,并避免过度依赖。研究强调,AI应作为辅助工具而非替代。[论文链接](https://arxiv.org/pdf/2404.04204.pdf)
18 1
|
12月前
|
人工智能 算法 机器人
AI技术让手办「整活」:3D建模居然可以这样简单
AI技术让手办「整活」:3D建模居然可以这样简单
182 0
AI技术让手办「整活」:3D建模居然可以这样简单
|
人工智能 自然语言处理 机器人
文心一言是中文版的ChatGPT?多角度分析/猜测文心一言到底是什么!
ChatGPT爆火网络,一时间风靡不断。 AI替代人类工作的传言四起 宣布ChatGPT类似产品的公司股价大涨,这到底是什么? 国产的类似产品到底到了什么程度? 让我们一起来分析(猜猜)看!
62551 4
文心一言是中文版的ChatGPT?多角度分析/猜测文心一言到底是什么!
|
机器学习/深度学习 数据采集 计算机视觉
你是谁家的小猫咪--基于深度学习框架MegEngine 的猫咪识别
你是谁家的小猫咪--基于深度学习框架MegEngine 的猫咪识别
77 0
你是谁家的小猫咪--基于深度学习框架MegEngine 的猫咪识别
|
机器学习/深度学习 C++
百度飞桨世界冠军带你从零实践强化学习第四天(三岁白话时间)
这里是三岁,这里吧第四的素材和资料整理了一下,大家康康,有什么不足的欢迎提出,批评指正!!!
94 0
百度飞桨世界冠军带你从零实践强化学习第四天(三岁白话时间)
|
机器学习/深度学习 C++
百度飞桨世界冠军带你从零实践强化学习第五天(三岁白话时间)
百度飞桨世界冠军带你从零实践强化学习第五天(三岁白话时间)
154 0
百度飞桨世界冠军带你从零实践强化学习第五天(三岁白话时间)
|
机器学习/深度学习 人工智能 自然语言处理
2019年Reddit机器学习17个高赞项目:AI德扑大师、StyleGAN等上榜
本文是Medium网友整理的2019年Reddit机器学习板块热门高赞项目资源汇总,既有Facebook、英伟达等大厂的作品,也有网友自制的有趣小尝试,共17个项目,按热度高低排序,一起看看吧!
266 0
2019年Reddit机器学习17个高赞项目:AI德扑大师、StyleGAN等上榜
|
机器学习/深度学习 人工智能 自然语言处理
科普贴:从人工智障到人工智能
人工智能(Artificial Intelligence),英文缩写为AI,是计算机科学的一个分支,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。而人工智能又分弱人工智能,强人工智能和超人工智能三个等级。
285 0
科普贴:从人工智障到人工智能
|
机器学习/深度学习 算法 数据库
收录180篇文献,上海交大推出深度学习图像合成领域首篇综述
作者:牛力 收录 180 篇文献的首个深度学习图像合成技术综述文章。
278 0
收录180篇文献,上海交大推出深度学习图像合成领域首篇综述
|
自然语言处理 区块链 开发工具
NLP速读人民日报
由于我工作中用NLP功能比较多,因此我试用的方向是通过NLP来梳理报纸中的内容,我首先分析了一下权威报刊的链接构成,
NLP速读人民日报