1,一开始,利用神经网络以滑动窗口的形式对图片进行目标检测,如overfeat。其原理即是用不同大小的窗口在图片上滑动,每个窗口对应一个待检测类别元素的正确率。
2,接下来的方法是rcnn方法,此方法先利用传统的图像分割技术对图像进行轮廓分割,再对每个分割出的部分用神经网络进行计算其正确率,此方法大部分论文对其的指责就是其运行速度太慢。
bound box regression:rcnn中的此方法被接下来的很多论文拿来借鉴,此方法即是:
比如目前有一个图片,图片中有一个目标和把目标框柱的矩形,此矩形称为bounding box,有可能rcnn用的region proposed方法给出的矩形大小和位置不是最优的框柱目标的矩形,因此我们需要调整这个矩形以便更好的框柱目标,那么rcnn就是利用cnn输出的feature-map作为输入,当然还有矩形的原位置,计算出偏移量,调整矩形。
3,YOLO方法:
假如说你都可以直接预测盒子的位置的偏移量了,那么为什么我不可以首先假定图片里有一个矩形,然后我计算这个矩形内有目标的可能性、还有这个盒子往哪里偏移会得到更好的位置。
比如说一个100x100的图片,现在我关注的就是以30x30为中心,边长为10的正方形里面是否有一个目标,我如何修改这个正方形可以更好的框住目标?那么因此我就训练一个深度学习网络,这个网络可以判断正方形里有各个种类目标的概率,计算是否有目标存在的概率,计算假定有目标存在那么如何偏移修改这个正方形可以得到最优的矩形框住目标的矩形。
那么假设我已经训练得到这个网络,那么以后给我一张图片我就可以判断以30x30为中心,边长为10的正方形那里有没有目标了。
而对上面进一步改进,我现在不仅要判断那一个正方形,我要一次性判断许多许多个正方形,而YOLO就是这样,他预先将一个图片分成7、7、49个矩形,然后分别计算这49个矩形里是否框住目标的可能性、框住的目标是什么种类的目标、如何调整正方形才能更好的框住目标?
4,Faster rcnn
我认为faster rcnn和yolo本质原理其实是差不多的,主要说一些细节上的差别:
(1)有漏是将特征图的所有作为输入,而超快网是仅仅在特征图的3X3大小作为一个计算box的输入。
(2)有漏每个预测的cell预测两个默认是和cell一样的框,而超快网则是每一个3X3大小的cell预测3个不同大小、3个不同宽高比的一共是9个框。
(3)超快网9个框对应9个全连接网络与卷积核,并且这9个全连接网络对应每个cell是相同的
超快网的一些细节:
(1)盒子之间会有cross-boundary(交界),一个1000X600的图片一般会产生60x40x9=20000个box,而去掉有交界的以后就变成大约6000个来训练
(2)每次训练只用一张图片,从一张图片中选取出一半的正例anchor,和一半的反例,比如126个正例和反例,若正例不够用反例来补
5,yolov2
关于有漏1的改进有以下:
(1)为了增加recall率:recall率就是要提供多一些的用来预测的box,因此借鉴快速网。有漏1的最后输出是特征图层连一个全连接层,最后输出7X7X(class数量+2X5)。而改进后那就是用快速网的rpn结构来连特征图。
(2)同样的有漏1只会对每个cell进行分辨类别是啥,而改进后就是对每个box都要计算每个box是哪个类别。
(3)与快速网每个cell预测9个不同大小形状的盒子不同,论文中进行改进就是求解出到底预测几个盒子,盒子的形状的比例最好是什么样子的,最后论文采用5个盒子,偏向于高瘦的矩形。
(4)有漏1计算box位置是:首先假如图像是448x448,最后变成7x7个cell,那么每个cell的大小就是64x64,因此盒子的中心坐标偏移就是cell的中心加上一个0-1之间的数乘以64。反正yolo2采用的是这种计算方法,虽然论文里说这种方法和快速网不同,但是我认为两者都一样。
(5)yolo2采用的是darknet,基本结构就是最新的1X1网络增维降维的那种,具体见原论文
(6)采用多尺度训练,因为快速网都是卷积的操作,所以多大的图片都可以,因此在训练时对训练图片可以改变大小也没事。
(7)Fine-Grained Features:没看懂,抄别人的
YOLOv2的输入图片大小为 416*416 ,经过5次maxpooling之后得到 13*13 大小的特征图,并以此特征图采用卷积做预测。 13*13 大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features)。因此SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体。YOLOv2提出了一种passthrough层来利用更精细的特征图。
YOLOv2所利用的Fine-Grained Features是 26*26 大小的特征图(最后一个maxpooling层的输入),对于Darknet-19模型来说就是大小为 26*26*512 的特征图。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个 2*2 的局部区域,然后将其转化为channel维度,对于 26*26*512 的特征图,经passthrough层处理之后就变成了 13*13*2048 的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的 13*13*1024 特征图连接在一起形成 13*13*3072 大小的特征图,然后在此特征图基础上卷积做预测。在YOLO的C源码中,passthrough层称为reorg layer。