CNN:目标检测

Multi-shot 方法

R-CNN

Ross Girshick et. al. 在 2014 [2] 提出 R-CNN,用于 object detection 和 sementic segmentation,比 VOC 2012 的最好模型 mAP (mean average precision) 提升了 30%;在 ILSVRC2013 mAP 达到 31.4%。

R-CNN 使用 Region Proposal 提取出 2000 个 ROI (感兴趣区域),对每个 ROI 使用 CNN + SVM 进行分类如猫、狗、背景。

r-cnn

在 ILSVRC 2012,CNN AlexNet 在图像分类取得了很好的成绩。为填补 CNN 在 object detection 的鸿沟,本文主要解决两个问题:

  • 如何用深度网络进行 object detection

    以往方法有 1. CNN Softmax + Regressor [4],缺点精度不高 2. 粗暴的 sliding-window detctor,如 ILSVRC2013 冠军 Overfit [3],缺点计算代价高。本文通过 category-independent region proposal 方法,在测试时,该方法生成 2k 张候选截图做为输入,用 category-specific SVM 分类。目前有多种 region proposal 方法,本文用 selective search [4]。分类后,用一些后处理方法来 refined box 以提升精度。

  • 如何用小容量样本,训练高容量 CNN

    以往方法用 unsupervised pre-train + supervised fine-tuning 训练。本文用大数据集 supervised pre-train (ILSVRC) + 小数据集 supervised fine-tuning (PASCAL),对结果有显著提升。使用 AlexNet 的 pre-train model,把最后一层 4048 x 1000 改成 4048 x 21 (PASCAL 的类别数目)。在 CNN 的输出层,用 category-specific SVM 模型完成分类任务;category-independent linear regression 完成定位,输出 box 坐标。

SPPNet

引入 Spatial Pyramid Pooling

Fast R-CNN

R-CNN 存在缺点:

  1. 测试运行速度慢(50 sec),由 2k region proposal 导致
  2. SVM 训练时无法更新 CNN 参数
  3. 复杂的 CNN fintune + SVM + Regressor 三阶段训练流程

为解决 R-CNN 这些问题,Girschick 在 ICCV 2015 [5] 提出 Faster R-CNN,改进有:

  1. Region of Interest Pooling 机制,让 region proposal 在 conv 后执行,在高阶 feature map 做区域回归和分类,利用共享CNN计算提升测试速度
  2. SVM 改成 softmax,训练时更新 CNN 参数
  3. 用 multi-task loss 简化训练流程,end-to-end

在 PASCAL 训练时间从 84 小时降低到 9.5 小时,测试时速度提升 146x,mAP 稍微有提升。

实际每张图片处理时间从 50 sec 到 2 sec。

其中 ROI pooling layer 结构如下图:

Fast R-CNN

ROI pooling layer 是一个max pooling layer。假设有两个超参数 HHWW 把输入的 patch 划分成 H×WH \times W 个小方格,假设投影的每个 ROI 的 patch 为 h×wh \times w,则每个小方格尺寸是 h/H×w/Wh/H \times w/W。而在每个方格中,执行 max pooling layer 操作,两层 FC 后得到 ROI 特征向量,最后分别经过一层 FC 进入 bbox regressor 和分类 softmax 。

损失函数:

L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)L(p,u,t^u,v)=L_{cls}(p,u) + \lambda [u \ge 1] L_{loc} (t^u, v)

其中 Lcls(p,u)=logpuL_{cls}(p,u) = -\log p_u 是分类 log 损失;LlocL_{loc} 是 bbox 损失。 uu 是类别,v=(vx,vy,vw,vh)v=(v_x,v_y,v_w,v_h) 是真实 bbox 坐标,tt 是预测 bbox 坐标。[u1][u \ge 1] 表示只计正样本的 bbox 损失。

Lloc(tu,v)=ix,y,w,hsmoothL1(tiuvi)L_{loc}(t^u, v)=\sum_{i \in {x,y,w,h}} \text{smooth}_{L1}(t_i^u - v_i)

Faster R-CNN

何凯明在 NIPS 2016 发表 Faster R-CNN [6],通过降低计算瓶颈 Region Proposal 部分,提出 Region Proposal Network 提升速度,是的检测速度达到实时 0.2 sec / 张图像。

RPN 输入图片,输出一系列 bbox 和对应的 objectness score。为了复用 CNN 的计算,我们假设 RPN 和 CNN 共享卷基层。在 conv feature map 上用 n×nn \times n 的滑动窗口提取特征(256-d)加 ReLU,随后通过两个 FC 层—— cls layer 和 reg layer 输出物体分数和物体区域。在每个滑动窗口区域,都有一个anchor,对应 k 个 region proprosal(4k reg 坐标和 2k cls)。

最后,用 RPN 得到的区域,用 ROI pooling layer + softmax classifier 完成物体检测任务。

在一个网络中的四个 loss:

  • RPN classification (good / bad)
  • RPN regression (anchor -> proposal)
  • Fast R-CNN classification (over class)
  • Fast R-CNN regression (proposal -> box)

One-shot 方法

YOLO

速度可以达到 115 FPS,但是准确率不如 R-CNN。

YOLO 把 bounding box 回归和图像分类放入同一个网络。首先把图片划分成 7x7 个 grid,每个 grid 有 B 个 base box,每个 base box 输出 confidence dx dy dw dh 和 C 个类的分数,即网络输出 7 x 7 x (5 * B + C)。

优点:

  1. 简单,单一网络
  2. 整张图像做为输入,能对全局信息进行建模,避免 R-CNN 对背景错误分类的问题
  3. 能学习到图像的泛化表示,比如在训练时用自然图像,在测试时用艺术图像也能工作

缺点:

  1. 未达到 state-of-art 方法的进度
  2. 精度不高,无法处理大分辨率图像的小物体

模型结构:

  1. 输入图像划分为 7x7 的 grid
  2. 每个 grid 输出 B 个 bounding box 的 (dx, dy, dw, dh, confidence) ,和分类结果 C,其中 confidence 表示 IOUtruthpredIOU\frac {truth}{pred}

cnn-variant-yolo-fig1

损失函数定义:

λcoori=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoori=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]+i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21ijnoobjcclasses(pi(c)p^i(c))2\begin{aligned} &\lambda_{coor} \sum_{i=0}^{S^2} \sum_{j=0}^B \mathbb 1_{ij}^{obj} \bigg[(x_i-\hat x_i)^2 + (y_i-\hat y_i)^2\bigg] \\ &+ \lambda_{coor} \sum_{i=0}^{S^2} \sum_{j=0}^B \mathbb 1_{ij}^{obj} \bigg[(\sqrt{w_i} - \sqrt{\hat w_i})^2 + (\sqrt{h_i} - \sqrt{\hat h_i})^2\bigg] \\ &+ \sum_{i=0}^{S^2} \sum_{j=0}^B \mathbb 1_{ij}^{obj} (C_i - \hat C_i) ^2 \\ &+ \lambda_{noobj} \sum_{i=0}^{S^2} \sum_{j=0}^B \mathbb 1_{ij}^{noobj} (C_i - \hat C_i) ^2 \\ &+ \sum_{i=0}^{S^2} \mathbb 1_{ij}^{noobj} \sum_{c \in classes} (p_i(c) - \hat p_i(c))^2 \end{aligned}

其中用 sum-square error 因为容易优化,尽管和我们最大化 mAP 的目标不完全一致。另外,大部分 box 不包含任何类别,训练时使得包含 object 的 box confidence 趋于 0。为解决这个问题,引入 λcoord=5\lambda_{coord}=5, λnoobj=0.5\lambda_{noobj}=0.5,减少不包含 object 的 loss,增加包含 object 的 loss。

YOLOv2

RetinaNet

FAIR 在 2017 提出 focal loss,改进 SSD 结构前背景样本悬殊的问题,提升识别准确率。其中 γ>0\gamma \gt 0 减少成功分类样本的损失(pt>.5p_t \gt .5),把更多注意力放在难的、错误分类问题上。

\begin{align} CE(p_t) &= -\log(p_t) \\ FL(p_t) &= -(1-p_t)^\gamma \log(p_t) \end{align}

FocalLoss

论文实验的网络结构如下,另外 loss 也可用于 R-CNN 结构。

RetinaNet

其他技巧

Data augmentation,clip + flip 混合使用。

在 supervised pre-trained model 基础上 supervised fine-turning,可以在训练集样本稀少的情况下,有显著提升 [2]。

Instance Segmentation

Mask R-CNN

He et. al. 2017 提出 Mask R-CNN [8],在 Fast R-CNN 基础上,做 instance segmantation,精确到像素,同时可以做 pose detection。

引用

[1] Lecture 11 Detection and Segmentation, Stanford University School of Engineering Video

[2] Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2014. PDF

[3] Sermanet, Pierre, et al. “Overfeat: Integrated recognition, localization and detection using convolutional networks.” arXiv preprint arXiv:1312.6229 (2013). PDF

[4] CS231n Lecture 8 - Localization and Detection Video

[5] Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE international conference on computer vision. 2015. PDF

[6] Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in neural information processing systems. 2015. PDF

[7] YOLO Homepage YOLO900 PDF YOLO PDF

[8] He, Kaiming, et al. “Mask r-cnn.” arXiv preprint arXiv:1703.06870 (2017). PDF

[9] Lin T Y, Goyal P, Girshick R, et al. Focal loss for dense object detection[J]. IEEE transactions on pattern analysis and machine intelligence, 2018. PDF

[10] SSD: Single Shot MultiBox Detector PDF

[11] 读 Focal Loss URL

本文有帮助?