博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从imagenet的分类任务迁移说起——深度学习任务迁移详解
阅读量:2812 次
发布时间:2019-05-13

本文共 4017 字,大约阅读时间需要 13 分钟。

文章目录

1.简介

想要一个深度学习模型的效果出众,很重要的两个点是数据和结构。结构上的优化,可以通过研究backbone和neck的特点进行调整,门槛较低,但是从数据的角度去增强模型,其门槛和成本就高很多了。为了获得一个泛化能力强、精度高的模型,往往需要大量的标注数据,但是短时间内又无法获取,该怎么办呢?这个时候,就要使用迁移学习的思路

迁移学习的其中一种普遍的用法,是用一个预训练好的图像分类模型,转化成目标检测模型、或者关键点回归模型,这么做的原因在于图像分类模型可以用图像分类的数据集来训练,我们比较容易获得大量的图像分类数据集,比如我们熟悉的imagenet,而目标检测数据集的图片数量则少很多,关键点回归数据集的样本数量更少,如果不通过迁移学习,直接用这些少量的图片进行训练,效果就没法达到想要的精度,还有可能造成过拟合的现象。因此,用imagenet预训练的模型来进行迁移学习,对模型的泛华能力和精度的提升都有重要意义。

下面我将分三个部分依次介绍这三类任务的具体内容,以及它们之间该如何进行迁移学习。

2.图像分类模型

本节讨论的是用深度学习网络来做图像分类任务,先从一个典型的网络vggnet开始讲解。下图是vggnet的网络结构图。

VGGNET
可以看到,图像在网络中一共经过了5次降采样,特征图分辨率也由224x224降到了7x7,而随着特征图分辨率的降低,通道数是翻倍增长的,这么做的目的是尽可能的提取和保留图像的语义信息,也就是逐渐将图像的纹理特征组合成类别特征。提取后的特征经过全连接层,最终输出为1x1000,代表了该图可能属于imagenet的1000个类别的概率,最后经过softmax函数修正后输出。全连接层之间一般是线性函数连接,两个FC-4096的意义在于更加充分地整合图像的特征,增强网络的表达能力。

了解了vggnet的网络结构之后,思考一个问题:这样的结构,其可迁移的部分有哪些呢?或者说,我们该如何修改它,使其能够转为关键点回归任务和目标检测任务所需的结构呢?

首先,三类任务的模型输入都是一致的,224x224分辨率的RGB三通道图像,当然,有些模型改变了图像的分辨率,或者对图像进行预处理,改变了图像的通道数,这些都是值得去研究的tricks,本篇暂时不讨论这方面的idea,所以先规定三类任务的输入一致。

对比
然后,我们来分析一下这三类任务模型的输出的不同之处:

  • 图像分类,以imagenet分类为例,模型输出的是1000个概率值,代表当前图片属于1000类中每一类的概率,概率不包含位置信息,只与全局特征描述有关
  • 关键点回归,以人脸68点关键点为例,输出的是68个点的xy坐标,也就是2x68个输出值,与位置信息相关
  • 目标检测的输出,以yolov3模型为例,输出的是目标的bbox左上角和右下角的xy坐标,以及当前bbox中的目标属于所有类别目标的各自的概率值,如果是coco数据集则有80类,此外,yolov3还会输出一个置信度,表示当前bbox是目标的概率,一共是1+2x2+80个输出,既与位置信息相关,又与全局特征描述相关

从上面的分析可以看出,图像分类的输出是对位置信息无关的,而关键点回归和目标检测的输出都与位置相关,有较大差异。在将图像分类模型迁移到另外两类任务时,需要尽可能地保留位置信息。下面我将分别针对关键点回归和目标检测任务进行分析。

3.模型迁移到关键点回归

关键点回归任务本质上是获取一系列相关的特征点,它是对一种特定的目标或者特定区域的空间物理关系的描述。比如以人脸68点关键点回归为例,68点的输出中,包含了眼睛、鼻翼、鼻梁、眉毛、嘴唇以及脸部轮廓等部分,而这些部分有着很强的空间相关性,鼻梁和鼻翼一定是上下相连的,两个眼睛大概率是以鼻梁为轴对称的,眉毛是在眼睛上方的,这些空间关系对于人们来说都是非常容易理解的,但是对于深度学习模型来说,可就不一定了。

事实上,CNN网络对这种人类的先验知识并不了解,它只知道根据我们给它的标签去训练出一个函数,来拟合输入输出的对应规则,至于这输出代表了什么,它一点也不知道。所以我们在设计CNN网络的时候,必须用人类的先验知识来给它设计规则,让它在规则的限制下去学习,才能更快更好地达到我们想要的目标。

那么,在人脸关键点回归任务中,我们就可以用这种空间关系规则去指导CNN网络的训练。一种比较常见的作法是特征融合,将高层的特征描述与低层的相融合,能够使其在保持局部精度的情况下,学习到高层的语义信息。这里来解释一下为什么高层的语义信息比低层的丰富。

我们知道卷积神经网络的特点是逐级提炼特征描述,浅层的特征图提取纹理特征,高层的特征图将纹理特征组合成目标的语义特征,例如在VGGNET的结构中,56x56的特征图能够提炼出一定的人脸局部,例如眼睛、眉毛等,而7x7的特征图能够提炼出人脸整体的信息,一张人脸必须要具备眼睛鼻子嘴巴等部件,它才符合一个人脸的要求,此时它输出的人脸类别概率才会较高,也就是说7x7的特征图包含了各个部件之间的空间约束关系,而这对于我们的关键点回归任务非常重要。

根据以上几点分析,回到我们的话题:该如何将图像分类模型迁移到人脸关键点模型呢?这里我给出三种做法:

  • 直接将最后一层全连接层的1x1000改为1x136,这是最直观也是最容易理解的做法,直接回归68点的坐标。
  • 将7x7x512、14x14x512、28x28x512三个特征图进行通道压缩,再进行全连接,最后输出1x136。这么做的好处是能够融合更多的浅层信息,理论上能够将人脸的局部关键点回归得更精确。
  • 将7x7x512的特征图做2x的上采样,然后与14x14x512的特征图相加,再做2x的上采样,与28x28x512的特征图相加,再将融合后的特征图做通道压缩,再进行全连接,这么做理论上也是融合了前后层的特征描述,能够使点回归的更加精确。
    关键点网络结构

上面这张结构图对应上述三种做法,在实际运用中都可以有一定的效果,后两种方法会比第一种稍好一点,原因前面已经分析过了,当然,后两种方法的参数量要大于第一种,速度上会稍慢一点,但影响不大。

在进行迁移学习的时候,我们只加载Imagenet预训练的模型的一部分,也就是从第一层到最后一个maxpool层,后面的两个FC我们需要初始化参数后重新训练,训练的时候可以选择frozen前面几层的参数,也可以选择训练所有层,如果你的数据集非常小的话我建议还是frozen到最后一个maxpool层,只训练FC层就行,这样可以最大化利用预训练模型的效果。

4.模型迁移到目标检测

目标检测的任务,可以比较笼统地分为两种:one-stage和two-stage,one-stage是指在提出完特征图后,直接回归出目标的类别和bbox;two-stage是指在第一个网络(RPN网络)中提取完特征图后,回归出一系列的bbox,将这些bbox取roi然后送入第二个网络(RCNN网络)进行分类。换句话说,two-stage的第一个步骤实际上跟one-stage是相似的,只不过RPN网络只做二分类,只输出该bbox是否为目标的概率,而one-stage网络是对整个数据集的所有类别都输出一个概率。大致上来说,two-stage的速度会比one-stage要慢,但是精度会好一些,毕竟是有两次分类网络,质量会比较高。在作迁移学习的时候,得把这两种模式分开来讨论。

对于one-stage的目标检测网络,这里以coco的80类数据集为例。要想从分类模型迁移过来,首先要砍掉FC-4096这两层和FC-1000这层,然后在最后一个maxpooling层后面接上一个1x1的卷积层,将通道数由512变为255。为什么是255呢,因为(80+1+4)x3等于255,80的意思是80类,1代表是否为目标的概率,4代表bbox的坐标,x3代表有三种尺度的anchor,这个anchor的尺度需要预先设置好,可以参考yolov3的设置。经过了这个1x1的卷积后,假如原先的输入图像是224x224,那到这一步输出的特征图就变成了7x7x255,也就是说对于7x7特征图上的每一个点,都有3个anchor,每个anchor都有80类概率和1类是否为目标的概率以及bbox的坐标。在训练的时候,frozen到最后一个maxpool层之前,只训练最后这个1x1的卷积层即可。当然这样的效果可能不太好,因为一个1x1的卷积层参数量太低,可能不太能够拟合数据集,所以可以frozen到倒数第二个maxpool之前,这样可以多一些参数加入进来训练。

实际上,目前绝大多数的目标检测网络的做法都加上了fpn的分支,也就是在原来的网络基础上,将7x7x512的特征图上采样2x后,与14x14x512的特征图相加,再做1x1的卷积,得到14x14x255,再将14x14x512的特征图上采样2x后,与28x28x512的特征图相加,做1x1的卷积后输出,这样总体算起来有7x7x255,14x14x255,28x28x255等三个尺寸的特征图输出,这样anchor的数量就多得多了,对不同大小的目标都有一定的检测效果。

目标检测

对于two-stage的目标检测网络,实际上我们能够迁移学习的部分只有RPN网络,对于RCNN网络,我们是需要重新训练的,因为分类模型中的参数对于RCNN网络不适用。前面已经提到,RPN网络只输出bbox的坐标和是否为目标的概率,所以只需要输出(4+1)x3个通道,3表示特征图上单点的anchor数量,fpn的部分与one-stage类似,也是输出3个尺度的特征图。

5.总结

本文通过对迁移学习的讲解,深入分析了图像分类、关键点回归、目标检测这三类任务的异同,给出了迁移学习的方法,如有疏漏之处,欢迎大家来交流。

转载地址:http://qjqqd.baihongyu.com/

你可能感兴趣的文章
opencv图片操作
查看>>
tensorflow入门
查看>>
神经网络股票收盘价
查看>>
聚类算法(K-means)
查看>>
聚类算法(谱聚类)
查看>>
聚类算法(BIRCH)
查看>>
聚类算法(DBSCAN)
查看>>
聚类算法(算法小结与案例分析)
查看>>
受限波尔茨曼机(RBM)
查看>>
概率图模型(总结篇)
查看>>
指数族分布
查看>>
从机器学习到深度学习(ML—DL)
查看>>
多层感知机(MLP)
查看>>
[firefox+plug-n-hack]轻松地配置burpsuite代理https流量 - 20160318
查看>>
知道创宇的一个rtcp分析,加上外面找到的一个tcp udp端口转发的
查看>>
SaiProbe V1.0 内网渗透辅助脚本 20160605 php脚本
查看>>
腾讯某论坛存在SSRF漏洞(附批量捡漏脚本) ------ 20160614
查看>>
陌陌web服务器Path处理不当可以正向代理(idc机器/打不到办公网) 找到相关案例20160614
查看>>
入门———— Linux后门技术及实践 20160616
查看>>
Penetration Testing Tools Cheat Sheet 20160630
查看>>