概述
最近几年深度学习的快速发展对目标检测(Object Detection)领域也产生了巨大的影响,各种SOTA(State of Art)的模型也层出不穷,包括但不限于Faster-RCNN,YOLO,SSD,FCOS等等,很多时候我们看论文和模型容易陷入其复杂的细节之中,而得不到全局的视野,尤其是像Yolo系列各种堆版本也是看的眼花缭乱。事物的发展也许就是这样的吧,刚开始都是各种复杂,越到后面越能看到基本原理,也越能理解事物本身。这篇文章也是多年目标检测的经验后的总结,试图阐述目标检测模型复杂外表下的内核,如有错误请不吝赐教。
卷积网络的感受野(Receptive Field)
我们知道卷积神经网络(CNN,卷积网络)的感知是局部(Locality)的或者说是位置相关的,这个也是论文中经常提及的一个概念叫归纳偏置(Inductive Bias),卷积网络有这样位置相关的归纳偏执。如上图 Layer_2N 中的蓝绿色格点,只能感知到 Layer_N 红色线框中的图像信息,Layer_3N 则能感知到全图的信息。所以如果 CNN的特征图(Feature Map)遵循金字塔结构,即下一层的特征图大小大于上一层的特征图,且无残差结构,那么在CNN中不同的层的不同特征格点(Feature Map’s Grid)感知到的信息是有差异的且位置相关,而且越上层的特征格点感受野越大。
我们假设去除Layer_3N,而Layer_2N只输出目标分类的概率,那么很显然,Layer_2N的所有格点及从其感受野到该格点的路径构成的子网络是一个分类网络,所以如果我们去拆分网络,那么卷积网络其实是由许许多多的子网络构成的,这个也是卷积网络的分形特征。将Layer_2N和3N只作为特征层,加一个小网络在两者任意格点去作分类也是同理。
分类问题是机器学习中的基本问题,而网络拆分某种程度上说明了,卷积网络的任意子网络的作用都可能是一个简单的分类器,只是我们不太明白中间到底是在分类什么。另一个层面说,所谓的感受野本质是由该格点连通到其关联输入格点的单层或多层网络组成的一个子网络。
目标检测与锚定框(Anchor)
目标检测是分类问题的一个推广,尤其是在基于CNN的目标检测上更加明显。比如在上图中我们先将最高层Layer_3N 去除,让每个格点输出物体的类别及其概率,简单的取格点对应的图像中心区域作为边界框(Bounding Boxes, bbox,本文使用[x,y,w,h]格式),通过简单的bbox IoU(Intersection Over Union,交并比) 分配策略就能训练出一个目标检测模型。理想情况下,蓝绿色格点预测的Dog概率最大,bbox为[0,2,3,3],红色格点预测的Bike概率最大,其bbox为[1,1,3,3]。理论上通过良好的模型结构设计及更密集的格点去预测,对bbox 的预测并不是必需的,可以通过特征格点的位置直接映射到图像位置。
如上图,在YOLOv1中的算法其实和上面说的差不多,最后的输出为 S × S S\times S S×S 的预测格点,只是多了bbox的预测,bbox的预测中(x,y)是关于当前格点感知图像范围的,而(w,h)是关于整张图像的,整体来说YOLOv1的算法是比较简单的,其设计基本遵循了CNN的感知原理。缺陷也很明显,小物体检测比较差,且对重叠比较大的物体容易漏检,对(w,h)的预测未遵循CNN的局部感知特性。
锚定框 Anchor
Anchor在目标检测中最早是Faster-RNN引入的概念,Anchor即是在每个滑动窗口上预设不同大小和比例的框,Faster-RNN的Anchor和YOLOv2后的系列不同,是通过区域提议网络(Region Proposal Network,RPN)来实现的,类比在YOLOv1上就是 S × S S\times S S×S的每一个格点,预设了不同大小(scales, s s s)和比例(aspect ratios, r r r)的框,其输出就变为了 S × S × N × ( 5 + C ) S\times S\times N\times(5+C) S×S×N×(5+C),这里 N N N为Anchor数量
Anchor宽高的计算( a a a为格点对应图像感受野面积):
h = s × a × r h = s\times\sqrt{a\times r} h=s×a×r
w = h ÷ r w =h\div r w=h÷r
举例,在图1中的蓝绿色格点我们设置2个Anchor,分别为:
s = 1 , r = 1 s=1,r=1 s=1,r=1在 Layer_N 上就是 3 × 3 3\times3 3×3 的框,红框;
s = 1 , r = 3 s=1,r=3 s=1,r=3在 Layer_N 上就是 1 × 3 1\times3 1×3 的框,绿框;
很显然,绿框比红框更能表示Dog的bbox,绿框和真实bbox的IoU更接近 1 1 1,当然也就能够更精确的检测目标,换句话说Anchor就是预设了模型必须预测在这个设定区域的目标概率与bbox,也即我们常说的注意力机制(Attention)。那么Anchor是必须的吗?和先前说的同理,理论上通过良好的模型结构设计及更密集的格点来实现,Anchor其实也不是必需的。比如,我们可以设计使用 1 × 3 1\times3 1×3 的卷积核来得到预测格点,即 Layer_2NX 所示,绿色格点也能很好的表示目标区域。
无Anchor的模型
YOLOv1也是无Anchor模型,在FCOS及之后的模型基本有证明了无Anchor模型也能达到及超过有Anchor模型,同以上的论述,这个在原理上是没什么问题的,当然FCOS会更多的利用特征金字塔,即如上所说的良好的模型结构设计及更密集的格点来实现,从原理上来说后续的无Anchor算法创新点有点不足。
基于Attention的模型
我们知道Anchor其实就是预设的Attention,所以基于Attention的目标检测也是自然而然的事情,随着transformer技术的发展后面很多基于Attention的模型都使用了transformer,如:DETR等,这里后面再展开讲了。
图像金字塔 vs 特征金子塔
在早期的目标检测中,更多的使用图像金字塔(Image Pyramid)去搜索目标,这个也很符合直觉,比如固定算法输入[36x36]的尺度,在模型不变的前提下,图像中任意的大于该尺度的目标总能通过图像金子塔缩放到这个尺度,也即任意比该尺度大的目标都能被该模型分类,但是如果不放大图像,模型可能不能分类比[36x36]太小的目标,所以这时该算法有一个最小可检测目标。后来随着神经网络模型的发展,也自然而然的产生了基于图像金字塔与卷积网络的模型,如:DenseBox,Cascade CNN等。
在卷积网络中特征金字塔能更好的共享计算,特征金子塔其实和图像金子塔是基本相同的原理,大的目标需要被缩小后才容易被检测到,对应到高层小尺度的特征金子塔层,而小物体则不需要,所以小物体的检测更加依赖于大尺度的底层特征金字塔层,但是在卷积网络中因为感受野的原因,小目标对应的特征金字塔层缺少全局的视野,也由于小目标广泛的模糊,纹理缺失等成为目标检测的难点。
总的来说基于特征金字塔这种原理,小目标和大目标在不同的层次上去检测,容易给人割裂感。Faster-RCNN 系列这种在同一层去检测不同大小的目标相对更符合人类直觉。
卷积网络的分形特征
分形(Fractal)是大自然中广泛存在的特征,如树,树叶,花椰菜,雪花等等都具有这种特征,值得说的是,我们的大脑也具有这种特征,其主要表现为不同尺度下具有自相似的结构,换句话说,较小的分支通过放大适当的比例后可以得到与整体几乎完全一致的结构,也即沿着分支不断放大,得到的结构与主体是一致的,所以理论上具有分形特征的物体具有无限的细节。
卷积网络有一个非常有意思的特征是分形特征,以前总希望找到一种和大脑相似结构的模型,现在看来已经不用找了。
如图1是一个主体结构,即 [5x5]>>[3x3]>>[1x1] 的结构,其实可以将任意一个格子用这个主体结构代替,但是因为这个结构替换由上往下会比较复杂,这里简单将最下层的[5x5]中每个格点用该结构替换,替换后变为了 [25x25]>>[15x15] >>[5x5]>>[3x3]>>[1x1] 的结构,但是这个结构 [25x25]>>[15x15] 没有考虑特征共享的问题,特征共享后我们可以得到这样的结构:[9x9]>>[7x7]>>[5x5]>>[3x3]>>[1x1],可能你也看出来了这个就是使用卷积核kernel=[3x3]和stride=1的结果,所以卷积网络是具有分形特征的,即该网络与主体网络自相似,且从任意特征格点开始都能提出一个从该特征点到其感受关联的下N层特征层的独立网络。这种分形结构的设计是很巧妙的,这个结构也很好的契合了我们大脑里面的结构。其实我们也看出来了,在其他网络里面,如:多层感知机也有这样的结构。
但是遗憾的是对这种神经网络的分形结构的研究比较少。更多的是提出像FractalNet和Fractal Neural Network这类模型,其实是没有理解到卷积网络本身就蕴含这样一个特性。
参考
- You Only Look Once: Unified, Real-Time Object Detection
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- YOLO9000: Better, Faster, Stronger
- SSD: Single Shot MultiBox Detector
- FCOS: Fully Convolutional One-Stage Object Detection
- DenseBox: Unifying Landmark Localization with End to End Object Detection
- A Convolutional Neural Network Cascade for Face Detection
- End-to-End Object Detection with Transformers
- Is Your Brain Fractal?
- FractalNet: Ultra-Deep Neural Networks without Residuals
- Fractal Neural Network: A new ensemble of fractal geometry and convolutional neural networks for the classification of histology images
- maskrcnn-benchmark - anchor_generator