本文已参与「新人创作礼」活动,一起开启创作之路。

实验室算力太垃圾,我想白嫖V100算力。现初次尝试使用Paddle框架进行torch框架代码的重构

如果你想白嫖V100, 这个link我的邀工商银行请码,我们可以一起获得更多额外的算力

WDNet的Paddle复现-用于可见水印去除

写在前面

关于Paddle的资料不如Torch和Tensorflow那么多,初始化电脑时出现问题Goole上边也搜不到什么。百度上面的资料也参差不齐,因此最高效的查资料的方式是去Paddle的论坛中,找对应的APItensorflow菜鸟教程或者去论坛中,以及一些PaddleGo论文复现的群

  • Paddle 论坛
  • Paddle像素画生成器 API文档

1. WDN架构师证书et架构简述

WDNet主要是用于可见水印去除的,该网络由一个生成器和一个鉴别器构成。

  • 生成器是像素由一个U-net作为Backbone,U-net进行编解码之后,tensorflow1.0和2.0区别进行了对水印掩膜的分割任务、对水印像素的重构映射、对透明度的重构映射。通过这3个结果,初步得到去除水印的结果,接像素射击下载着进入第二个阶段架构图怎么画进行精细化的去除,该部分是由Resblocks构成的,得到最终的去除结果。

  • 鉴别器是采用的CGAN的鉴别器,以【水印图像,无水像素涂色印图像(label)】作为输入像素生存者2,或者以【预测的水印图像,无水印图像(label)】作为输入进行鉴别训练。

WDNet的Paddle复现-用于可见水印去除

2. 复现

2.1 常见的API的对照表

详情参照:PyTorch-Pad架构师证书dlePaddle API映射表

在对论文进行重构时像素游戏,以下列出我在复现时最常用映射的API,有些是在API文档直接看不到的

Torch Paddle
torch.nn.Modul像素工厂e pTensorFlowaddle.nn.Layer
t初始化电脑时出现问题未进行更改orch.nn.functional paddle.nn.functionaltensorflow菜鸟教程
torch.cat paddle.c工商银行oncat
torctensorflow1.0和2.0区别h.optim paddle.optimizer
torch.Tensor paddle.to_tensor
torch.size() paddle.shape
torch.load paddle.load
.zero_grad() .clear_gradients()
torch.no_grad() paddle.no_grad()
torchvision.models paddle.vision.models
.requir架构是什么意思es_grad = True .stop_gradient = False

还有对各个组件层参数进行的初始化weight_init像素勇士大创造攻略

Paddle代码

from paddleseg.cvlibs import param_init
def weight_init(Layer):
    for n, m in Layer.named_children():
        if isinstance(m, nn.Conv2D):
            param_init.normal_init(m.weight, mean=0.0, std=0.02)
        elif isinstance(m, nn.BatchNorm2D):
            param_init.normal_init(m.weight, mean=1.0, std=0.02)
            param_init.constant_init(m.bias, value=0)

Torch代码

def weight_init(m):
    if isinstance(m, nn.Conv2d):
        nn.init.normal_(m.weight.data, 0.0, 0.02)
    elif isinstance(m, nn.BatchNorm2d):
        nn.init.normal_(m.weight.data, 1.0, 0.02)
        nn.init.constant_(m.bias.data, 0)

2.2 一些评价指标计算

衡量指标主要是PSNR和S架构师工资SIM

  • PSNR计算

一定要考虑输入图像的像素区间是架构是什么意思【0-255】还是【0-1】还是【-1,1】,要做对应的转换

from paddle.nn import functional as F
psnr = 10 * paddle.log10(pixelmax / F.mse_loss(pred, GT, reduction="mean")).item()

其中p像素射击ixelmax是输入图像tensorflow环境搭建像素上限值,是255或者1 F.mse_loss算的的是一个均方误差

  • SSIMGo计算

因为手动构建代码较为复杂,因此使用相应的库

from paddle_msssim import SSIM
self.ssim = SSIM(data_range=1.0)
ssim = self.ssim(pred, GT).item()

3. DEMO

重构的代码正在训练;

现成的Torch代码,可以参照论文作者的代码