本文是深度学习应用系列的总结,主要内容包括:
- 分割
1.1 语义分割
1.2 实例分割 - 人体姿态估计
- 目标检测
1. Segmentation
1.1 Semantic Segmentation
-
Patch Classfication/ Sliding Window
使用简单的CNN分类网络输入一张图片的多个crops预测每个crops中心位置像素的分类label,计算量巨大
Sliding Window -
FCN (Fully Convolutional Network)
Fully Convolutional Network
使用没有全连接层的全卷积网络,核心思想是利用卷积的空间信息保持性,同时避免平移不变性对low-level的任务造成的影响。
对输入的3HW通过一系列卷积层得到CHW的输出,C为总分类数,从而获得每个像素点的分类label,损失函数使用cross entropy function,计算各个pixel和ground truth的差异,然后整个patch size space范围求和或求平均作为反传误差。
由于卷积filter数量的增大,计算量仍较大
-
Down-Up Sampling
Learnable Upsampling
先下采样再上采样从而减少中间卷积层的参数数量,下采样使用strided conv或max/avg pooling,上采样使用nearest neighbor或bed of nails但这两种上采样方法无法进行学习,因此实际中通常采用可学习的上采样,即上采样和卷积结合(通常也称为转置卷积Transpose Convolution或解卷积"Deconv"、Upconv、分数步长卷积Fractionally strided conv、Backward strided conv等)
对于标准的卷积操作,stride为s:
- s>1,能够增大感受野但相当于卷积的同时做了downsampling,卷积后图像尺寸减小
- s=1,普通的步长为1的卷积,比如在tensorflow中设置padding=SAME的话,卷积的图像输入和输出有相同的尺寸大小;但和dilated conv不同的是这是在像素之间padding空白的像素,而dilated conv是在已有的像素上,skip掉一些像素,或者输入不变,对conv的kernel参数中插一些0的weight
- 0<s<1 分数步长卷积,相当于upsampling,例如s=0.5 在每个像素间padding一个空白像素,然后stride=1做卷积,feature map增大一倍
下采样时使用pooling技术能获得一定的平移不变性,但使用strided conv则不能(注意这里我们并不希望网络具有平移不变性)
在上采样中将feature map还原到原始尺寸的过程并不能将池化丢失的信息完全还原回来,但去掉池化层,各层的感受野太小,通过增大卷积核尺寸来增大感受野又会使计算量暴增,解决这一问题常用的方法有:
-
Dilated Convolution 空洞卷积
Dilated convolution 简单暴力地将卷积核与输入张量的patch隔一定的像素进行卷积运算,从而使够不减少空间维度的前提下,使感受野呈现指数级增长[1]。这一方法在WaveNet, ByteNet 也用到,因为本身 sequence-to-sequence learning 也是一个需要关注多尺度关系的网络。
将空洞卷积和pyramid结合还可以增加一层Dilated spatial pyramid pooling保证多尺度的学习能力 -
通过叠加多个小卷积核获得和大卷积相同的感受野,同时增加网络的非线性拟合能力
-
增加skip connection
在上采样时将之前lower layer的信息concat起来
- U-Net
down-up sampling + skip connection
1.2 Instance Segmentation
对于存在多个对象的情况,我们需要先进行不同对象的分类和各类对象不同实例的定位
2. Pose Estimation
如果我们已知图像中不同对象的分类种数,那么Classification + Localization可以通过一个简单的多任务学习来完成
CNN分类+两个并行的全连接层joint train 一个全连接层输出各分类的得分,另一个长度为4的全连接层输出bounding box(x1, y1, h, w)。
注意到上面的网络并不适用于我们不知道多个对象具体种类个数的情况,因此实际的目标检测比这更复杂,但这种网络适合于例如姿态估计这类分类数固定的情况。因此,对于姿态检测,最基础的网络结构即采用上述结构:输入一张图像经过CNN输出fc层后得到的m个joint point的位置坐标,然后通过regression loss (L2 loss,L1 loss or smooth L1 loss)计算误差并进行反向传播。
DeepPose 2014
Regression loss适用于continuous value,而softmax loss, cross entropy loss以及SVM margin loss适合于categorical values
单人
数据集
2014
热力图展示关节
增大卷积的kernel以增大感受野-> 计算量迅速扩大
ICCV Pyrimid
在同一副图片中使用不同尺度的特征
多人
数据集 MS-COCO
挖掘图片中的动态样本
自顶向上
OpenPose
通过二叉树匹配将多个关节识别为同一个人
自底向上
Fast-RCNN、Mask-RCNN
ICCV 2017 best paper
多人姿态跟踪
3D人体姿态估计
数据集 Human 3.6M
参考文献
-
Yu, Fisher, and Vladlen Koltun. "Multi-scale context aggregation by dilated convolutions." arXiv preprint arXiv:1511.07122 (2015). ↩
网友评论