水印去除(基于nosie2noise优化 代码+模型)

github链接

1.感受野计算:

r_{n}:本层感受野;

r_{n-1}:上层感受野;

s_{i}:第i层卷积或池化的步长

k:本层卷积核大小

2.空洞卷积卷积核计算:K=k+(k-1)(r-1),k为原始卷积核大小,r为空洞卷积参数空洞率,带入上式即可计算空洞卷积感受野;

3.针对noise2nosie进行改造:

(1).加深网络,原始结构感受野只有192,而要去除的水印尺度比较大,将原始结构后两层网络改为空洞卷积,dilated rate 设置为6,将感受野放大为672,更加适合640*640尺度推理,这样更能看清全局噪声,同时原图信息丢失不是很严重;
(2).修改loss函数,随着epoch增加放大loss,刻意去优化困难样本。


class L0Loss(nn.Module):
    """High dynamic range loss."""
    def __init__(self, eps=1e-8, nb_epochs=10):
        """Initializes loss with numerical stability epsilon."""

        super(L0Loss, self).__init__()
        self._eps = eps
        self.nb_epochs =  nb_epochs

    def forward(self, denoised, target, epoch):
        """Computes loss by unpacking render buffer."""
        # gamma = 2.0 * (self.nb_epochs - epoch) / self.nb_epochs
        gamma = 2.0 * (epoch+1) / self.nb_epochs
        loss = ((torch.abs(denoised - target) + self._eps) ** gamma)
        return torch.mean(loss.view(-1))

效果图:

   

缺点:

1.由于loss函数采用的是类似L2loss的,是对所有像素进行平均优化,虽然去除了水印,但同时也将图像变得平滑。

2.采用这种loss的话就是对单像素进行操作,没有考虑空间信息。

感受野计算过程:

猜你喜欢

转载自blog.csdn.net/fanzonghao/article/details/109389708