UNet-RCAN

项目信息

本文提出了一种UNet结合RCAN的网络结构,UNet网络模型主要负责进行弱光图像恢复进行数据填充,RCAN通道注意力模块负责进行将UNet的填充的数据进行清晰和修复伪影

  1. 论文题目:Denoising fast super-resolution STED microscopy with UNet_RCAN
  2. 代码地址:https://github.com/vebrahimi1990/UNet_RCAN_Denoising

网络框架

UNet-RCAN模型中将残差链接更换成了CAB模块进行链接,CAB是一种通道注意力机制,能够提取图片中重要的信息,此外本模型还拥有两个输出output-1(UNet)和output-2(RCAN)通过设置相同的损失和优化器将模型的两个模块进行跟新
Architecture.png

损失函数

模型采用了符合损失函数loss-1和loss-2,loss-1负责对图像误差进行计算loss-2利用卷积核计算图像之间的平缓,防止过平滑

  1. loss-1

    1
    2
    3
    4
    5
    6
    7
    8
    def 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_loss
  2. loss-2

    1
    2
    3
    4
    5
    6
    7
    def 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