UNet-RCAN 复现
UNet-RCAN
项目信息
本文提出了一种UNet结合RCAN的网络结构,UNet网络模型主要负责进行弱光图像恢复进行数据填充,RCAN通道注意力模块负责进行将UNet的填充的数据进行清晰和修复伪影
- 论文题目:Denoising fast super-resolution STED microscopy with UNet_RCAN
- 代码地址:https://github.com/vebrahimi1990/UNet_RCAN_Denoising
网络框架
UNet-RCAN模型中将残差链接更换成了CAB模块进行链接,CAB是一种通道注意力机制,能够提取图片中重要的信息,此外本模型还拥有两个输出output-1(UNet)和output-2(RCAN)通过设置相同的损失和优化器将模型的两个模块进行跟新
损失函数
模型采用了符合损失函数loss-1和loss-2,loss-1负责对图像误差进行计算loss-2利用卷积核计算图像之间的平缓,防止过平滑
loss-1
1
2
3
4
5
6
7
8def ch_loss_2D(pred, gt):
norm = tf.norm(pred - gt, axis=(1, 2))
norm = tf.squeeze(norm)
norm = tf.pow(norm, 2)
norm = norm / (256 * 256) + 1e-6
norm = tf.pow(norm, 0.5)
c_loss = tf.math.reduce_mean(norm)
return c_lossloss-2
1
2
3
4
5
6
7def edge_loss_2D(pred, gt):
kernel = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])
kernel = kernel.reshape((3, 3, 1, 1))
pred = tf.nn.conv2d(pred, kernel, strides=[1, 1, 1, 1], padding='VALID')
gt = tf.nn.conv2d(gt, kernel, strides=[1, 1, 1, 1], padding='VALID')
e_loss = ch_loss_2D(pred, gt)
return e_loss最终的损失函数为
loss = c_loss + 0.05 * e_loss
其中0.05是经验函数
优化器
优化器采用了默认Adam优化
复现
由于在tensorflow框架下复现难度极大,将整个模型进行重构到pytorch框架下进行训练
优化器设置
为了实现两个模块单独跟新
1 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 楚天!