文章目录
概述
总的内容包括Segmentation, Localization, Detection
第一小节内容为图像分割,了解图像分割本质是对每个像素点进行分类的过程,为了解决全卷积网络的计算复杂度问题,提出了与降采样相对应的上采样的方法。使用降采样和上采样方法对应,得到完整的End-to-End网络。
在线Latex公式
思考题:
Q1:上采样有哪几种方法?
Q2:在草稿纸上绘图说明反卷积的过程。
Q3:反卷积的步长会对上采样结果带来怎样的变化?
在CV领域,除了之前讲的分类问题之外,还有以下几个热点问题:
本次课就是逐一对这些问题进行讲解,首先:
Semantic Segmentation
这里Semantic Segmentation主要任务是将每个像素(pixel)做分类,例如:
Label each pixel in the image with a category abel. Don’t differentiate instances, only care about pixels.
由于只根据像素进行分类,所以并不对实例进行区分,例如上图中的两个牛都分为牛,这也是语义分割的一个不足之处
Semantic Segmentation的思路(idea)
第一种是用滑动窗口,这个思路一来是计算量大,而且效率低(有很多overlap的地方)
Problem: Very inefficient! Not reusing shared features between overlapping patches
第二种是用Fully Convolutional,注意不是Fully Connected。
这里也有问题:convolutions at original image resolution will be very expensive …
改进一下,要做下采样和上采样。
下采样之前有讲过:Pooling, strided convolution
上采样呢?
upsampling:去池化(unpooling)
左边是直接复制填充,右边是钉床函数去池化(从三维上看有数字的地方是凸起来:钉子状,零值是平的)
在实际应用过程中最大化下采样和最大化上采样是对称的,注意看下图中的颜色的位置~!老师解释了一点点原理:最大化下采样会丢失一些特征所属的空间信息,因此把最大化上采样设置到原来的位置可以最大化还原这些空间信息
Learnable Upsampling: Transpose Convolution
上面提到的几种上采样方式没有什么权重需要学习,这里有一个比较特殊的可学习的上采样方式。
3 x 3 transpose convolution, stride 2 pad 1.
第一步:取input的第一格,乘filter得到红框部分
第二步:取input的第一格,乘filter得到蓝色框部分,但是红色和蓝色(感受野)重叠部分需要累加
这个操作在别的文献中还有以下名字:
-Deconvolution (bad)
-Upconvolution
-Fractionally strided convolution
-Backward strided convolution
下面为了便于理解,给出了一个1D数据做transpose convolution的例子
下面老师用矩阵来表示convolution和transpose convolution的操作,表明了为什么要用这个名字。
Classification+Localization
框架如下图所示,图片输入AlexNet,最后分两部分FC
对于分类和定位两部分可以分别求损失函数,注意的是位置部分可以用L2损失(简单最常用),也可以用L1或smooth L1(平滑L1损失)或参数化边界。
这里同时处理两个损失,要用到ng讲过的multi task的知识,例如:如何训练,如何fine-tune等
人体姿态估计
参考资料:Toshev and Szegedy, “DeepPose: Human Pose Estimation via Deep Neural Networks”, CVPR 2014
Detection
与之前的问题最大的区别在于,每个图片中的输出的数量是未知的。因此不能把Detection看做回归问题来解
解决方案之一是slide window
其思想是:Apply a CNN to many different crops of the image, CNN classifies each crop as object or background。
问题:要分类的对象数量未知,位置位置,因此如何选择窗口的大小?如果用蛮力穷举的方式来做,那么计算量是非常巨大的。Need to apply CNN to huge number of locations and scales, very computationally expensive!
基于候选框的目标检测模型region-based methods for object detection
解决方案二:Region Proposals
● Find “blobby” image regions that are likely to contain objects
● Relatively fast to run; e.g. Selective Search gives 1000 region proposals in a few seconds on CPU
Selective Search是Region Proposals的常见算法之一
这里提到了目标检测的经典论文:R-CNN
老师几句话把R-CNN步骤描述了一遍(如上图),其中红圈部分是指用region proposal切割出来的区域大小各不相同,因此需要对这些区域进行统一大小,便于CNN处理。
缺点主要是慢:
• Ad hoc training objectives
Fine-tune network with softmax classifier (log loss)
Train post-hoc linear SVMs (hinge loss)
Train post-hoc bounding-box regressions (least squares)
• Training is slow (84h), takes a lot of disk space
• Inference (detection) is slow
47s / image with VGG16 [Simonyan & Zisserman. ICLR15]
Fixed by SPP-net [He et al. ECCV14]
方案二的改进一:Fast R-CNN
比起原来的R-CNN算法,这里不在是直接从原来的图片进行region proposal,而是用ConvNet做特征提取,然后再在特征提取结果上进行region的划分。这个方法叫regions of Interest(RoIs)兴趣区域池,这个老师没有细讲,就不放图了。
最后两类损失函数会结合起来一起训练:
方案二的改进二:Faster R-CNN
原理没怎么听懂,回头再补充,先填图
Insert Region Proposal Network (RPN) to predict proposals from features. Jointly train with 4 losses:
- RPN classify object / not object
- RPN regress box coordinates
- Final classification score (object classes)
- Final box coordinates
不过从图上可以看到,这里有四个损失函数同时训练。
前馈模型feed forward in a single pass
主要有YOLO和SDD
注意的是上面那个计算output的公式与ng里面讲的不一样,应该是:
网
格
大
小
∗
网
格
大
小
∗
a
n
c
h
o
r
b
o
x
数
量
∗
(
5
∗
[
P
c
,
b
x
,
b
y
,
b
h
,
b
w
]
+
类
别
数
量
)
网格大小*网格大小*anchor box数量*(5*[P_c,b_x,b_y,b_h,b_w]+类别数量)
网格大小∗网格大小∗anchorbox数量∗(5∗[Pc,bx,by,bh,bw]+类别数量)
Detection 常用参数:
各种参数对性能的影响:Huang et al, “Speed/accuracy trade-offs for modern convolutional object detectors”, CVPR 2017
Instance Segmentation
分割+检测
Mask R-CNN
1号分支和R-CNN一样的处理分类和边框,1号分支还可以添加Joint coordinates分支进行姿态估计
2号分支用的分割的处理方法
可以达到实时处理的结果: