CS231N-11-Other Computer Vision Tasks

来源:互联网 发布:银联数据应届生待遇 编辑:程序博客网 时间:2024/06/09 23:39

  • semantic segmentation 语义分割
    • Upsampling
      • Unpooling
      • Transpose Convolution Deconvolution 对卷积的再理解
  • Localisation 定位
  • Object Detection 物体检测
    • Ross Girshick rbg
    • R-CNN
    • Fast R-CNN
    • Faster-RCNN
    • YOLO SSD
  • Instance Segmentation 实例分割
    • Mask R-CNN

计算机视觉除了最简单的图像分类外,还有以下主题。

这里写图片描述

semantic segmentation 语义分割:对每个pixel分类
localisation:对single object定位
detection: 对multiple object定位

预警:本讲至少涉及7篇经典论文:语义分割的FCN,目标检测的R-CNN,Fast R-CNN, Faster R-CNN, YOLO, SSD,实例分割的Mask R-CNN.
这些论文只有读过复现过,才能真正理解。这里只是个概要。
PS: CV这些坑挖的差不多了,现在读这个方向的PhD建议换坑吧。都被大神垄断了。

semantic segmentation 语义分割

这里写图片描述

对每个像素点做分类,不会分割overlap的物体。这是从图像分类出发的第一步,也是自动驾驶的最基础。

我们现在知道什么?仅仅是图像分类。to be specific, 就是一张图片经过CNN输出一个向量,哪个值最大,就是类别。好的,就从这里出发。

这里写图片描述

第一个naive算法,sliding window滑动窗口。把每个像素遍历,带着周边的像素点,分别做图像分类,显然这是理论可行的。但遍历像素的计算量太大了。

这里写图片描述

第二个算法,CNN最后的输出不是一个向量,而是tensor,即纵深是概率向量,覆盖整张图片,然后去argmax,就得到每个像素的分类。
问题依旧是conv层如果不变的话,计算量太大了。

这里写图片描述

第三个算法在第二个基础上,提出先downsample下采样再upsample上采样,这样先减后增,明显减少了参数数量。不过问题是,我们学过downsampling的技术(卷积层,pooling层),那么upsampling呢?

Upsampling

着重讲了上采样的实现。分为fixed和learned两种。

Unpooling

这里写图片描述
这里写图片描述

以上是两个最简单的固定上采样,pooling的反面。看图不解释了。
max unpooling 是存储先前pooling argmax,然后填到相同的位置上。保持神经网络在先减后增的对称性。

Transpose Convolution (Deconvolution) 对卷积的再理解

这里写图片描述

这是本讲的重点,也是很有趣的地方。转置卷积,民间又称为逆卷积。现在我们的任务是升size。pooling与unpooling是降size和升size的一对。那么convolution和transpose convolution也是降size和升size的一对。
方法就是卷积核遍历小的矩阵,作一个矩阵乘法,得到一个输出矩阵,然后填满大的矩阵,见图。
为什么叫转置卷积?让我们从矩阵乘法理解卷积。

这里写图片描述

这里写图片描述
摘自知乎大神回答,一针见血。如何理解深度学习中的deconvolution networks?.
卷积可以理解为一个很对称的稀疏矩阵C乘以输入向量(将输入矩阵展开)。而且反向传播的Local gradient可以证明是左乘CT.
转置卷积可以理解为一个很对称的稀疏矩阵CT乘以输入向量(将输入矩阵展开)。而且反向传播的Local gradient可以证明是左乘(CT)T=C.
即矩阵大小转置后,变成长度很小宽度很大的矩阵,乘以短的向量,得到长的向量。恰好与卷积相反。实现了升size。

故最终的语义分割segmentation模型如图所示。很优美对称,先减后增,conv&deconv (pooling&unpooling)。这个模型来源于Fully Convolutional Networks for Semantic Segmentation这篇论文,简称FCN.

这里写图片描述

Localisation 定位

这里写图片描述

定位是在分类的基础上,多任务学习。定位相当于四个点的坐标。multitask loss=softmax/cross entropy loss+L2 loss(平方项,不是reg). 即分类的损失函数(classfication)与定位坐标的损失函数(regression),fully connected 4096*4。注意定位是确定一个物体的,故坐标数量是确定的。两个loss之间的加权平均,这个权是最重要的超参数,直接影响了Loss,比lr&reg还厉害。以及CNN是Pre-trained然后fine-tuned.

同理,可以做Human Pose Estimation,即姿势识别,固定的多个姿势点,Loss之和。
Label标注比较艰巨,需要对所有姿势点标注(或者方框box coordinate),当然比pixel要好点。

这里写图片描述

Object Detection 物体检测

这里写图片描述

物体检测与localization+classfication的区别在于,我不知道物体的数量。这就是难点所在。deep learning在物体检测著名数据集PASCAL VOC上表现优异。

这里写图片描述

最naive的办法是滑动窗口遍历,每个方框进行图像分类,显然不可能。

Ross Girshick (rbg)

首先,下面介绍的几个算法,逐一进步,但竟都是有同一个人参与,就是RBG大神,Ross Girshick。个人主页http://www.rossgirshick.info/.
在Berkeley Postdoc期间,提出R-CNN,Fast-RCNN,再到和Kaiming He提出Faster-RCNN。现已加入FAIR。
Object Detection 独一档的人物。

I also participated in several first-place entries into the PASCAL VOC object detection challenge, and was awarded a “lifetime achievement” prize for my work on deformable part models. I think this refers to the lifetime of the PASCAL challenge—and not mine!

知乎上关于Object Detection的两个大讨论:

  • 如何评价rcnn、fast-rcnn和faster-rcnn这一系列方法?
  • 从近两年的CVPR会议来看,目标检测的研究方向是怎么样的?

关于这些算法的知乎专栏.

R-CNN

这里写图片描述

Rich feature hierarchies for accurate object detection and semantic segmentation
Objection Detection与Deep Learning结合的开山之作。

R-CNN的R来源于Region Proposals,全称是Region-based CNN. 思想是为了避免naive sliding window,用selective search算法得到2000个的备选box,称作region of interest(ROI),然后对每个ROI作CNN图像分类。
如下图所示,由于CNN输入尺寸固定,对每个ROI作伸缩到相同尺度,然后用CNN图像分类,原文是SVM LOSS加上Bbox reg?,对边框也有regression。
缺点很明显,太慢了,2000张train慢,test慢。于是有了后面改进。

这里写图片描述

既然回归方法效果不好,而CNN在分类问题上效果很好,那么为什么不把detection问题转化为分类问题呢?RBG的RCNN使用region proposal(具体用的是Selective Search Koen van de Sande: Segmentation as Selective Search for Object Recognition)来得到有可能得到是object的若干(大概10^3量级)图像局部区域,然后把这些区域分别输入到CNN中,得到区域的feature,再在feature上加上分类器,判断feature对应的区域是属于具体某类object还是背景。当然,RBG还用了区域对应的feature做了针对boundingbox的回归,用来修正预测的boundingbox的位置。RCNN在VOC2007上的mAP是58%左右。
作者:魏晋
链接:https://www.zhihu.com/question/35887527/answer/73048322
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

至于Selective Search的介绍,参见上述论文,或者知乎RCNN- 将CNN引入目标检测的开山之作

Selective Search 主要思想:
使用一种过分割手段,将图像分割成小区域 (1k~2k 个)
查看现有小区域,按照合并规则合并可能性最高的相邻两个区域。重复直到整张图像合并成一个区域位置
输出所有曾经存在过的区域,所谓候选区域
其中合并规则如下: 优先合并以下四种区域:
颜色(颜色直方图)相近的
纹理(梯度直方图)相近的
合并后总面积小的: 保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域
合并后,总面积在其BBOX中所占比例大的: 保证合并后形状规则。

要点是这是传统CV的固定算法。

Fast R-CNN

Fast R-CNN

于是RBG借鉴Kaiming He的SPP-net的思路单枪匹马搞出了Fast-RCNN,跟RCNN最大区别就是Fast-RCNN将proposal的region映射到CNN的最后一层conv layer的feature map上,这样一张图片只需要提取一次feature,大大提高了速度,也由于流程的整合以及其他原因,在VOC2007上的mAP也提高到了68%。
作者:魏晋
链接:https://www.zhihu.com/question/35887527/answer/73048322
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这里写图片描述

如上图所示,先对整张图片进入CNN,到最后的卷积层用selective search得到ROI,然后ROI Pooling layer得到统一的region,然后FC层。
注:省去的时间是2000次CNN。**在CNN最后一层,得到的feature map已经是高度提取的特征了,故ROI少而精。**Region Proposal有很多种求法,selective search是主流算法。
但没怎么搞懂roi pooling, bounding box regression, fc怎么连的。知乎专栏Fast-RCNN.

Faster-RCNN

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

Fast-RCNN的速度瓶颈在Region proposal上,于是RBG和Kaiming He一帮人将Region proposal也交给CNN来做,提出了Faster-RCNN。Fater-RCNN中的region proposal netwrok实质是一个Fast-RCNN,这个Fast-RCNN输入的region proposal的是固定的(把一张图片划分成n*n个区域,每个区域给出9个不同ratio和scale的proposal),输出的是对输入的固定proposal是属于背景还是前景的判断和对齐位置的修正(regression)。Region proposal network的输出再输入第二个Fast-RCNN做更精细的分类和Boundingbox的位置修正。Fater-RCNN速度更快了,而且用VGG net作为feature extractor时在VOC2007上mAP能到73%。
作者:魏晋
链接:https://www.zhihu.com/question/35887527/answer/73048322
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这里写图片描述

我们发现selective search是时间瓶颈bottleneck,faster-rcnn在feature map上建立Region Proposal Network RPN来预测ROI。RPN是怎么学习的?这就很黑科技了…
RPN好像是binary classification,对于判断有的物体,然后还要一个ROI pooling层。具体看论文吧…

以下是region-based methods的速度比较
这里写图片描述

2016年有涌现出single shot的YOLO & SSD。

YOLO & SSD

You only look once: Unified, real-time object detection
rbg又发了YOLO,是single-shot methods,只扫一次。这比RCNN region-based快很多,当然accuracy会低一点。

这里写图片描述

输入还是一张图片,经过CNN,输出很多东西:将图片分成7*7网格,每个有B个base box,然后参数是dx,dy等偏差,然后还有类别,一共7*7*(5b+c)个输出,这是固定的个数,作regression。对回归其实还不太懂…

Instance Segmentation 实例分割

中文是什么… 实例分割?反正是semantic segmentation和object segmentation的结合。目标检测后按像素分割。语义分割不会区分相同的物体,他们重叠在一起,应该是要分开的。不能直接用语义分割去做。

Mask R-CNN

Kaiming He和rgb合作的2017全新力作。

这里写图片描述

三个loss

  1. classfication
  2. bounding box regression
  3. mask

在Faster-R-CNN基础上,得到RPN生成的ROI,这些ROI作分类,然后对每个像素点做mask。

看论文吧。这样是没法理解的。

原创粉丝点击