深度学习中的分类与回归任务
分类:输入一张猫的图片,最终要输出这张图片就是猫的概率;
定位:输入猫的图片,输出一个box,框出猫,得到这个box矩形的初始位置,用x,y表示,再得到矩形的宽和高;
分类+定位:不光要定位出猫的位置,还要确定这张图片就是猫。
首先,输入一张图片,经过一个CNN,提取出一个高维的特征,最后面一层不再接softmax进行分类,而是预测出4个坐标值,由[x,y,w,h]组成,那么如何来计算这四个值呢?
对于每一张图片,我们有一个grounding truth,grounding truth就是给定的框的实际数据,我们要做的就是使神经网络预测出来的框不断地拟合给定的输入,即不断接近真正的框。我们用L2欧式距离计算差异值,预测出来的框和grounding truth越接近,loss值越小,利用SGD对CNN的参数不断调节,让loss达到收敛的预期效果。这一过程就可以称之为回归过程。
当对输入图像提取出高维特征之后,我们得到的特征图需要处理成两部分,第一部分进行分类任务,通过全连接层的softmax对每个可能的类进行概率预测;第二部分进行回归任务,得到矩形的坐标。
步骤
1、选择模型。一般先下载一个经典的网络结构,以此为基准,进行微调fine tuning,比如我们也要做一个目标识别的问题,我们就可以把别人训练好的模型下载下来,让参数初始化为(常见的参数初始化是用到的高斯参数初始化,使得参数保持在一个小的范围内)别人训练好的模型中的参数,仅对适合我们模型的部分进行微调。
2、根据实际任务对模型进行调整。比如在这个任务中,我们就需要对最后一个全连接层进行fine tune ,使得输出分类概率以及box的坐标。
3、训练模型。在此任务中,我们用SGD和L2损失函数。
4、测试数据。测试的时候同时开始进行分类和定位的任务。
通过上面的4个步骤,就可以完成我们的任务了。
那么我们把回归部分加在哪里呢?
有些模型把回归模块加到了最后一层卷积层之后,比如:Overfeat、VGG;
有些加到了最后一层全连接层之后,比如,DeepPose、R-CNN.
在实际应用中,我们可以在两个位置训练模型,对比准确度确定。
回归任务还可以有哪些应用呢?
在人的姿态识别任务中,我们利用回归可以确定人体关节的关键点,比如:胳膊肘、肩膀,确定关键点的坐标值。当然,还要人脸识别,确定人脸的关键点。
在分类任务的时候,最经典的做法就是滑动窗口。在sliding window的过程中,需要对原始图像进行scale变换,用图像金字塔技术,把图像缩放到不同的尺寸,框的尺寸是不变的,然后用这些框在变换后的图像上进行滑动,然后输出找到目标的概率,然后保留下概率最大的框。
经典模型在ImageNet比赛上结果
VGG的效果比前两个网络的效果都要好,且在很多应用场景下都能取得很好的效果,因此最常用的模型就是VGG。
ResNet是深度残差网络。由于传统的网络不能是的深度太大,因为深度越大,并不一定能够保持训练的效果越好,反而可能使得train_error上升。但是,ResNet却能够保证网络越堆越深的同时,train_error不会上升,也有可能下降。