CS231N-11-Other Computer Vision Tasks
2017-10-15 23:16
483 查看
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建议换坑吧。都被大神垄断了。
对每个像素点做分类,不会分割overlap的物体。这是从图像分类出发的第一步,也是自动驾驶的最基础。
我们现在知道什么?仅仅是图像分类。to be specific, 就是一张图片经过CNN输出一个向量,哪个值最大,就是类别。好的,就从这里出发。
第一个naive算法,sliding window滑动窗口。把每个像素遍历,带着周边的像素点,分别做图像分类,显然这是理论可行的。但遍历像素的计算量太大了。
第二个算法,CNN最后的输出不是一个向量,而是tensor,即纵深是概率向量,覆盖整张图片,然后去argmax,就得到每个像素的分类。
问题依旧是conv层如果不变的话,计算量太大了。
第三个算法在第二个基础上,提出先downsample下采样再upsample上采样,这样先减后增,明显减少了参数数量。不过问题是,我们学过downsampling的技术(卷积层,pooling层),那么upsampling呢?
以上是两个最简单的固定上采样,pooling的反面。看图不解释了。
max unpooling 是存储先前pooling argmax,然后填到相同的位置上。保持神经网络在先减后增的对称性。
这是本讲的重点,也是很有趣的地方。转置卷积,民间又称为逆卷积。现在我们的任务是升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.
定位是在分类的基础上,多任务学习。定位相当于四个点的坐标。multitask loss=softmax/cross entropy loss+L2 loss(平方项,不是reg). 即分类的损失函数(classfication)与定位坐标的损失函数(regression),fully connected 4096*4。注意定位是确定一个物体的,故坐标数量是确定的。两个loss之间的加权平均,这个权是最重要的超参数,直接影响了Loss,比lr®还厉害。以及CNN是Pre-trained然后fine-tuned.
同理,可以做Human Pose Estimation,即姿势识别,固定的多个姿势点,Loss之和。
Label标注比较艰巨,需要对所有姿势点标注(或者方框box coordinate),当然比pixel要好点。
物体检测与localization+classfication的区别在于,我不知道物体的数量。这就是难点所在。deep learning在物体检测著名数据集PASCAL VOC上表现优异。
最naive的办法是滑动窗口遍历,每个方框进行图像分类,显然不可能。
在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会议来看,目标检测的研究方向是怎么样的?
关于这些算法的知乎专栏.
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的固定算法。
于是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.
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。
rbg又发了YOLO,是single-shot methods,只扫一次。这比RCNN region-based快很多,当然accuracy会低一点。
输入还是一张图片,经过CNN,输出很多东西:将图片分成7*7网格,每个有B个base box,然后参数是dx,dy等偏差,然后还有类别,一共7*7*(5b+c)个输出,这是固定的个数,作regression。对回归其实还不太懂…
三个loss
classfication
bounding box regression
mask
在Faster-R-CNN基础上,得到RPN生成的ROI,这些ROI作分类,然后对每个像素点做mask。
看论文吧。这样是没法理解的。
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®还厉害。以及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 NetworksFast-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 detectionrbg又发了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
classfication
bounding box regression
mask
在Faster-R-CNN基础上,得到RPN生成的ROI,这些ROI作分类,然后对每个像素点做mask。
看论文吧。这样是没法理解的。
相关文章推荐
- 【CS231n】-学习笔记-1-Intro to Computer Vision, historical context.
- Rethinking the Inception Architecture for Computer Vision-Inception-V3
- Inception-v3:"Rethinking the Inception Architecture for Computer Vision"
- rethinking the inception architecture for computer vision
- 计算机视觉和人工智能的状态:我们已经走得很远了 The state of Computer Vision and AI: we are really, really far away.
- Handbook of Mathematical Models in Computer Vision
- 【转载】Computer vision research groups
- 【Compute Vision】Viewing Computer Vision from a Bigger Picture
- Computer Vision and the machine learning workflow
- Computer Vision Resources
- Computer Vision Tutorials from Conferences(1) -- ICCV
- [读书笔记/翻译]Multiple View Geometry in Computer Vision-1.4,1.5,1.6
- 计算机视觉资源 Computer Vision Open Source Algorithm Implementations Participate in Reproducible Research
- Chapter 11-Creating Other Schema Objects ---View
- Calendar of Computer Image Analysis, Computer Vision Conferences
- Programming Computer Vision with Python (学习笔记五)
- Reading List for Computer Vision Newbie
- 网络模型 Inception V2/V3-Rethinking the Inception Architecture for Computer Vision
- get file from other computer
- [论文笔记]Rethinking the Inception Architecture for Computer Vision