Life sucks, but you're gonna love it.

0%

干货 | 几种目标检测的网络和变化

Selective Search

RCNN

Fast-RCNN

为了改进之前RCNN结构中,生成的conv feature需要通过SVM,造成大量的时间损耗。Girshick又改进了之前的网络结构,提出了Fast RCNN。

Fast RCNN是在SPP和RCNN的基础上提出的。

RCNN我们在上个部分已经提过了,那么SPP网络是什么呢?

  • SPP的全称是Spatial Parimid Pooling,主要是在不同的空间尺度上进行池化,提取不同空间尺度的特征,防止Proposal在进入RCNN网络时rescale到固定尺寸(224 x 224)时图形产生的形变和图片的变化。

  • SPP在使用的过程中是将全图划分成不同尺寸的grid(比如 1 x 1的grid的就是原图本身, 2x 2的grid是将原图分为4份,其中每一份cell的长宽都是原图长宽的一半), 然后将每一个grid生成的pooling之后的结果组合在一起,产生一个固定大小的feature作为SPP的输出。对于输入的每一个channel都会生成grid。

  • 举个例子,假如现在我们输入是一个 256 x 256 x 3 的feature

    1. 针对每一层,生成 1x1 的grid,然后做max pooling,得到一个 1 x 3 的feature

    2. 针对每一层,生成 2 x 2的grid,然后做max pooling,得到一个 4 x 3的feature

    3. 针对每一层,生成 4 x 4的grid,然后做max pooling,得到一个 16 x 3 的feature

    最后将这些feature拼接起来生成的整个feature是固定大小的输出。(因为我们grid的大小是固定的,所以如果输入feature的尺寸发生变化,那么只有grid中每个cell的大小会发生变化,但是gird中cell的个数是固定不变的,所以最后通过ROI pooling的生成结果的尺寸是不变的。)

那么对于Fast RCNN来说,它的输入是一张图片,以及一些proposal,这些proposal的大小各不相同,我们用(r, c, h, w) 来表示每一个proposal region。 r c表示左上角的坐标点,h w 表示这个框的长宽。

Fast RCNN的主要过程是,我们将原图通过特征提取网络,生成一个conv feature map,然后在这个map上面根据之前所说的proposal的信息,提取出proposal的位置,并对其进行ROI pooling。生成的ROI pooling是一个长度固定的feature,并且这里我们只用一次 H x W 的grid提取,也就是说通过ROI pooling之后生成的feature的长度是 H x W x d (这里d是输入ROI pooling之前的feature的维度)。生成的feature之后会通过两个网络,一个连接到softmax用来确定我这张图片上有哪些物体,另一个用来确定预测出的物体的bounding box是什么。

(receptive field为什么会更大)

Faster RCNN

目标检测的网络发展至此,还有一个重要的需要依靠外界实现的输入,那就是proposal

Faster RCNN的出现解决了需要依靠外界条件得到proposal region的情况,实际上Faster RCNN就是一个Region Proposal Network + Fast RCNN的网络结构。那么就主要介绍一下生成proposal的网络: RPN

RPN的主要目的就是寻找proposal,这时候我们就建立一个sliding window,然后以这个sliding window为中心,构建不同尺寸和长宽比的anchor来找到合适的proposal region。

训练RPN的时候,主要分为两个方面的cost,一方面是二维向量表示所圈到的proposal是否是一个物体,另一个是四维向量来表示所圈到的坐标信息。proposal是否为物体主要是根据proposal和target的IoU来判定,如果IoU大于0.7或者IoU是这些anchor里面最大的,那么这个anchor就被称作是positive的结果;反之如果IoU小于0.3就是negative的结果。bounding box的预测值是输入在regression网络中进行训练的。

文章中使用的anchor为9个。

但是使用RPN还存在一个问题就是因为我们的anchor的大小都是固定的,那么一个特别大或者特别小的物体就可能无法被估计(在感受野外)或者被找到。这时候可以通过训练不同的RPN在不同的尺度下进行proposal的估计,在这样产生的proposal的感受野也不同。

(感受野是怎么确定的)

MTCNN

MTCNN的全称是multi-task cascaded convolutional neural network,主要是用来进行人脸的detection的。