找回密码
 立即注册
搜索

迁移学习的入门材料都在这里了!搞图像辨认的相对不能错过!

此为暂时链接,仅用于文章预览,将在短期内失效关闭

“来,跟我一同入坑迁移学习”

2017-11-19 专注报道AI 量子位

原作 Slav Ivanov

Root 编译自 Slav寄几的博客

量子位 出品 | 公众号 QbitAI

Slav Ivanov是Post Planer(提高社交媒体影响力的App)的CTO,这个当过黑客后又从良当企业家的大叔,结合本人的创业阅历,把他以为比较好的迁移学习的材料分享给大家。以下是他的原文。

如今很多深度学习的运用都依赖于迁移学习,特别是在计算机视觉范畴,这篇文章次要给大家引见一下什么是迁移学成,怎样完成迁移学习,以及能够存在的缺陷。

我最末尾接触迁移学习,是由于创业要用到。

不如开个公司吧?

有一天,一个冤家和我们聊了个脑洞大开的想法。他希望能做出下一个爆款社交媒体,宠物版的脸书。人们可以在展现他们主子的照片,以及看其别人的喵喵和旺财。我们都第一反应都觉得,这个主意还不错诶。


我们以为:谁会不想翻一整天萌宠的照片?

我们很快筹到了资金,然后末尾做潜在用户调查。在问了几个特别喜欢宠物的人之后,我们看法到个成绩:喜欢猫的人并不怎样喜欢看狗的照片。养鹦鹉的人也不喜欢看猫的照片,养金鱼的人只喜欢看其别人养的金鱼。

由于如今曾经2017年了,我们不再需求花费大力气挨个问人们喜欢看什么宠物的照片,我们直接借用机器学习的办法,去自动辨认人们看的照片里是什么宠物。然后根据他们所看照片的宠物来分类

卷积神经网络(CNN,Convolutional Neural Networks)

我们把我们的计划分享给了个刚拿到机器学习PhD的哥们,他建议我们用CNN来处理这个成绩。

由于最后有个很牛逼的团队,由Alex Krizhevsky领头,仰仗CNN博得了那一年的ImageNet应战赛(大体上相当于计算机视觉的年度奥林匹克),他把分类误差记录从 26% 降到了 15%。CNN的表现当时震惊了世界。

从那当前,CNN就成为了计算机视觉里的主流算法。也异样运用于其他深度学习范畴。

假如大家对深度学习的概况想要有更多的了解,我墙裂建议大家去看fast.ai上的Practical Deep Learning for coders的第一部分和第二部分(本文提到的一切学习材料链接都放在最后咯,一会看完自取哈)。这些材料都是开放的。

对于卷积神经网络来说,我们需求分类的图像数据是输入。然后可学习后不断调整权重的参数,根据分类的不同我们会称之为过滤器或通道。这些过滤器层层堆在一同,在网络的最后一层,是输入,告诉我们这张图里是猫,或狗,或鸟之类的。

CNN的入门



所以我们就用fast.ai上的材料,然后本人搭建CNN。我们知道深度学习需求大量的数据,所以我们就下载了ImageNet数据库,外面有上百万张图,当然也包括猫狗、金鱼。

我们末尾用这些数据来训练我们的模型,并用随机梯度下降算法(Stochastic Gradient Descent algorithm)来优化。过了不久,我们的CNN就可以区分猫狗和鹦鹉啦。我们还给这个模型起了个名字,宠物辨认Pet-cognizer®。

其实,曾经有很多长辈用ImageNet做了大量的工作,训练出很多CNN模型。这些经过预训练的神经网络都是开放的。有兴味的话可以去看Pretrained Models on Keras and TorchVision for PyTorch。

CNN模型里第一层过滤器曾经可以分辨出边界、渐变和纯色区域。第二层过滤器可以结合从第一层得到的数据去判别哪些是条纹,哪些是直角,哪些是圆。


第三层曾经可以辨别人、鸟、汽车轮子之类的了。


最后,神经网络的输入层显示最后的分类结果。

就这样,我们的Pet-cognizer®搞定啦!

新的义务

当我们试运转我们的项目是,有人建议说假如我们能按狗狗的种类来分类就更好了。所以,我们再继续捣腾模型。我们把这种可以辨认狗狗种类的模型叫做Breed-cognizer®。但成绩在于,我们不能找到足够多的上百张狗狗的图片来训练我们的新模型。我们的数据集有120个数据源,每个有100张图。我们只能先尝试这用这个很小的数据来训练我们的CNN,可是结果很差。


从零末尾训练,一切结果都不对

Reddit上有一个板块专门是迁移学习,讨论怎样把之前建模的知识迁移到另一个义务里。

迁移学习,字面上看就是我们要做的事。所以我们决议重新思索在曾经训练好的Pet-cognizer®上,看看怎样改改再用。

场景1:新的数据集和最后的数据集是相似的。

我们的Breed-cognizer®所需的数据集,包含了真实世界里的图片(而不是文档的图片或者医学类的扫描),这一点和我们第一次训练用的ImageNet很像。所以是可以再用之前CNN的过滤器的。我们不用再学一次了。

对于Breed-cognizer®来说,我们仅仅把网络最后一层换了。由于我们如今要知道的,不再是这张图片是什么小动物,而是狗狗是什么种类。

由于最后一层权重是最后训练的时分随机设的,所以要训练最后一层并且调参的话,能够会改变下面几层的过滤器,所以我们就把除最后一层以外的一切层的权重都固定住,只优化最后一层。


只训练最后一层的结果

精准微调

但是我们从训练的状况了解到,最后一层目前的参数不合适当前的义务。

比如说,模型里一定有一些权重是倾向于更高效区分出猫和金鱼的。但是这个权重对推送狗狗照片没什么用。为了进一步优化我们的网络,我们还解锁倒数后几层,再重新微调。

那要解锁几层呢?这要看状况,我们一层一层试过去,直到发现再无法优化结果为止。

但由于这些被解锁层都对最后结果有影响,所以我们只能慢一点点地训练,希望尽能够做到保留有用的权重,而把有关的去掉。

训练的进度会影响到我们每一次梯度下降迭代的调参程度。这样精准地微调之后,推送辨认器的准确率可以达到90%(在无法添加数据样本的状况下)。


场景2:新的数据集不再和最后的数据集一样

我们视觉辨认模型的效果很好,越来越多的人听说到我们的模型表现后,末尾联络我们,开出各种项目需求。其中一个还是卫星图像辨认,另外一个是医学初创企业。


###### 卫星图像

这两个项目需求的数据集都和我们曾经训练宠物辨认器不一样。特别是医学上的CT影像。


肺部的CT扫描

这种状况,还是用预训练过的权重更好,但是需求解锁一切网络层。然后我们在用新数据集,以正常的学习率训练。另外,斯坦福CS231n李飞飞主讲的王牌课程也阐述了这个成绩。

迁移学系几乎是一切视觉辨认研讨的主场。除非你有个庞大的数据集,否则很少会一下去从0末尾训练。这篇入门文章所提到的学习资源能够会给你建立一定的感觉,迁移学习大概是怎样一回事,以及它的工作原理。

原文链接:https://blog.slavv.com/a-gentle-intro-to-transfer-learning-2c0b674375a0

最后给大家个List~~汇总下后面提到的学习资源(๑•̀ㅂ•́)و✧

a.深度学习概况:fast.ai

b.随机梯度下降算法概述:http://ruder.io/optimizing-gradient-descent/

c.更多预训练的神经网络

Pretrained Models on Keras:https://keras.io/applications/

TorchVision for PyTorch:http://pytorch.org/docs/master/torchvision/models.html

d.供参考的训练Breed-cognizer®的数据集:https://www.kaggle.com/c/dog-breed-identification/data

e.斯坦福CS231n李飞飞主讲的王牌课程

生肉:http://cs231n.github.io/transfer-learning/

熟肉:http://study.163.com/course/introduction/1003223001.htm

— 完 —

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。等待有才气、有热情的同窗加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评3

beatboxTsky 2020-8-27 20:10:38 显示全部楼层
OMG!介是啥东东!!!
回复

使用道具 举报

gashel 2020-8-28 14:45:54 来自手机 显示全部楼层
话不多说,【抱拳了,老铁】。
回复

使用道具 举报

@Xizi_sMgMuZjS 2020-8-29 13:33:26 显示全部楼层
支持支持再支持
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies