5

ここに画像の説明を入力Pytorch 0.4.0 による UNet のような CNN アーキテクチャを使用して画像セグメンテーションを行っています。最終的なセグメンテーション結果では、フォアグラウンドを 1、バックグラウンドを 0 としてマークします。事前にトレーニングされた VGG の特徴抽出器をエンコーダとして使用するため、エンコーダー出力を何度もアップサンプリングします。

これらの異なる形状の黒い部分は、デコンボリューション レイヤーが原因であると思われます。デコンボリューション レイヤーは、公式ドキュメントの入力ピクセル間に (s-1) ゼロを追加すると言われています。デコンボリューション レイヤーのハイパーパラメーターを以下に示します。

kernel_size=3、stride=2、padding=1、output_padding=1

(output_padding は、たとえば、入力サイズが 40*30 のスキップ接続機能のサイズに合わせて使用​​されます。式:out=s(in-1) を使用した計算の下で、1 つのデコンボリューション レイヤーでサイズを 2 回拡大します。 +k-2p, サイズを維持するためにパディング 1 と出力パディング 1 を使用する必要があります。

黒い格子を生成する理由が気になります.それらは格子状または正方形の部分のように見えます.そしてそれを解決する方法.さらに、すべての deconv レイヤーのハイパーパラメータを 1 つの均一に調整するか、個別に変更する必要がありますか?

環境:Ubuntu 16.04、Pytorch 0.4.0、GTX 1080Ti、アップサンプリングのアーキテクチャは3つのdeconvレイヤーで、次々と。

アップデート

deconv ハイパーパラメータを変更した後 (画像セグメンテーション結果のノイズに触発されて使用)

kernel_size=4、ストライド=2、パディング=1

したがって、出力パディングを回避し、サイズを満たすために.しかし、100エポックの後、私は同様の問題に遭遇しました.

さらに 30 エポックのトレーニングを行うと、次のようになります。ここに画像の説明を入力

黒い点が散らばっているように見えます.これらの黒い点はその部分を変えて別の部分にジャンプしているようです.なぜそれが起こるのかわかりません.ネットワークのハイパーパラメータを変更する方法がわかりません.
self.conv1=Basic(1024,512,kernel_size=3,stride=1,padding=1)
        self.conv2=Basic(512,512,kernel_size=3,stride=1,padding=1)
        self.deconv1=Basic(512,256,kernel_size=4,stride=2,conv=False,padding=1)
        self.deconv2=Basic(256,128,kernel_size=4,stride=2,conv=False,padding=1)
        self.deconv3=Basic(128,64,kernel_size=4,stride=2,conv=False,padding=1)
        #output  480*640 segmap
        self.conv4=Basic(64,2,kernel_size=1,stride=1)
        # self.avgpool=nn.AvgPool2d(kernel_size=2,stride=2)

    def forward(self, input):
        input=self.conv1(input)
        input=self.conv2(input)
        input=self.deconv1(input)
        input=self.deconv2(input)
        input=self.deconv3(input)
        input=self.conv4(input)
        # print(input.shape)
        #a channel-wise probability map
        raw=input
        return raw`
4

0 に答える 0