CNNで受容野サイズを計算する方法
1. 序章
畳み込みニューラルネットワークの受容野は、新しいモデルを設計するとき、または既存のモデルを理解しようとするときに覚えておくと非常に役立つ重要な概念です。 それについて知ることで、関心のあるニューラルアーキテクチャの内部動作をさらに分析し、最終的な改善について考えることができます。
このチュートリアルでは、CNNの受容野とは何か、なぜそれが重要なのか、そしてそのサイズをどのように計算できるのかについて説明します。
2. 意味
では、畳み込みニューラルネットワークの受容野は実際には何でしょうか? 正式には、特定のCNNの機能が影響を受けるのは入力空間の領域です。 より非公式には、畳み込み後に機能が生成されるのはテンソルの部分です。 つまり、基本的には、データがネットワークのレイヤーを流れるときに、どこから結果が得られるかがわかります。 コンセプトをさらに明らかにするために、このイラストを見てみましょう:
この画像では、 各層に3×3カーネルを備えた2層の完全畳み込みニューラルネットワーク。 緑の領域は第2層の1ピクセルの受容野を示し、黄色の領域は第3の最終層の1ピクセルの受容野を示します。
通常、CNNがそれからどのくらいの領域をカバーするかを理解するために、最初の入力の受容野のサイズに主に関心があります。 これは、多くのコンピュータビジョンタスクで不可欠です。 たとえば、画像のセグメンテーションを考えてみましょう。 ネットワークは入力画像を受け取り、その過程でセマンティックラベルマップを構築するすべてのピクセルのクラスラベルを予測します。 ネットワークに予測を行うときに周囲のピクセルを十分に考慮する能力がない場合、いくつかの大きなオブジェクトには不完全な境界が残る可能性があります。
同じことがオブジェクト検出にも当てはまります。 畳み込みニューラルネットワークに十分な大きさの受容野がない場合、画像上の大きなオブジェクトの一部が検出されないままになる可能性があります。
3. 問題の説明
3.1. 表記
層の数が多い完全畳み込みネットワーク(FCN)を検討します。 第5層の出力機能は、として示されます。 したがって、入力画像はとして示され、最終的な出力特徴マップはに対応します。 各畳み込み層には、カーネルサイズ、ストライド、パディングの3つのパラメーター値を含む独自の構成があります。 それらをそれぞれ、、と表記します。
私たちの目標は、入力層の受容野のサイズを計算することです。 では、どうすればよいのでしょうか。 上の図をもう一度見ると、層の受容野のサイズの間にピラミッド関係のようなものが見つかるかもしれません。
ピラミッドのベースのサイズに関心がある場合は、上から下へのアプローチを使用して再帰的に説明することができます。 さらに、私たちはすでに最後の層の受容野のサイズを知っています–。 最後のレイヤーの各機能はそれ自体にのみ寄与するため、常に1に等しくなります。 残っているのは、の観点から説明する一般的な方法を見つけることです。
3.2. 簡略化した例
問題をさらに単純化して、ニューラルネットワークを1次元の畳み込みのスタックとして想像してみましょう。 ほとんどの場合、畳み込みカーネルは次元に沿って対称であるため、これは一般性を失うことを意味しません。 また、非対称カーネルを使用する場合でも、同じソリューションを次元に沿って個別に適用できます。 これが単純な1-dCNNです。
との関係を見ると、受容野のサイズが2である理由を簡単に理解できます。サイズが2のカーネルが1回適用されます。 しかし、私たちがに行くとき、物事はもう少し複雑になり始めます。
3.3. サイズ式
の観点から説明し、どこでも機能する一般的なソリューションを考え出します。 まず、上記のアーキテクチャで計算してみましょう。 良い推測の1つは、グラフにオレンジ色の矢印で示されている、でスケーリングすることです。 これは私たちを近づけますが、完全ではありません。 カーネルサイズがストライドサイズと異なる場合、少し不一致が生じるという事実を考慮していません。
この例では、黄色の矢印で示されているの不一致があります。 この不一致は、一般に、の場合のようにオーバーラップが発生した場合に発生すると説明できます。 逆の場合は、ギャップがあり、マイナスになります。 いずれにせよ、この違いを現在の層のスケーリングされた受容野に追加する必要があります。
そうすることで、次の式が得られます。
ネットワークを介して式を再帰的に適用し、に到達することができます。 しかし、もっとうまくやれることがわかりました。 ‘sと’sに関してのみ再帰方程式を解析的に解く別の方法があります。
この公式の完全な導出は、
3.4. 開始および終了インデックス式
出力フィーチャマップに影響を与える領域のサイズを計算できるようになったので、その領域の正確な座標がどれであるかについても考え始めることができます。 これは、たとえば、複雑な畳み込みアーキテクチャをデバッグするときに役立つ場合があります。
最後のレイヤーの特徴を計算するために使用される領域の左端と右端の座標を示しましょう。 また、最初のフィーチャインデックスをゼロ(パディングを含まない)に定義します。 たとえば、この単純なニューラルネットワークを考えてみましょう。ここで、、、、、、:
開始インデックスと終了インデックスの関係を表現するには、再帰的に考えて、与えられた、を与える式を考え出すことが再び役立つ場合があります。 たとえば、の場合を考えてみましょう。 次に、前のレイヤーまたはの左端のインデックスになります。 しかし、何が起こるか。 さて、左端のインデックスをから一歩離す必要があります。つまり、。 同じ計算の場合は、などになります。 これにより、次の式が得られます。
右端のインデックスを見つけるには、次を追加する必要があります。
4. 擬似コード
4.1. 受容野のサイズを見つける
入力層の受容野を計算するために分析ソリューションを使用することは非常に簡単です。
4.2. 受容野の開始と終了の指標を見つける
入力レイヤーでCNNの受容野の開始インデックスと終了インデックスを見つけ、上記の式を使用して適用するだけです。
5. 結論
この記事では、畳み込みニューラルネットワークの受容野とそのサイズを知ることがなぜ有用であるかを学びました。 また、時間をかけて、受容野のサイズと位置の両方を計算するためのいくつかの非常に有用な式の導出を行いました。