什么是Anchor:
首先我们需要知道anchor的思想是什么,近似SPP(spatial pyramid pooling)思想的逆向,而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。其次明确anchor的位置。anchor是在原图上的区域,而不是在特征图上(也就是特征图上一个点可以对应到原图上一个n*n的区域)。然后放一张RPN网络解析图:
SPPnet机制:将CNN的输入从固定尺寸改进为任意尺寸,例如在CNN结构中,输入图像的尺寸往往固定的(如224x224像素),输出可看做固定维数的向量. SPPNet在普通的CNN结构中加入了ROI池化层(ROI Pooling)使得网络输入图像可以为任意size,而保证了输出维度是固定的向量.
Anchor的意义:
Faster r-cnn 之所以使用anchor,在我看来,无非两点:容易使模型快速收敛,容易找到目标大小和对应的feature map.anchor本身并不会参与到网络的运算中去,影响的只会是classification和bbox regression分支的target(训练阶段)和怎样decode box(测试阶段)
(1):若是不使用anchor,boundingbox 回归的范围就会比较大,这样会导致计算的loss的范围跳动变大,从而影像训练的难度.也会对于不同的大小目标的精度有倾斜性,增大网络的偏好,目标预测会有不确定性.
(2):有了 anchor,就可以把不同尺寸的目标分配到对应的 anchor 上,这样对应 anchor 的网络权值就仅仅负责一个比较小的目标尺寸范围(我一或几个值,就能代表原图上的一个区域),同时学习过程中,是显式的通过不同的分支、路径来传递不同尺寸目标的 loss,让网络更加符合“逻辑”的得到训练。
Anchor的思考:
目标在那个anchor是简单粗暴的,按照谁的IOU大就归谁的方法划分.而且 anchor 本身的尺寸、比例也是人工指定的,虽然与不同level的featuremap有一定的关系,但并没有和网络结构的设计有良好的耦合(虽然 anchor 可以通过数据集的聚类来获得,但是这也只是单方面的与数据集有了耦合),实际中往往一个目标适合两个或多个anchor,是不是可以用一种更加平滑的方法来加权,而非简单粗暴的0-1选择.
CopyRight@2015-2024 IT手机世界 All Right Reserved
工信备案号:京备A2-2009413
IT手机世界畅享移动互联时代智能智慧新生活