文章目录
摘要
目标
- 特征相似的像素应该被分为同一类别
- 空间上距离近的像素应该被分为同一类别
- 类别的数量应尽可能多
三个指标有互相排斥的地方,但应该做到一个平衡
贡献点
- 通过normalization和argmax实现可微的聚类
- 空间连续性损失函数
- 扩展了可以让用户输入的涂鸦,使结果更精确
- 扩展一个预训练方法
介绍
把摘要再扩展地讲了一遍,提到之前的工作超像素提取+线性迭代聚类只满足了空间连续性
相关工作
经典方法
- K-means:矢量量化的标准方法
- GS(基于图的方法):利用特定的区域比较函数,针对全局或局部特征进行简单的贪心算法选择
深度学习
- MsLRR:有监督和无监督通用,但因为基于超像素,和本篇之前的工作一样具有边界的限制
- W-Net:无监督,估计分割后恢复原图,无惧边界
- Unsupervised learning of foreground object segmentation:无监督,但只是前后景分割
基于用户输入的图像分割
- Graph cut:最小化图像像素对应于节点的图的代价,可以用于涂鸦或者锚定框的输入
- Image matting:抠图是像素标签软分配,图切割对每个像素就是前后景的分割
- Constrained random walks:可以根据涂鸦划分给出前/后景的种子
以上方法都只能产生一个二值mask,基于多标签的无监督分割,有以下扩展算法
α-expansion:找到一个局部最小值使得α标签的像素不再轻易增加
α-β swap:找到一个局部最小值使得α和β标签不再被轻易地交换
基于CNN的弱监督分割
常用的语义分割弱监督标签:物体检测锚定框、图片的分类结果、涂鸦
一般流程:根据弱监督标签生成一个训练目标,使用这个训练目标训练网络,两个步骤交替进行
- ScribbleSup:使用超像素把涂鸦扩展到整张图,再进行训练
- e-SVM:用CPMC分割从锚定框得到像素级别的标记,再进行训练
- Distinct class-specific saliency maps for weakly supervised semantic segmentation:根据图片类标签生成class saliency map再送入全卷积CRF网络训练
但这些弱监督方法有可能无法收敛到正确的结果,有以下改进版的端到端CNN方法
端到端的可微分割CNN
关于图像分割的深度学习研究一致围绕对图像特征的理解和提取。
- deep embedded clustering (DEC):最小化 KL divergence loss,本文提出的方法只是简单地最小化 softmax loss
- maximum margin clustering:半监督
- discriminative clustering:半监督
方法
问题建模
f:提取特征
g:分配标签
c:标签
无监督方法,f和g是固定的,c待学习
有监督方法,c是固定的,f和g待学习
分解成两个子问题
- 用固定的f和g优化c
- 再用固定的c优化f和g
网络结构
一张RGB图像提取特征后通过一个1x1的卷积转换到一个q维的聚类空间(图中q=3),沿着这个空间的q个轴,通过batch norm把这个q维的特征向量归一化,使用argmax确定每个像素的标签是q维中的哪一维,根据这个确定的伪标签计算特征相似度损失和空间连续性损失,再反向传播。
不考虑batch,我理解的维度变化是这样的:HxW>提取特征后并转换空间>HxWxq>确定伪标签后>HxW
在训练网络时,先设一个较大的q,随着损失下降,q会逐渐变小,为了防止q变成1,所以需要对response map做一个归一化。
损失函数
- 基本:
- 加入涂鸦:
- 特征相似误差:
c n c_n cn是根据 r n r_n rn进行argmax得到的,所以当i遍历到得到 c n c_n cn的 r n r_n rn时才有ln值累加,因为归一化后 r n r_n rn都是0到1,所以前面有个负号。 - 空间连续性损失:
计算每个像素上下左右的的response map上的值的差别 - 涂鸦损失:
网络更新
前面提到的分解为两个子问题,实际上就是CNN前向计算和反向传播的过程。
使用随机梯度下降、Xavier初始化
Xavier初始化的基本思想是,若对于一层网络的输出和输出可以保持正态分布且方差相近,这样就可以避免输出趋向于0,从而避免梯度弥散情况。https://www.zhihu.com/search?type=content&q=Xavier%20%E5%88%9D%E5%A7%8B%E5%8C%96
另外一个重要的点就是与有确切标签的有监督学习不同,本方法在最后一个卷积层和argmax层之间加的batch norm非常关键,把response map中的每一个轴都归一化到0均值,单位方差,这样每个轴才能平均地进行比较,进而得到正确的类标签。
实验结果
连续性损失的有效性
关于特征相似性损失和连续性损失之间的比例,根据数据集需要的分割精度,设置不同的比例可以达到更好的效果。
用户输入涂鸦的分割
参考图像预训练的效果
源代码解析
github地址:https://github.com/kanezaki/pytorch-unsupervised-segmentation-tip/blob/master/demo.py
import argparse
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.autograd import Variable