会议:ICCV-2019
论文:Indices Matter: Learning to Index for Deep Image Matting
官方Codes: https://github.com/poppinace/indexnet_matting
数据集:Adobe Image Matting Dataset,alphamatting.com
索引很重要:学习为 深度图像抠图 建立索引
序:segmentation和matting
image segmentation
将图像中的每个像素都进行分类,即每一个像素有确定的类别。
image matting
一种用RGB的图I,来估计透明度a,前景F和背景B的方法。
原始图像看做是前景和背景按照一定权重(α透明度)叠加组成的。α透明度在[0,1]区间变化,1为不透明,0为完全透明。
image matting的基本步骤是从原图先得到一个由人工制作/粗分割(类似graph cut)得到草图trimap图,带内为前景,它是不透明的(α=1),而带外是背景,α=0,剩下的带中的像素是未知区域,它的α由计算机处理、学习,有可能是小数。
从trimap 获取到每个像素的α值后就可以生成一张α图,这张图看起来是只有前景是白的,其余都是黑的,这就像是我们都曾见过的在艺术创作中使用的蒙版(matte),只把前景露出来,其他背景被挡住。
只要继续按照上述公式,就可将抠出的前景移到新的背景中了(特效大片的绿慕)。
比较
图像分割是将原图分割成若干块,分割的好与不好就看分出来的块是否与图像的内容对应了。至于抠图技术,基本只会分成两块,一块是前景,另一块是背景,而大多数时候我们抠图也就是为了把前景给拿出来。
对于一个二分类的图像问题,用图像分割是很难完美解决的(比如细到头发丝这样的像素),这也是为什么在photoshop里面抠图的时候,有个边缘羽化的功能。而matting可以很好的解决这样的问题。
摘要
把索引操作作为一个特征映射函数,提出了一种学习索引的方法,进而提出了一个索引指导的编码器-解码器框架,索引指导的是池化和上采样操作。框架的核心模块是称为IndexNet。
介绍
上采样算子(upsampling operators)
- 转置卷积
- 上池化
- 周期混沌/深度到空间
- 卷积后的朴素插值
双线性差值
已知的红色数据点与待插值,得到的绿色点。
假如我们想得到未知函数f在点P= (x,y) 的值,
假设我们已知函数f在Q11 = (x1,y1)、Q12 = (x1,y2),Q21 = (x2,y1) 以及Q22 = (x2,y2) 四个点的值。
首先在x方向进行线性插值,得到R1和R2。然后在y方向进行线性插值,得到P.这样就得到所要的结果f(x,y).其中红色点Q11,Q12,Q21,Q22为已知的4个像素点。
第一步:X方向的线性插值,在Q12,Q22中插入蓝色点R2,Q11,Q21中插入蓝色点R1;
第二步 :Y方向的线性插值 ,通过第一步计算出的R1与R2在y方向上插值计算出P点。
多用在语义分割和深度(depth)预测中。
原因:通过上采样生成的特征图过于稀疏,而双线性插值很可能生成特征图,这个特征图可以描述语义一致区域。(同一个区域中的像素通常共享相同的类别标签或具有相似的深度)
**(UnSampling)**上采样
在对边界敏感的任务中不适用。
采用最大池化索引的上池化(Unpooling)
在对边界敏感的任务中表现较好
这是bilinear方法不能比拟的。
文章指出导致这样问题的原就是出在indices这个过程上的。下图展示的就是使用bilinear的方法与文章的方法在边缘细节上的对比:
总结
不同的上采样算子有不同的特点,因此我们期望上采样算子在处理特定视觉任务中的特定图像内容时具有特定的行为。
提出问题:能不能设计一个通用的算子进行上采样过程,能同时预测边界和区域。
Index
所有的上采样算子其实都是一种索引函数形式。因此,索引可以被建模、学习得到。
我们将索引建模为局部特征图的函数,并学习一个索引函数,以在深度神经网络中执行上采样。
提出一个索引指导下的编码器-解码器框架;
不用最大池化和普通的上池化,采用索引池化和索引上采样算子,池化和上采样过程由学习到的索引来指导。
那么基于bilinear和unpooling的方法它们都有各自的优点和不足,那么可不可以将两者的优点进行结合?这也是这篇文章解决的事情,文章将indices function使用CNN网络进行建模从而实现上采样的过程,从而使得upsampling的过程可以依据数据的不同而进行动态变化(数据驱动与自适应),学习边界与纹理信息。
近来研究
深度网络中的上采样(upsampling)
反卷积:语义分割
resize+卷积
打孔和上池化:生成稀疏索引来指导上采样。但是会在上采样之后变稀疏,因为必须在之后接一个滤波尺寸较大的卷积层来致密。(也是研究人员收到启发的结构)
深度图像抠图(Deep Image Matting)
被设计来解决抠图方程。
这些方法严重依赖于颜色线索,在颜色不能用作可靠线索的一般自然场景中,渲染抠图失败。
semi-deep matting:closed-form matting KNN matting
现在仍被用作深度网络的后端(因为虽然网络是端到端训练的,并且可以提取强大的特征,但最终的性能受到传统后端的限制。)
fully-deep image matting:deep image matting approach based
on SegNet
这种基于SegNet的架构成为了最近许多深度抠图方法的标准配置
但是计算昂贵,内存开销大(当测试高分辨率图像时,推理只能在中央处理器上执行,这实际上是不方便的)
上采样与index function的统一 / 用索引的视角看待上采样
对于一个k×k的局部区域来说:
上池化
上面这个符号类似于f()。
均值上采样(看作是邻近差值)
双线性插值/反卷积
W是一个权重矩阵,和X的尺寸一样。
反卷积中,W是通过学习得到的。
双线性插值中,W保持固定。双线性插值可以看成反卷积的一种特殊情况,因此,这种情况下的索引函数是一个软索引。
深度到空间
总结
经过上面的分析之后,文章从理论上证实了上采样是可以通过学习的方式获取index function,用于自适应地捕获局域空间信息。
索引指导下的编码器-解码器框架
学习index,池化和上采样
IndexNet将index建模为尺寸为X(H×W×C)的一个特征图,之后通过X生成两个index map来进行下采样和上采样操作。
索引要么是数学顺序(1,2,3,…),要么是逻辑值(0,1),这意味着index map也可以被用作掩膜。
文中指出index问题可以转换为mask问题,因而就使得可以使用index map去实现上下采样操作了。
IndexNet
它是由一个预先定义好的index block和两个索引归一化层/激活层组成。
index block采用全连接卷积层(FCN)
FCN将传统CNN中的全连接层转化成一个个的卷积层。如下图所示,在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,7,7)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。
简单的说,FCN与CNN的区别在于FCN把CNN最后的全连接层换成卷积层,输出一张已经label好的图。
根据输出的index map,我们将Index network分为两类:
- holistic index networks (HINs) 整体索引网络:
所有通道共享一个整体索引地图。 - depthwise (separable) index networks (DINs) 深度方向/可分离索引网络:
对于index block之后的归一化层,文章对于编码器和解码器部分做了不同的操作,在编码器阶段使用softmax函数,而在解码器阶段加上了一个sigmoid函数,对此给出的解释是保证下采样中梯度的连续性。
Indexed pooling
用得到的索引执行下采样操作:
给定一个局部区域E(k×k),那么它在其操作就是在对应的位置上与index map I(x)做element-wise乘积运算,可以描述为:即:
I(x)为x的索引值。
最大池化和平均池化是index polling的一种特殊情况。
在实验中,通过feature map 和index map之间的逐元素乘法、平均池化层和常数乘法来实现该运算。
Indexed Upsampling
IP的逆运算。上采样中,对于d∈R1×1,在空间上对应于考虑相同指数的E。
对于上采样区域 d ∈ R1×1,会经过最近邻插值先生成与对应参与运算的index map相同尺寸D,之后D与对应的index map进行逐元素相乘运算:
最近邻插值是一种简单的插值算法:不需要计算,在待求象素的四邻象素中,将距离待求象素最近的邻象素灰度赋给待求象素。
设i+u, j+v(i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求象素灰度的值 f(i+u, j+v)
.如下图所示:如果(i+u, j+v)落在A区,即u<0.5, v<0.5,则将左上角象素的灰度值赋给待求象素,同理,落在B区则赋予右上角的象素灰度值,落在C区则赋予左下角象素的灰度值,落在D区则赋予右下角象素的灰度值。
最邻近元法计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。
holistic index networks (HINs)
每一个点都代表的是这个局部区域的整体。
线性整体索引网络
非线性整体索引网络
整体索引图由特征图的所有通道共享,这意味着在馈入IP和IU时,索引图应该扩展到H×W ×C的大小。许多现有的包支持单例维度的隐式扩展。
该索引图可以被认为是应用于各个局部空间区域的局部注意力图的集合。在这种情况下,IP和IU运营商也可以称为“注意力池化”和“注意力上采样”。
depthwiseindex networks (DINs)
深度方向索引网络。一个索引代表一个点。
该网络还具有两种高级设计策略,对应于两种不同的假设。me
- one to one:索引图的每个切片仅与其对应的特征图图切片相关。
- many to one:索引图的每个切片与其对应的特征图图切片的所有通道都相关。
两者的N值取得不同
紫色部分是非线性时需要运行的。
O2O用BN,M2O用SN进行归一化(因此此时N=1)
总结
DIN的容量高于HIN,因此DIN可能会捕捉更复杂的本地模式,但也有过度拟合的风险。
相比之下,由HINs生成的索引图由特征图的所有通道共享,因此解码器特征图可以保留其可表达性,而无需在上采样期间强制降低其维度来拟合索引图的形状。这为解码器设计提供了很大的灵活性,而DINs却不是这样。
结果比较和讨论
数据集的准备
fg: foregroun
alpha: groud_truth
这些都是从Adobe Image Matting dataset得到的
操作细节
网络框架
backbone基于MobileNet V2改造:
- 他允许高分辨率图片在GPU上跑,
- Max Pooling和Max Unpooling分别替换成了作者提出的Indexed Pooling和Indexed Upsampling
训练细节
为了能够与deep matting]进行直接比较,我们遵循它的的相同训练配置。4通道输入(RGB图像连接它的trimap)。
我们遵循完全相同的数据增加策略,包括320×320的随机裁剪、随机翻转、随机缩放等。所有训练样本都是即时创建的。
编码器参数在ImageNet上进行预处理。
第4个输入通道的参数用零初始化。所有其他参数用改进的xvaier进行初始化。
使用了Adams。我们用30个时期(大约90,000次迭代)更新参数。
学习率:初始为0.01并逐渐缩减。
Batchsize:10
比较
同已有的模型进行比较
先选出这些模型较好的,之后再用这里面较好的模型同本实验自己的模型进行比较。
- 索引很好改善
- 现有的语义分割模型不能用于matting
- 融合低级特征(可否理解为降维?)有帮助,但是计算量大
- 编码上下文(如ASPP)对北京的质量有提升
- MobileNetV2 和 VGG-16的效果一样
利用编码层捕获特征数据作为全局语义信息,编码层的输出是编码的语义。为了利用上下文,预计一组比例因子可以选择性地突出显示类依赖的特性。编码层学习一个包含数据集语义上下文的内在字典,并输出具有丰富上下文信息的剩余编码器。
从图中可以看出,这个网络结构中,对前面网络提取出的丰富的特征使用全连接层FC进行编码,其中一个编码分支直接送给SE-loss,进行场景中出现类别的预测;另一个分支对每个类别预测加权的尺度因子,然后这个加权的尺度因子对前面提出的每个通道的类别进行加权,然后再进行后面的上采样,最终计算loss。
我们引入语义编码损失(SE-loss)可进一步规范网络训练,让网络预测能够预测场景中对象类别的存在,强化网络学习上下文语义。 与逐像素的损失不同,SE-Loss对于大小不同的物体有相同的贡献,在实践中这能够改善识别小物体的表现,这里提出的上下文编码模块和语义编码损失在概念上是直接的并且和现存的FCN方法是兼容的。
ASPP
空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP))对所给定的输入以不同采样率的空洞卷积并行采样,相当于以多个比例捕捉图像的上下文。
具体来说,我们在模型最后的特征映射上应用全局平均,将结果经过1x1的卷积,再双线性上采样得到所需的空间维度。最终我们改进的ASPP包括:
1.一个1x1卷积和三个3x3的采样率为rates={6,12,18}的空洞卷积,滤波器数量为256,包含BN层。针对output_stride=16的情况。如下图(a)部分Atrous Spatial Pyramid Pooling
2.图像级特征,即将特征做全局平均池化,经过卷积再融合。如下图(b)部分Image Pooling
选择B11,之后用B11和本实验进行比较
对IndexNet的研究
HMI:holistic masx index:Index block部分使用的是最大池化,而不是通过HIN或者DIN的方法得到的。
M2O DINs的效果比较好。
Index Map的可视化
通过alphamatting.com进行比较
直接用已经训练好的参数进行测试,不训练。
运用于其他任务
在图片分类,深度测量和场景理解上都有比较好的表现。