pytorchが習得しなければならない4つの境界パディング方法

 

畳み込みニューラルネットワークのコアモジュールとして、畳み込み演算では、計算プロセス画像の「エッジピクセル」の畳み込み法を考慮する必要があります情報を見ると、「畳み込み前の境界塗りつぶし」または「畳み込み後の境界塗りつぶし」を使用できることがわかります。同時に、境界塗りつぶしの特定の方法には、一定の塗りつぶし、ゼロの塗りつぶし、ミラーの塗りつぶし、繰り返しの塗りつぶしが含まれます。 。

さまざまなパッドを詳細に分析する前に、2dTensorを作成して、後続の充填操作をテストします。

x = torch.Tensor([[1, 2], [3, 4]])

作成されたテンソル値は1、2、3、および4です。

 

1.ゼロパディングZeroPad2d

最も一般的に使用されるのはnn.ZeroPad2dで、テンソルの境界パディングに0を使用します。テンソルの4方向のパディング番号を指定できます。たとえば、左に1dim、右に2dim、3dimを追加します。次のように、上部に4dim、下部に4dimを指定します。つまり、paddinパラメーターを(1、2、3、4)として指定します。

pad = nn.ZeroPad2d(padding=(1, 2, 3, 4))
y = pad(x)

得られたyは、次の図に示すように、(1、2、3、4)による4方向のxのゼロパッド演算です。

 

2.一定充填ConstantPad2d

ゼロパディングは、定数パディングの特殊なケースです。定数パディングnn.ConstantPad2d()では、パディングに使用する定数値指定する必要があります。パディングは、パディングの数です。ここでは、4方向すべてのパディングが1dimとして選択されています。つまり、パディングは(1、1、1、1)であり、コードは次のとおりです。

pad = nn.ConstantPad2d(padding=(1, 1, 1, 1), value=666)
y = pad(x)

得られたyは、4週間すべてで666で満たされます。

 

3.ミラー充填ReflectionPad2d

以前の固定値の塗りつぶしと比較して、ミラー塗りつぶし方法はより良い畳み込み結果を得る可能性があります。ミラーの塗りつぶしはnn.ReflectionPad2dにカプセル化されており、その塗りつぶし方法は、反対方向の下部要素の値を使用した新しいdim値です。コードは次のとおりです。

pad = nn.ReflectionPad2d(padding=(1, 1, 1, 1))
y = pad(x)

次の図の結果から、最初の行と最初の列の4は右下隅の元の4であり、最初の行と2番目の列の3は下の元の3であることがわかります。左の角:

 

4.ReplicationPad2dを埋めるために繰り返します

繰り返し塗りつぶしとは、画像のエッジピクセル値を繰り返すことを意味し、新しい境界ピクセル値はエッジピクセル値で展開され、 nn.ReplicationPad2d()にカプセル化されます。4方向の塗りつぶし量も指定できます。

pad = nn.ReplicationPad2d(padding=(1, 1, 1, 1))
y = pad(x)

下の図で得られた結果からわかるように、塗りつぶし後の境界ピクセル値は、元の1、2、3、および4のコピーです。

 

総括する:

[1]によると、pytorchが畳み込み前と畳み込み後のどちらでパディングされているかという問題については、畳み込み前の塗りつぶしである必要があります。上記の薄暗いことは次元を意味するものではなく、追加する適切な単語の説明が見つかりませんでした。 「行または列」は薄暗く使用されます。小さい画像の場合は塗りつぶし方法の選択がより重要ですが、大きい画像の場合は、塗りつぶし方法が大きな影響を与えない場合があります。

参照:

【1】https://discuss.pytorch.org/t/d

おすすめ

転載: blog.csdn.net/ch206265/article/details/107161456