作者:dmcm0006 | 来源:互联网 | 2023-05-19 17:49
基于Overfeat的物体检测原文地址:http:blog.csdn.nethjimcearticledetails50187881作者:hjimce一、相关理论本篇博文主要讲解经
基于Overfeat的物体检测
原文地址:http://blog.csdn.net/hjimce/article/details/50187881
作者:hjimce
一、相关理论
本篇博文主要讲解经典物体检测算法:《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》,至今为止这篇paper,已然被引用了几百次,可见算法牛逼之处非同一般啊。说实话,当年刚入门深度学习的时候,看这篇文章感觉很难,Overfeat、DCNN、FCN,这三个算法,每个算法都看了将近一周的时间,才打通了任督二脉。开始前,先解释一下文献的OverFeat是什么意思,只有知道了这个单词,我们才能知道这篇文献想要干嘛,OverFeat说的简单一点就是特征提取算子,就相当于SIFT,HOG等这些算子一样。Along with this paper, we release a feature extractor named “OverFeat”,这是文献对overfeat定义的原话。这篇文献最牛逼的地方,在于充分利用了卷积神经网络的特征提取功能,它把分类过程中,提取到的特征,同时又用于检测等各种任务,牛逼哄哄啊。只需要改变网络的最后几层,就可以实现不同的任务,而不需要从头开始训练整个网络的参数。
未完待续,敬请期待……
训练部分
对于每张原图片为256*256,然后进行随机裁剪为221*221的大小作为输入训练数据,训练的min-batchs选择128,权重初始化选择,高斯分布的随机初始化:
然后采用随机梯度下降法,进行优化更新,动量项参数大小选择0.6,L2权重衰减系数大小选择10-5次方。学习率一开始选择0.05,然后根据迭代次数的增加,每隔几十次的迭代后,就把学习率的大小减小一半。
然后就是DropOut,这个只有在最后的两个全连接层,才采用dropout,dropout比率选择0.5,也就是网络的第6、7层。下面就是整个网络的相关参数。
由以上的网络结构可以知道,在训练过程中,输出特征图的大小为1*1,总共有1000个特征图(1000个分类)。在网络的第1-5层,基本上和AlexNet是一样的,也是使用了ReLU激活,最大池化。不同之处在于:
1、作者没有使用局部响应归一化层,
2、然后也没有采用重叠池化的方法
3、在第一层卷积层,stride作者是选择了2,这个与AlexNet不同,AlexNet选择的跨步是4。在网络中,如果stride选择比较打得话,虽然可以减少网络层数,提高速度,但是却会降低精度。
3.3多尺度图片分类
这一步需要声明一下,网络结构在训练完后,参数的个数、结构是固定的,而这一步的算法并没有改变网络的结构,只是用于预测一张图片时,通过裁剪的方法裁剪成几张图片,然后对这几张图片分别进行预测,最后对这几张图片结果进行平均统计。
我们知道在Alex的文献中,他们预测的方法是,输入一张图片256*256,然后进行multi-view裁剪,也就是从图片的四个角进行裁剪,还有就是一图片的中心进行裁剪,这样可以裁剪到5张224*224的图片。然后把原图片水平翻转一下,再用同样的方式进行裁剪,又可以裁剪到5张图片。把这10张图片作为输入,分别进行预测分类,在后在softmax的最后一层,求取个各类的总概率,求取平均值。
于是,对于预测,作者就提出了多尺度的方法,不过感觉跟AlexNet还是挺像的,如上图所示,paper提出的是把图片裁剪成6张大小不同的图片,然后对每张图片分别进行预测,经过网络,得到分类向量。当然输入6张大小不一的图片,只是其中的一小步,对于我们来说,没啥疑问,但是真正有疑问的是,每一种输入的图片因为大小不同,最后在卷积层与全连接层
在这里我们以输入一张图片为例(6张图片每一种的计算方法都相同),其:
上面这个表格中,
从layer-5 pre-pool到layer-5 post-pool:这一步的实现是通过池化大小为(3,3)进行池化,然后△x=0、1、2,△y=0、1、2,这样我们可以得到对于每一张特征图,我们都可以得到9幅池化结果。以上面表格中的sacle1为例,layer-5 pre-pool大小是17*17,经过池化后,大小就是5*5,然后有3*3张结果图(不同offset得到的结果)。
从layer-5 post-pool到全连接层:我们知道,我们在训练的时候,从卷积层到全连接层,输入的大小是4096*(5*5),然后进行全连接,得到4096*(1*1)。这个过程其实也是卷积,我们可以把全连接层,看成是对整张输入特征图的大小作为卷积核大小,进行卷积,这个在《Fully Convolutional Networks for Semantic Segmentation》paper又把它称之为Fully Convolutional Networks,说的简单一点就是把全连接,看成是对整个图片卷积,记住是“看成”,并没有改变网络的任何结构,因为我们在写深度学习的代码的时候,卷积层到全连接层就用到了flatten函数,当然如果你不使用flatten函数,你可以直接继续调用卷积函数,以整幅图片的大小为卷积核,进行卷积。
回归正题,回到我们这篇paper,我们知道在训练过程中,我们从layer-5 post-pool到第六层的时候,如果把全连接看成是卷积,那么其实这个时候卷积核的大小为5*5,因为训练的时候,layer-5 post-pool得到的结果是5*5。因此在预测分类的时候,假设layer-5 post-pool 得到的是7*9(上面表格中的scale 3),经过5*5的卷积核进行卷积后,那么它将得到(7-5+1)*(9-5+1)=3*5的输出。