咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下。
本文主要有两部分:
- 目标检测中的边框表示
- Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor
目标检测中的边框表示
目标检测中,使用一个矩形的边框来表示。在图像中,可以基于图像坐标系使用多种方式来表示矩形框。
-
最直接的方式,使用矩形框的左上角和右下角在图像坐标系中的坐标来表示。
使用绝对坐标的 ( x m i n , y m i n , x m a x , y m a x ) (x_{min},y_{min},x_{max},y_{max}) (xmin,ymin,xmax,ymax)。 但是这种绝对坐标的表示方式,是以原始图像的像素值为基础的,这就需要知道图像的实际尺度,如果图像进行缩放,这种表示就无法准确的进行定位了。 -
对图像的尺寸进行归一化,使用归一化后的坐标矩形框
坐标进行归一化,这样只要知道图像的scale
就能够很容易在当前尺度下使用矩形框定位。 -
中心坐标的表示方式
使用中心坐标和矩形框的宽和高的形式表示矩形框。
( c x , c y , w , h ) (c_x,c_y,w,h) (cx,cy,w,h)这种方式很明确的指出来矩形框的大小。
在目标检测中,训练数据的额标签通常是基于绝对坐标的表示方式的,而在训练的过程中通常会有尺度的变换这就需要将边框坐标转换为归一化后的形式。
在计算损失值时,为了平衡尺寸大的目标和尺寸小的目标对损失值的影响,就需要将矩形框表示为中心坐标的方式,以方便对矩形框的宽和高添加权重。
最后,要将归一化后的中心坐标形式转换为检测图像的原始尺度上。
Anchor Box
预定义边框就是一组预设的边框,在训练时,以真实的边框位置相对于预设边框的偏移来构建
训练样本。 这就相当于,预设边框先大致在可能的位置“框“出来目标,然后再在这些预设边框的基础上进行调整。
为了尽可能的框出目标可能出现的位置,预定义边框通常由上千个甚至更多,在深度学习之前,通常使用各种形状的“滑动窗口”,在原图像滑动,来产不同位置不同形状的预设边框。
到了深度学习时期,由于对图像特征提取技术的进步,可以使用Anchor Box在图像的不同位置生成边框,并且能够方便的提取边框对应区域的特征,用于边框位置的回归。
一个Anchor Box可以由:边框的纵横比和边框的面积(尺度)来定义,相当于一系列预设边框的生成规则,根据Anchor Box,可以在图像的任意位置,生成一系列的边框。
由于Anchor box 通常是以CNN提取到的Feature Map 的点为中心位置,生成边框,所以一个Anchor box不需要指定中心位置。
总结来说就是:在一幅图像中,要检测的目标可能出现在图像的任意位置,并且目标可能是任意的大小和任意形状。
- 使用CNN提取的Feature Map的点,来定位目标的位置。
- 使用Anchor box的Scale来表示目标的大小
- 使用Anchor box的Aspect Ratio来表示目标的形状
常用的Anchor Box定义
- Faster R-CNN 定义三组纵横比
ratio = [0.5,1,2]
和三种尺度scale = [8,16,32]
,可以组合处9种不同的形状和大小的边框。 - YOLO V2 V3 则不是使用预设的纵横比和尺度的组合,而是使用
k-means
聚类的方法,从训练集中学习得到不同的Anchor - SSD 固定设置了5种不同的纵横比
ratio=[1,2,3,1/2,1/3]
,由于使用了多尺度的特征,对于每种尺度只有一个固定的scale
Anchor 的意义
Anchor Box的生成是以CNN网络最后生成的Feature Map上的点为中心的(映射回原图的坐标),以Faster R-CNN为例,使用VGG网络对对输入的图像下采样了16倍,也就是Feature Map上的一个点对应于输入图像上的一个 16 × 16 16 \times 16 16×16的正方形区域(感受野)。根据预定义的Anchor,Feature Map上的一点为中心 就可以在原图上生成9种不同形状不同大小的边框,如下图:
从上图也可以看出为什么需要Anchor。根据CNN的感受野,一个Feature Map上的点对应于原图的 16 × 16 16 \times 16 16×16的正方形区域,仅仅利用该区域的边框进行目标定位,其精度无疑会很差,甚至根本“框”不到目标。 而加入了Anchor后,一个Feature Map上的点可以生成9中不同形状不同大小的框,这样“框”住目标的概率就会很大,就大大的提高了检查的召回率;再通过后续的网络对这些边框进行调整,其精度也能大大的提高。
Faster R-CNN的Anchor Box
Faster R-CNN中的Anchor有3种不同的尺度 128 × 128 , 256 × 256 , 512 × 512 {128\times 128,256 \times 256,512 \times 512} 128×128,256×256,512×512,3种形状也就是不同的长宽比 W : H = 1 : 1 , 1 : 2 , 2 : 1 W:H = {1:1,1:2,2:1} W:H=1:1,1:2,2:1,这样Feature Map中的点就可以组合出来9个不同形状不同尺度的Anchor Box。
Faster R-CNN进行Anchor Box生成的Feature Map是原图下采样16倍得到的,这样不同的长宽比实际上是将面积为 16 × 16 16 \times 16 16×16的区域,拉伸为不同的形状,如下图:
不同的ratio生成的边框的面积是相同的,具有相同的大小。三种不同的面积(尺度),实际上是将上述面积为 16 × 16 16 \times 16 16×16的区域进行放大或者缩小。
128 × 128 128 \times 128 128