cs231n笔记 - lecture11

分割 定位 识别 - spatial pixels in images

语义分割:在一张图中分割聚类出不同物体的pixel

物体识别:多物体 2d 和 3d

sematic segmentation + object detection = instance segmentation

语义分割

  • input:图片,output:图片中每个像素做分类
  • 缺陷:实际上是对于每一个像素做分类操作,所以不能区别同一类别的不同物体
  • dataset:VOC2012 和MSCOCO 是语义分割方面最重要的数据库
  • 评价标准:
    1. 像素精度:每一类像素正确分类的个数/每一类像素的实际个数
    2. 均像素精度:每一类像素精度的平均值
    3. 平均交叉比:求出每一类的IOU取平均值。IOU是指两块区域相交的部分/两个部分的并集。
    4. 权频交并比:每一类出现的频率作为权重

idea

sliding window
  • 对于每一个小的patch,判断它的中心像素属于哪一类
  • problem:需要对每一个像素搞一个patch,计算负责度很高 supersupersuper expensive,同时patch之间有overlap所以重复计算很多
Fully-convolutional networks - FCN
  • 仅有卷积层和zero-padding的cnn,保持输入图像的原有尺寸,最后输出一个tensor,尺寸是C*H*W,其中C是类的数量。
  • loss function:每个像素的分类损失(交叉熵)做平均
  • problem:没有pooling层,而且用的保持长宽的卷积层,计算量非常大,非常耗内存
Downsampling & upsampling
  • 仅对一部分卷积层做原清晰度处理,然后用stried convolution来下采样,相当于一个分类网络,不同的是后面不是fully-connected层
  • 后半部分上采样,使输出可以维持现有尺寸
  • 好处:计算量变小,可以让网络变的更深

Upsampling

Unpooling - average pooling
  • Nearest Neighbor: 都填相同数字
  • Bed of Nails: 只有左上角填相应数字,其余均为0
Max Unpooling - max pooling的对称 - SegNet
  • max pooling时记下区域的哪个元素是最大的,在max unpooling的时候类似于钉床的操作,但是把元素放在max pooling对应的位置上,剩下的为0
  • 原因:做分割的时候,我们希望基于像素的预测结果尽可能好,希望找到边界,并让这些细节体现在预测中。如果我们做最大池化,这种不均匀性就会凸现出来,但是低resolution会丢失一些细节。用max unpooling,可以更好的处理细节,存储池化的时候丢失的位置信息
  • 在反向传播时,存储这些信息占的位置并不多,所以不影响
Transpose Convolution 转置卷积
  • learnable upsampling:既能用来做上采样,又能学习权重
  • recall normal convolution,计算时算的是内积
  • input:2*2, output:4*4,计算时用每个像素的标量乘上卷积核,再以3*3的方式复制这些值作为输出,感受野overlap的时候加起来。
  • 也会叫deconvolution/upconvolution(去卷积/重卷积)
  • 更好理解的1D example
  • 解释一下为啥lecturer认为转置卷积这个名字更好,因为计算其实相当于是转置的计算
  • 3*3 stride2 upsampling 有时候会出现棋盘效应

发展

FCN
  • 全连接层换成卷积层
  • 不同尺度的信息融合
U-net
SegNet
  • 带有坐标的池化
Deeplab v1
  • 带孔卷积(Atrus conv)
  • CRF:利用像素之间的关联信息,相邻的像素或者颜色相近的像素有更大可能属于同一个class
PSPnet
  • 使用了空间金字塔池化,得到一组感受野大小不同的feature map,最后联系起来,完成多层次的语义特征融合
Deeplab v2
  • ASPP(Atrus Spatial Pyramid Pooling):融合不同级别的语义信息
Deeplab v3
  • 引进新的ASPP模块:
    1. Batch Normal
    2. 全局平均池化
  • 引入ResNet Block
  • 丢弃CRF
Deeplab v3+
  • 把deeplab v3作为了编码器,同时加入了Xception的结构减少了参数数量,提高运行速度。见mobilenet

套路:

  1. 全卷积网络
  2. 感受野的控制:pooling+upsample -> Atrous conv
  3. 不同level的融合:统一尺寸后add/contact+conv,SPP,ASPP
  4. 考虑相邻像素的关系:CRF
  5. 条件允许的情况,图像越大越好
  6. 对特定类别分割,可以考虑先验知识+对结果进行形态学处理
  7. 其他方向:实时语义分割,视频语义分割