论文阅读:Deep Image Matting

论文地址:https://arxiv.org/pdf/1703.03872.pdf

内容简介
  • 这个网络是用来做抠图的(Matting),能够取得出色的效果,算是利用深度学习进行抠图的鼻祖
  • 提出了Adobe Image Matting(AIM,有时也称DIM)数据集,解决了之前抠图数据稀缺的问题,后续很多工作也以此数据集为基础
网络结构

在这里插入图片描述
简单来说就是一个Encoder-Decoder + Refine的结构,其中:
在第一阶段,每次Encode下采样将特征图尺寸缩减为原来的1/2,共五次,最终将特征图缩小为1/32;然后再上采样回输入尺寸,获得一个粗分割结果

而第二阶段的意义在于,由于Encoder最终会将特征图尺寸降到很小,不可避免地会丢失细节,最终Decode出来的图是比较“平滑(smooth)”的,并不精细。
这里的细化,说白了就是将原图和预测的alpha matte按通道连接,扔到一个很小(四层)的卷积网络中进行训练。这么做单纯意义就在于因为没有再下采样(基本什么都没有,只有卷积和relu),不会损失细节,便可能对输出结果进行简单的“打磨”,实现更精细的结果。毕竟一开始第一阶段的任务就相当于“用较复杂的结构打磨trimap”,那么这一阶段打磨一下alpha matte就不需要下采样上采样了。

Dataset

在这篇文章之前,能用的数据就基本只有alphamatting.com上的27张训练图像和8张测试图像(要获得高质量的标注实在麻烦)。这就导致一个问题,之前一些表现很好的方法,实际上可能已经都过拟合了…

但是要重新一个个抠又十分麻烦,因此这里采用了个神奇的方法:首先还是自己抠几个(共493个前景),然后从MS COCO和Pascal VOC里面随机抽100张图作为背景,把前景和背景进行合成,就有49300张训练图了。

这里有个问题就是网络有没有可能受到人工合成因素(比如噪声)的影响,不过在作者的实验中并没有发现问题。

数据集的使用是很有讲究的,由于是合成的,就不能把整张图像放进去训练(这样很容易导致模型直接对前景过拟合),因此网络的实际输入不是完整的合成图像,而是图像块(Image Patch)。对于图像块,其实就是在trimap的位置区域随机选取一点,以该点为基准裁切出一块320×320的区域(实际上文中还裁了480×480,640×640的区域,然后压回320×320,进一步避免裁到相似区域导致过拟合)。

Loss

用了两种loss:

  • alpha-prediction loss: 其实就是预测alpha matte和gt alpha matte之间的逐像素差绝对值。不过因为绝对值本身是一次的不可导,因此这里先平方,加上一个小项 ϵ \epsilon ϵ,再开根号来进行近似
    L α i = ( α p i − α g i ) 2 + ϵ 2 , α p i , α g i ∈ [ 0 , 1 ] \mathcal{L}_{\alpha}^{i}=\sqrt{\left(\alpha_{p}^{i}-\alpha_{g}^{i}\right)^{2}+\epsilon^{2}}, \quad \alpha_{p}^{i}, \alpha_{g}^{i} \in[0,1] Lαi=(αpiαgi)2+ϵ2 ,αpi,αgi[0,1]
    其中 α p i \alpha_{p}^{i} αpi为预测 α \alpha α值, α g i \alpha_{g}^{i} αgi为真实 α \alpha α值, ϵ = 1 0 − 6 \epsilon={10^{ - 6}} ϵ=106
  • compositional loss: 合成损失。也就是我们在抠出一个alpha matte后,就可以将相应前景与背景进行合成,得到一个新的图像,将这张图像与gt进行比较,计算逐像素RGB差绝对值。相应公式与上类似:
    L c i = ( c p i − c g i ) 2 + ϵ 2 \mathcal{L}_{c}^{i}=\sqrt{\left(c_{p}^{i}-c_{g}^{i}\right)^{2}+\epsilon^{2}} Lci=(cpicgi)2+ϵ2

最终的loss就是这两个的加权:
L overall  = w l ⋅ L α + ( 1 − w l ) ⋅ L c \mathcal{L}_{\text {overall }}=w_{l} \cdot \mathcal{L}_{\alpha}+\left(1-w_{l}\right) \cdot \mathcal{L}_{c} Loverall =wlLα+(1wl)Lc
这儿比较有意思的是没有简单地将所有区域的 w l w_{l} wl设置成0.5。对于位于trimap未知区域内的像素,将 w l w_{l} wl设置成1,反之设置成0,本质上是种分类讨论。

Data Augmentation

常规的:

  • ColorJitter:色彩抖动
  • Flip:左右翻转(上下翻转应该就不用了)

自创的:

  • 从trimap的未知区域中裁出320×320的块(毕竟只有未知区域是我们要处理的)
  • 将图像随机裁切后resize为320×320
其他
  • 用到的trimap是由gt alpha matte随机膨胀得到的
  • encoder由VGG-16的前14层初始化
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值