github链接
1.感受野计算:
:本层感受野;
:上层感受野;
:第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 = epsself.nb_epochs = nb_epochsdef forward(self, denoised, target, epoch):"""Computes loss by unpacking render buffer."""# gamma = 2.0 * (self.nb_epochs - epoch) / self.nb_epochsgamma = 2.0 * (epoch+1) / self.nb_epochsloss = ((torch.abs(denoised - target) + self._eps) ** gamma)return torch.mean(loss.view(-1))
效果图:
缺点:
1.由于loss函数采用的是类似L2loss的,是对所有像素进行平均优化,虽然去除了水印,但同时也将图像变得平滑。
2.采用这种loss的话就是对单像素进行操作,没有考虑空间信息。
感受野计算过程: