空間グループごとの強化:畳み込みネットワークにおける意味的特徴学習の改善

紙のリンク:https://arxiv.org/pdf/1905.09646.pdf

コードリンクhttps://github.com/implus/PytorchInsight

畳み込みニューラルネットワーク(CNN)は、さまざまなレベルと部分でセマンティックサブ機能を収集することにより、複雑なオブジェクトの機能表現を生成します。これらのサブ機能は通常、さまざまなセマンティックエンティティを表すグループ化された形式で各レイヤーの機能ベクトルに分散できます。ただし、これらのサブ機能のアクティブ化は、多くの場合、同様のパターンとノイズの多い背景によって空間的に影響を受け、誤ったローカリゼーションと識別につながります。本論文では、各意味グループの各空間位置に注意因子を生成することにより、各サブ機能の重要性を調整できる空間グループ拡張(SGE)モジュールを提案し、個々のグループを自律的に拡張できるようにします。表現を学習し、抑制します。ノイズの可能性があります。注意係数は、各グループ内のグローバル機能記述子とローカル機能記述子の類似性によってのみ導かれるため、SGEモジュールの設計は非常に軽量で、追加のパラメーターや計算はほとんどありません。

1.この記事の紹介:

ここに画像の説明を挿入
特徴の各セットを空間的に堅牢で均一に分散させるために、注意マスクを使用してすべての場所で特徴ベクトルをスケーリングすることにより、各特徴セット内の空間拡張メカニズムをモデル化します。このアテンションマスクは、起こりうるノイズを抑制し、正しいセマンティック特徴領域を強調するように設計されています。他の一般的な注意方法とは異なり、著者は注意マスクの生成ソースとして、各場所でのグローバル統計機能とローカル統計機能の類似性を使用します。上記の単純で効果的なメカニズムは、このペーパーの空間グループ化拡張(SGE)モジュールです。これは非常に軽量であり、本質的に追加のパラメーターや計算をほとんど必要としません。SGEモジュールを導入した後、機能マップの分布の変化と、グループ間のアクティベーション値の分散の統計を調べました。結果は、SGEがグループ内のさまざまなセマンティックサブ機能の空間分布を大幅に改善し、統計的に大きな分散を生成することで、セマンティック領域での機能学習を強化し、ノイズと干渉を圧縮することを示しています。
著者は、チャネルC、H×W畳み込み特徴マップを検討し、チャネル次元に沿ってそれらをGグループに分割します。一般性を失うことなく、グループは最初に個別に検査されます(図1の下のブラックボックスを参照)。次に、空間内のグループの各位置にはベクトル表現があります。つまり、x ={ x1…mx_1…m バツ1m }、xi∈rc/gx_i∈r^{c / g}バツ私はrc / g、m=H×W。概念的には、著者はさらに、ネットワークが学習するにつれて、このグループ化が特定のセマンティック応答(犬の目など)を徐々にキャプチャするという仮説を立てています。このグループ空間では、理想的には、目の位置で強い応答を持つ特徴(複数の目の領域でより長いベクトル長と同様のベクトル方向を持つ特徴)を取得できますが、他の場所ではほとんどアクティブ化されず、ゼロベクトルになります。ただし、避けられないノイズや同様のパターンが存在するため、CNNが均一に分散された特徴応答を取得することはしばしば困難です。この問題に対処するために、著者は、空間全体の特徴がノイズによって支配されていないため、グループ空間全体の全体的な情報を活用することによって、主要な領域の意味的特徴の学習をさらに強化することを提案します(そうでない場合、モデルはから何も学習しませんグループ)。したがって、空間平均関数F gp(⋅)F_ {gp}()で求めることができますFgp _は、グローバル統計機能を使用して、学習された表現のセットのセマンティックベクトルを近似します。
ここに画像の説明を挿入
次に、グローバル機能を使用して、各機能の対応する重要な係数を、グローバルセマンティック機能を特定の内積で測定する単純な内積で取得できます。エクステントGとローカル機能xix_iバツ私は間の類似性。したがって、位置ごとに、次のように定義できます
ここに画像の説明を挿入
。C i C_iC私は∥g∥∥xi∥cos(θi)\ lVert g \ lVert \ lVert x_i \ lVert cos(θ_i)として展開することもできます。∥g∥∥x _ _ _ _私は∥cos θ _ _ _私は),其中 θ i θ_i θ私は x i x_i バツ私はとgの間の角度。これは、ベクトルの長さ(∥xi∥\ lVert x_i \ lVert∥x _私は)と方向(すなわち、θiθ_iθ私は)はgの特徴に近く、より大きな初期係数を取得する可能性が高くなります。異なるサンプル間の係数の大きさの偏りを防ぐために、空間でcを標準化します
ここに画像の説明を挿入
。ϵ \ epsilonϵ(通常は1e-5)は、数値安定性の定数です。ネットワークに挿入された正規化が、係数xi ^ \ hat{x_i}ごとに恒等変換を表すことができるようにするためバツ私は^正規化された値をスケーリングおよび移動するために、パラメーターγ、βのペアが
ここに画像の説明を挿入
導入されています。このモジュールで導入されるパラメーターはγ、βのみです。単一のSGEユニットでは、γ、βの数はグループの数(G)と同じであり、通常は32または64のオーダーであり、ネットワーク全体の数百万のパラメーターと比較して基本的に無視できます。
ここに画像の説明を挿入
上記のプロセスは次のように要約されます。

まず、特徴がグループ化され、特徴の各グループがグローバルプーリング後の特徴と空間的にドット積(類似)されて初期アテンションマスクが取得され、平均値がアテンションマスクから差し引かれます。標準偏差は正規化されます。 2つのスケーリングオフセットパラメータを使用すると、正規化操作を復元してから、シグモイドを通過して最終的なアテンションマスクを取得し、元のフィーチャグループの各位置でフィーチャをスケーリングできます。
実験結果は以下のとおりです。
ここに画像の説明を挿入

ここに画像の説明を挿入

  1. グループパラメータは中程度であり、トップ1のパフォーマンスが最も高くなる可能性があります。

  2. 初期化スケーリングパラメータを0に初期化することをお勧めします。目的は、アテンションが有効になる前に、ネットワークにアテンションからしばらく学習させることです。最初に基本的な意味表現を学習し、次にパラメータのスケーリング方法を学習します。最急降下法を介して。0にならなくなったら、徐々に注意を向けます。

  3. 正規化は非常に必要であり、削除することはできません。
    コードの実装:

class SpatialGroupEnhance(nn.Module):
    def __init__(self, groups = 64):
        super(SpatialGroupEnhance, self).__init__()
        self.groups   = groups
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.weight   = Parameter(torch.zeros(1, groups, 1, 1))
        self.bias     = Parameter(torch.ones(1, groups, 1, 1))
        self.sig      = nn.Sigmoid()

    def forward(self, x): # (b, c, h, w)
        b, c, h, w = x.size()
        # 将通道分组 (b*g , c/g, h, w)
        x = x.view(b * self.groups, -1, h, w) 
        # 将分组后的特征图进行平均池化后进行点积
        xn = x * self.avg_pool(x)
        xn = xn.sum(dim=1, keepdim=True)
        t = xn.view(b * self.groups, -1)
        # 进行标准化
        t = t - t.mean(dim=1, keepdim=True)
        std = t.std(dim=1, keepdim=True) + 1e-5
        t = t / std
        t = t.view(b, self.groups, h, w)
        # 进行权重加权
        t = t * self.weight + self.bias
        t = t.view(b * self.groups, 1, h, w)
        x = x * self.sig(t)
        x = x.view(b, c, h, w)
        return 

おすすめ

転載: blog.csdn.net/qq_52302919/article/details/123704711