---要約

1. 画像のかすみ除去とディレーニンのための GCANet
ゲート コンテキスト アグリゲーション ネットワーク
この
ここに画像の説明を挿入
ここに画像の説明を挿入
論文の最も重要な貢献は次の 2 つです:
元の拡張畳み込みを置き換えるために使用されるスムーズ拡張畳み込み、グリッド アーティファクト (グリッド アーティファクト) の除去に
使用されるゲート フュージョン サブネットワーク。さまざまなレベルの特徴があり、低レベルのタスクと高レベルのタスクの両方に適しています
滑らかな拡張畳み込み (滑らかな中空畳み込み)

# SS convolution 分割和共享卷积(separate and shared convolution)
class ShareSepConv(nn.Module):
    def __init__(self, kernel_size):
        super(ShareSepConv, self).__init__()
        assert kernel_size % 2 == 1, 'kernel size should be odd'
        self.padding = (kernel_size - 1)//2
        weight_tensor = torch.zeros(1, 1, kernel_size, kernel_size)
        weight_tensor[0, 0, (kernel_size-1)//2, (kernel_size-1)//2] = 1
        self.weight = nn.Parameter(weight_tensor)
        self.kernel_size = kernel_size

    def forward(self, x):
        inc = x.size(1)
        expand_weight = self.weight.expand(inc, 1, self.kernel_size, self.kernel_size).contiguous()
        return F.conv2d(x, expand_weight,
                        None, 1, self.padding, 1, inc)


class SmoothDilatedResidualBlock(nn.Module):
    def __init__(self, channel_num, dilation=1, group=1):
        super(SmoothDilatedResidualBlock, self).__init__()
        self.pre_conv1 = ShareSepConv(dilation*2-1)
        self.conv1 = nn.Conv2d(channel_num, channel_num, 3, 1, padding=dilation, dilation=dilation, groups=group, bias=False)
        self.norm1 = nn.InstanceNorm2d(channel_num, affine=True)
        self.pre_conv2 = ShareSepConv(dilation*2-1)
        self.conv2 = nn.Conv2d(channel_num, channel_num, 3, 1, padding=dilation, dilation=dilation, groups=group, bias=False)
        self.norm2 = nn.InstanceNorm2d(channel_num, affine=True)

    def forward(self, x):
        y = F.relu(self.norm1(self.conv1(self.pre_conv1(x))))
        y = self.norm2(self.conv2(self.pre_conv2(y)))
        return F.relu(x+y)

	gates = self.gate(torch.cat((y1, y2, y3), dim=1))
        gated_y = y1 * gates[:, [0], :, :] + y2 * gates[:, [1], :, :] + y3 * gates[:, [2], :, :]
        y = F.relu(self.norm4(self.deconv3(gated_y)))
        y = F.relu(self.norm5(self.deconv2(y)))
        if self.only_residual:
            y = self.deconv1(y)
        else:
            y = F.relu(self.deconv1(y))

2. MSBDN
マルチスケール ブースト デヘイジング ネットワーク (高密度フィーチャ フュージョン付き) には、
高密度フィーチャ フュージョンを備えたマルチスケールの強化されたかすみ除去ネットワークがあります
ここに画像の説明を挿入
**DFF: **高密度フィーチャ フュージョン モジュールは、高解像度フィーチャで失われた空間情報を同時に補うことができます、非隣接機能ここに画像の説明を挿入ここに画像の説明を挿入
ここに画像の説明を挿入
記事の寄稿を使用: Unet に基づく、機能情報のマルチスケール使用
ここに画像の説明を挿入ここに画像の説明を挿入

# DFF特征模块
class Encoder_MDCBlock1(torch.nn.Module):
    def __init__(self, num_filter, num_ft, kernel_size=4, stride=2, padding=1, bias=True, activation='prelu', norm=None, mode='iter1'):
        super(Encoder_MDCBlock1, self).__init__()
        self.mode = mode
        self.num_ft = num_ft - 1
        self.up_convs = nn.ModuleList()
        self.down_convs = nn.ModuleList()
        for i in range(self.num_ft):
            self.up_convs.append(
                DeconvBlock(num_filter//(2**i), num_filter//(2**(i+1)), kernel_size, stride, padding, bias, activation, norm=None)
            )
            self.down_convs.append(
                ConvBlock(num_filter//(2**(i+1)), num_filter//(2**i), kernel_size, stride, padding, bias, activation, norm=None)
            )
            #
               if self.mode == 'iter2':
            ft_fusion = ft_l
            for i in range(len(ft_h_list)):
                ft = ft_fusion
                for j in range(self.num_ft - i):
                    ft = self.up_convs[j](ft)
                ft = ft - ft_h_list[i]
                for j in range(self.num_ft - i):
                    # print(j)
                    ft = self.down_convs[self.num_ft - i - j - 1](ft)
                ft_fusion = ft_fusion + ft     
# DFF解码模块
class Decoder_MDCBlock1(torch.nn.Module):
    def __init__(self, num_filter, num_ft, kernel_size=4, stride=2, padding=1, bias=True, activation='prelu', norm=None, mode='iter1'):
        super(Decoder_MDCBlock1, self).__init__()
        self.mode = mode
        self.num_ft = num_ft - 1
        self.down_convs = nn.ModuleList()
        self.up_convs = nn.ModuleList()
        for i in range(self.num_ft):
            self.down_convs.append(
                ConvBlock(num_filter*(2**i), num_filter*(2**(i+1)), kernel_size, stride, padding, bias, activation, norm=None)
            )
            self.up_convs.append(
                DeconvBlock(num_filter*(2**(i+1)), num_filter*(2**i), kernel_size, stride, padding, bias, activation, norm=None)
            )
# 
        if self.mode == 'iter2':
            ft_fusion = ft_h
            for i in range(len(ft_l_list)):
                ft = ft_fusion
                for j in range(self.num_ft - i):
                    ft = self.down_convs[j](ft)
                ft = ft - ft_l_list[i]
                for j in range(self.num_ft - i):
                    ft = self.up_convs[self.num_ft - i - j - 1](ft)
                ft_fusion = ft_fusion + ft
                # SOS
                res8x = self.dense_4(res8x) + res8x - res16x 
                self.dense_4 = nn.Sequential(
                ResidualBlock(128),
                ResidualBlock(128),
                ResidualBlock(128)
        )

3. 4kDehazing
超高精細画像かすみ除去マルチガイド双方向
学習による
ここに画像の説明を挿入ここに画像の説明を挿入ここに画像の説明を挿入

ここに画像の説明を挿入ここに画像の説明を挿入


    def forward(self, x):
        
        x_u= F.interpolate(x, (320, 320), mode='bicubic', align_corners=True)
        
        x_r= F.interpolate(x, (256, 256), mode='bicubic', align_corners=True)
        coeff = self.downsample(self.u_net(x_r)).reshape(-1, 12, 16, 16, 16) 
              
        guidance_r = self.guide_r(x[:, 0:1, :, :])
        guidance_g = self.guide_g(x[:, 1:2, :, :])
        guidance_b = self.guide_b(x[:, 2:3, :, :])
        
        slice_coeffs_r = self.slice(coeff, guidance_r)
        slice_coeffs_g = self.slice(coeff, guidance_g) 
        slice_coeffs_b = self.slice(coeff, guidance_b)   
        
        x_u = self.u_net_mini(x_u)
        x_u = F.interpolate(x_u, (x.shape[2], x.shape[3]), mode='bicubic', align_corners=True)   
        
        output_r = self.apply_coeffs(slice_coeffs_r, self.p(self.r_point(x_u)))
        output_g = self.apply_coeffs(slice_coeffs_g, self.p(self.g_point(x_u)))
        output_b = self.apply_coeffs(slice_coeffs_b, self.p(self.b_point(x_u)))
        
        output = torch.cat((output_r, output_g, output_b), dim=1)
        output = self.fusion(output)
        output =  self.p(self.x_r_fusion(output) * x - output + 1)
 
 # 分三通道处理
 class ApplyCoeffs(nn.Module):
    def __init__(self):
        super(ApplyCoeffs, self).__init__()
        self.degree = 3

    def forward(self, coeff, full_res_input):
        R = torch.sum(full_res_input * coeff[:, 0:3, :, :], dim=1, keepdim=True) + coeff[:, 3:4, :, :]
        G = torch.sum(full_res_input * coeff[:, 4:7, :, :], dim=1, keepdim=True) + coeff[:, 7:8, :, :]
        B = torch.sum(full_res_input * coeff[:, 8:11, :, :], dim=1, keepdim=True) + coeff[:, 11:12, :, :]
        result = torch.cat([R, G, B], dim=1)
       
        
        return result

補足:
双方向フィルタリングの速度が非常に遅い -> 高速化、双方向メッシュ。
まず第一に、双方向グリッドは本質的にデータ構造であることは明らかです。

ここに画像の説明を挿入

単一チャネルのグレー値を例にとると、バイラテラル グリッドは、画像の 2 次元の空間領域情報と 1 次元のグレー レベル情報を組み合わせたもので、3D 配列とみなすことができます。
簡単な例を挙げると、フィルター/スムージング用のブラシがあるとします。このブラシを特定の位置 ( x , y ) (x,y)(x ,y) で使用すると、対応して 3D 双方向グリッド ( x , y , E ( x , y ) ) (x,y,E(x,y))(x,y,E(x,y )) クリックした点に対応する位置に点が表示されます2D画像上でEEEE。このブラシの移動により、3D バイラテラル空間内の 3 次元がガウス平滑化されます。そのため、平坦な領域では、グレー レベルの変化が少ない場合、2 次元平面に沿ってガウス平滑化を実行することは、画像がガウス フィルタ処理されたことと同等になります。 ; 境界領域では、グレースケールが大きく変化し、ブラシのガウス減衰範囲により境界の反対側の値がイメージ化されないため、境界が保持されます。

画像上の点をクリックし、それを 3D バイラテラル空間に投影するこの操作をスプラットと呼びます。
ブラシは 3D バイラテラル空間でブラシをかけられましたが、フィルタリングされた画像を再構成するにはどうすればよいでしょうか? バイラテラル空間での補間はスライスと呼ばれます。
簡単にまとめると、バイラテラル フィルタリングは、空間領域のカラー ドメインの情報を考慮し、包括的な重み付けでフィルタリングすることとして簡単に理解できますが、バイラテラル フィルタリングの重み付けの式に従って直接計算を実行すると、速度の点で不安になることが多いため、提案されたバイラテラルフィルタリングをバイラテラルグリッド上でシミュレートするというアイデアは、色域の情報を3次元で考慮して高速化することができます。
高速バイラテラル フィルタリングのプロセスは次のように簡単に説明されます: スプラット/ブラー/スライス。これは、画像上でサンプリング操作を実行し、それを 3D グリッドに投影し、3D 上でフィルタリングを実行し、それぞれ ( x 、 y ) を補間します。 (x,y)(x,y) は、フィルタリングされた画像を再構成します。

おすすめ

転載: blog.csdn.net/weixin_44021553/article/details/123733650