注意チャネル注意メカニズムスクイーズアンドエキサイティングネットワーク

圧搾および励起ネットワーク

リリース時期:2017

基本的な考え方

畳み込み機能のさまざまなチャネル間の関係を正確にモデル化することにより、ネットワークモデルの表現力を向上させます。
著者は、ネットワークモデルが特徴を較正できるようにするメカニズムを提案します。これにより、ネットワークはグローバル情報から価値のある特徴チャネルを選択的に増幅し、無駄な特徴チャネルを抑制できます
ここに画像の説明を挿入

ステップ

ここに画像の説明を挿入

  1. 1つ目はスクイーズ操作です。空間次元に沿って特徴圧縮を実行し、各2次元特徴チャネルを実数に変換します。この実数にはある程度グローバルな受容フィールドがあり、出力次元と入力特徴チャネルがあります。番号一致。これは、特徴的なチャネルでの応答のグローバルな分布を特徴づけ、入力に近いレイヤーがグローバルな受容野を取得できるようにします。これは、多くのタスクで非常に役立ちます。
    つまり、グローバル平均プーリングを使用して、バッチサイズ∗ C ∗ H ∗ Wバッチサイズ* C * H * Wb a t c h s i z eCHWはバッチサイズに圧縮されます∗ C ∗ 1 ∗ 1バッチサイズ* C * 1 * 1b a t c h s i z eC11

  2. 2つ目は、リカレントニューラルネットワークのゲートに似たメカニズムである励起操作です。パラメータwを介して各特徴チャネルの重みが生成されます。パラメータwは、特徴チャネル間の相関を明示的にモデル化するために学習されます。バッチサイズ
    について∗ C ∗ 1 ∗ 1バッチサイズ* C * 1 * 1b a t c h s i z eC11ベクトルは、2つの完全に接続されたレイヤーで構成されるボトルネック構造に入力され、チャネル間の相関をモデル化し、入力特徴と同じ数の重みを出力します。最初にフィーチャの寸法を入力の1/16に縮小し、次にReLuをアクティブ化した後、完全に接続されたレイヤーを介して元の寸法にアップグレードします。Fully Connectedレイヤーを直接使用する場合に比べて、これを行う利点は次のとおりです
    。1)非線形性が高く、チャネル間の複雑な相関にうまく適合できます
    。2)パラメーターと計算の量が大幅に削減されます。
    次に、S状結腸ゲートを通過して、0から1の間の正規化された重みを取得します。

  3. 最後に、再重み付け操作があります。励起の出力の重みを、特徴選択後の各特徴チャネルの重要性と見なし、次に、乗算によって前の特徴チャネルをチャネルごとに重み付けして、チャネル次元でのペアリングを完了します。オリジナルの機能の。
    つまり、元のフィーチャマップはチャネルによって重み付けされます

from torch import nn


class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)

参考記事

おすすめ

転載: blog.csdn.net/weixin_42764932/article/details/112227689