project website:http://www.harryyang.org/inpainting/
code:https://github.com/leehomyc/Faster-High-Res-Neural-Inpainting
参考博客:
https://www.cnblogs.com/wenshinlee/p/12444785.html
https://blog.youkuaiyun.com/weixin_42360095/article/details/89525787
模型整体框架
整体框架如上,图像修复部分被限制了,为固定的中心区域。如输入为128 x 128,则待修复区域为中心的 64 x 64
网络分2个模块:
Content Network
x
0
x_0
x0:去除了中心部分的输入(中心部分填补均值)
f
(
x
0
)
f(x_0)
f(x0):Content Network输出,大小为 64 x 64 表示待修补区域
h
(
x
,
R
)
h(x,R)
h(x,R):Ground Truth,即原图的中心区域
即一个Encode Decode结构,由网络自动学习得到中心区域。
Texture Network
x x x:即 x 0 + f ( x 0 ) x_0 + f(x_0) x0+f(x0),由content Network生成的结果补全输入后,整体做为Texture Network的输入。
其网络为基于ImageNet训练好的VGG网络,VGG只用来计算Loss用于训练Content Network。其思想为利用训练好的VGG的提取特征能力,因此只提取其中间层的特征,无需整个VGG网络。其作用看其loss就明白了。
Loss
x
~
i
+
1
=
arg
min
x
E
c
(
h
(
x
,
R
)
,
h
(
x
i
,
R
)
)
+
α
E
t
(
ϕ
t
(
x
)
,
R
ϕ
)
+
β
Υ
(
x
)
(1)
\begin{aligned} \tilde{x}_{i+1}=& \underset{x}{\arg \min } E_{c}\left(h(x, R), h\left(x_{i}, R\right)\right) \\ &+\alpha E_{t}\left(\phi_{t}(x), R^{\phi}\right)+\beta \Upsilon(x) \end{aligned}\tag 1
x~i+1=xargminEc(h(x,R),h(xi,R))+αEt(ϕt(x),Rϕ)+βΥ(x)(1)
其中
i
=
1
,
2
,
.
.
.
,
N
i = 1,2,... , N
i=1,2,...,N为多尺度修复。针对大图(512 x 512),下采样修复后在逐层上采样refine。(这个多尺度形式总觉得怪怪的)
Content Network Loss
predict 和 GT 的 L2 Loss
E
c
(
h
(
x
,
R
)
,
h
(
x
i
,
R
)
)
=
∥
h
(
x
,
R
)
−
h
(
x
i
,
R
)
∥
2
2
(2)
E_{c}\left(h(x, R), h\left(x_{i}, R\right)\right)=\left\|h(x, R)-h\left(x_{i}, R\right)\right\|_{2}^{2} \tag 2
Ec(h(x,R),h(xi,R))=∥h(x,R)−h(xi,R)∥22(2)
还可参考GAN的做法,加一个判别器 D ,去增强Content Network
L
a
d
v
(
x
,
x
g
,
R
)
=
max
D
E
x
∈
X
[
log
(
D
(
h
(
x
g
,
R
)
)
)
)
]
+
log
(
1
−
D
(
f
(
x
)
)
)
]
\begin{aligned} L_{a d v}\left(x, x_{g}, R\right)=\max _{D} E_{x \in \mathcal{X}}\left[\log \left(D\left(h\left(x_{g}, R\right)\right)\right)\right.&)] \\ +\log (1-D(f(x)))] \end{aligned}
Ladv(x,xg,R)=DmaxEx∈X[log(D(h(xg,R)))+log(1−D(f(x)))])]
最终Content Network Loss为2个Loss的加权组合
Texture Network Loss
为了让缺失部分的细节与已知部分的细节相似(进一步促使网络从已知部分的结构去生成缺失部分,如棋盘这种重复结构的图像修补应该有挺大帮助)。
以小窗口(如3x3)滑动取生成区域的特征图,去和已知区域部分的特征图匹配。选取和生成区域的特征图最相似的已知区域特征。用L2 Loss限制这2部分。
E
t
(
ϕ
t
(
x
)
,
R
)
=
1
∣
R
ϕ
∣
∑
i
∈
R
ϕ
∥
h
(
ϕ
t
(
x
)
,
P
i
)
−
h
(
ϕ
t
(
x
)
,
P
n
n
(
i
)
)
∥
2
2
(3)
\begin{array}{l} E_{t}\left(\phi_{t}(x), R\right)= \\ \frac{1}{\left|R^{\phi}\right|} \sum_{i \in R^{\phi}}\left\|h\left(\phi_{t}(x), P_{i}\right)-h\left(\phi_{t}(x), P_{n n(i)}\right)\right\|_{2}^{2} \end{array} \tag 3
Et(ϕt(x),R)=∣Rϕ∣1∑i∈Rϕ∥∥h(ϕt(x),Pi)−h(ϕt(x),Pnn(i))∥∥22(3)
n
n
(
i
)
=
arg
min
j
∈
N
(
i
)
∧
j
∉
R
ϕ
∥
h
(
ϕ
t
(
x
)
,
P
i
)
−
h
(
ϕ
t
(
x
)
,
P
j
)
∥
2
2
(4)
n n(i)=\underset{j \in \mathcal{N}(i) \wedge j \notin R^{\phi}}{\arg \min }\left\|h\left(\phi_{t}(x), P_{i}\right)-h\left(\phi_{t}(x), P_{j}\right)\right\|_{2}^{2} \tag 4
nn(i)=j∈N(i)∧j∈/Rϕargmin∥h(ϕt(x),Pi)−h(ϕt(x),Pj)∥22(4)
∣
R
ϕ
∣
|R^{\phi}|
∣Rϕ∣:用于求均值
ϕ
t
(
x
)
\phi_{t}(x)
ϕt(x):VGG网络输入
x
x
x提取的特征
P
i
P_i
Pi:以 i 为中心的一小块区域(如以坐标 i 为中心的一个 3x3区域)
h
(
ϕ
t
(
x
)
,
P
i
)
h\left(\phi_{t}(x), P_{i}\right)
h(ϕt(x),Pi):提取
ϕ
t
(
x
)
\phi_{t}(x)
ϕt(x)中
P
i
P_i
Pi区域的特征
n
n
(
i
)
nn(i)
nn(i):即已知区域里的特征,和
P
i
P_i
Pi最相似的部分。
TV Loss
平滑 loss
Υ
(
x
)
=
∑
i
,
j
(
(
x
i
,
j
+
1
−
x
i
,
j
)
2
+
(
x
i
+
1
,
j
−
x
i
,
j
)
2
)
\Upsilon(x)=\sum_{i, j}\left(\left(x_{i, j+1}-x_{i, j}\right)^{2}+\left(x_{i+1, j}-x_{i, j}\right)^{2}\right)
Υ(x)=i,j∑((xi,j+1−xi,j)2+(xi+1,j−xi,j)2)
结果
小结
- Content Network 思想直接,直接输出未知区域(周围区域 + 大量数据训练后模型的想象力)
- Texture Network 进一步匹配相似的已知区域,比较直观(人脑也是由已知去估计未知)
- 限制了只能生成图像中央的正方形区域。而且中心这么一大块区域,本身的恢复难度也很高。