| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Background Matting V2算法讲解 -> 正文阅读 |
|
[人工智能]Background Matting V2算法讲解 |
参考论文:Real-Time High-Resolution Background Matting,我也已经发布过Real-Time High-Resolution Background Matting的论文翻译。 1、问题定义Background Matting v2(以下简称BGM2),一种实现人像抠图的算法,首先我们来看人像抠图的核心实现思想。 上一代BGM1的方案是直接预测前景概率,或者再加上前景 ,通过这种方式合成的新图片会有比较明显的颜色溢出问题。如下图的眼镜内区域留下残留颜色。而使用前景残差作为预测目标,不仅可以加速收敛,还可以解决颜色溢出问题。(收敛问题下文会讲) BGM2模型为了处理这个问题,提出了Base网络与Refine网络组成的结构。其中基础网络Base,用于快速的在降采样的图像上得到一个低分辨率的结果,微调网络Refine,是在Base网络的基础上,在高分辨下对选定的Patch进行进一步优化。如下图: 2、网络结构我们先讨论算法模块的实现,然后再搭建网络模型。 给定一张输入图像 I I I和背景图像 B B B,首先将其降采样 c c c倍,得到 I c I_c Ic?和 B c B_c Bc?。 G b a s e G_{base} Gbase?取 I c I_c Ic?和 B c B_c Bc?作为输入,输出是降采样后同等尺寸的前景概率 α c α_c αc?、前景残差 F c R F_c^R FcR?、误差预测图 E c E_c Ec?和一个32通道的隐藏特征 H c H_c Hc?。 然后,细化网络 G r e f i n e G_{refine} Grefine?利用 H c H_c Hc?、 I I I和 B B B,只在预测误差 E c E_c Ec?较大的区域,对 α c α _c αc? 和 F c R F_c^R FcR?进行细化,并在原始分辨率下产生α和前景残差 F R F^R FR。 2.1 Base网络BGMv2的网络结构,由骨干网络,空洞空间金字塔池化和解码器三部分组成: 骨干网络:可以采用主流的卷积网络作为,作者开源的模型包括ResNet-50,ResNet-101以及MobileNetV2,用户可以根据速度和精度的不同需求选择不同的模型; 空洞空间金字塔池化:(Atrous Spatial Pyramid Pooling,ASPP)是由DeeplabV3提出并在实例分割领域得到广泛应用的结构,人像抠图和实例分割本质上式非常接近的,因此也可以通过ASPP来提升模型准确率; 解码器:解码器是由一些列的双线性插值上采样和跳跃连接组成,每个卷积块由3×3的卷积,Batch Normalization以及ReLU激活函数组成。 如上文所说,
G
b
a
s
e
G_{base}
Gbase?的输入是
I
c
I_c
Ic?和
B
c
B_c
Bc?,输出是
α
c
α_c
αc?、
F
c
R
F_c^R
FcR?、
E
c
E_c
Ec?和
H
c
H_c
Hc?。其中的误差预测图Error Map
E
c
E_c
Ec?的Ground Truth是
E
?
=
∣
α
?
α
?
∣
E^?=|α?α^?|
E?=∣α?α?∣,Error Map是一张人像轮廓图,通过对Error Map的优化,可以使得BGMv2有更好的边缘检测效果。 2.2 Refine网络
G
r
e
f
i
n
e
G_{refine}
Grefine?的输入是在根据误差预测图
E
c
E_c
Ec?提取的 k 个补丁快(patches)上进行精校,k 可以提前指定选择 top-k 个或者根据阈值筛选得到若干个(用户也可以根据速度和精度的平衡自行设置 k 或者阈值的具体值。对于缩放到原图的
1
c
\frac{1}{c}
c1?的
E
c
E_c
Ec?,我们首先将其上采样到原图的
1
4
\frac{1}{4}
41?,那么
E
4
E_4
E4?中的一个点就相当于原图上一个4×4的块,那么相当于我们要优化的像素点的个数共有16k个。
最后我们将降采样的 α c α_c αc?、 F c R F_c^R FcR?再上采样到原图大小,再将Refine优化后的补丁块替换到原图中,便得到了最终的结果。 3、训练3.1 损失函数根据上面介绍的输入输出,我们可以把Base网络抽象为
G
base?
(
I
c
,
B
c
)
=
(
α
c
,
F
c
R
,
E
c
,
H
c
)
G_{\text {base }}\left(I_{c}, B_{c}\right)= \left(\alpha_{c}, F_{c}^{R}, E_{c}, H_{c}\right)
Gbase??(Ic?,Bc?)=(αc?,FcR?,Ec?,Hc?),它的损失函数是由
α
c
,
F
c
R
,
E
c
\alpha_{c}, F_{c}^{R}, E_{c}
αc?,FcR?,Ec?三部分组成,损失函数表示为式(2): Refine网络可以抽象为
G
refine?
(
α
c
,
F
c
R
,
E
c
,
H
c
,
I
,
B
)
=
(
α
,
F
R
)
{G_{{\text{refine }}}}\left( {{\alpha _c},F_c^R,{E_c},{H_c},I,B} \right)=(\alpha ,{F^R})
Grefine??(αc?,FcR?,Ec?,Hc?,I,B)=(α,FR),它的损失函数由α和
F
R
F^R
FR组成,表示为式(3): 其中
L
α
\mathcal{L}_{\alpha}
Lα?是由前景概率α计算得到的特征向量,它包含α本身的L1损失和α的Sobel梯度
?
α
?α
?α的L1损失,如式(4): 其中 α ? α^? α?为α的Ground Truth。图像梯度是指,图像强度或者颜色的方向变化率,能够更好的衡量图像边缘的清晰度,关于图像梯度的计算方法见附录2。 损失函数的第二项
L
F
\mathcal{L}_{F}
LF?计算的是前景损失,它先使用式(1)由
F
R
F^R
FR得到
F
F
F,然后再在
α
?
>
0
α^? >0
α?>0的地方计算L1损失,表示为式(5):
L
b
a
s
e
\mathcal{L}_{base}
Lbase?的第三项是关于Error Map的L2损失,它的作用是鼓励放大
α
α
α和
α
?
α^?
α?直接的差值,表示为式(6): 3.2 训练方式由于文章包含多个模型和多个不同特征的数据集,因此我们这里介绍一下它的训练步骤:
4、总结BGM2性能的提升得益于重新设计的模型和采集的两个高分辨率的数据集。 G b a s e G_{base} Gbase? 的结构参考了DeepLab v3,而 G r e f i n e G_{refine} Grefine?则通过Error Map选取了一些难以处理的像素样本对其精校,提升了BGM2在细节上的表现力。 论文文献的附录
附录1:深度学习的网络基础结构,以Resnet举例(还没写,明天跟老师商量一下怎么写) 附录2:图像梯度的计算方法一幅清晰的图像往往拥有强烈的灰度变化和层次感,而一幅模糊的图像则灰度变化不明显。而图像梯度往往就是用来衡量图像灰度的变化率的。图像可以看做二维离散函数,而图像梯度便是对这个二维离散函数的求导。 图像的梯度向量为
?
f
=
[
?
f
?
x
,
?
f
?
y
]
?f = [\frac{?f}{?x},\frac{?f}{?y}]
?f=[?x?f?,?y?f?]。那么图像的梯度值则可以表示为式(a. 6). |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 20:36:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |