お気軽にお問い合わせください
画像解析のスタンダード「CNN」その理論と仕組みを徹底解説

はじめに
本記事では画像認識分野において基盤的かつ代表的な深層学習モデルの一つである、CNN(Convolutional Neural Network) について紹介します。
CNNは大量の画像データから物体の特徴を自ら学習することで、物体の識別を可能とする技術です。具体的な特徴として、物体の輪郭やテクスチャなどを検出する役割を担うフィルタの値を自動で学習しています。CNNの最も標準的かつ古典的な構成は、「畳み込み層 (Convolution Layers) 」と「プーリング層 (Pooling Layers)」を積み重ね、最後に「全結合層 (Fully-connected Layers)」を持つ構造です。中でも「畳み込み層」と「プーリング層」を理解することでCNNについての理解を深めることができます。

CNNによる画像認識のステップ
CNNの一連の流れを説明すると下記のような流れとなります。
解析対象となる画像を用意します

入力画像に対して畳み込み処理を行い、フィルターを通して輪郭など画像内の物体の特徴を検出

情報をより扱いやすい形にするために、情報を圧縮する(Down Sampling)

- flatten(1次元ベクトルに変換する)
- 抽出した情報をもとに、物体の確率を出力する

当サイトの運営会社であるデータアナリティクスラボ株式会社は、データサイエンティストのプロフェッショナルサービスを提供しています。画像認識を用いた分析実績も多数ございますので、お気軽にご相談ください。
ご相談・お問い合わせはこちらから
畳み込み層
畳み込み層は、入力画像から輪郭といった局所的な特徴を直接抽出する最初の層であり、画像内の物体を識別する上で極めて重要な役割を担います。ネットワークの入り口に近い畳み込み層(浅い層)では、輪郭といった「単純な要素」を抽出し、畳み込み層が深くなるにつれて、形状や物体のパーツといった「抽象的な特徴」を検知できるようになり、最終的に目的の物体を判別することが可能になります。 具体的に畳み込み層では、どのような手順で物体の特徴を検出するのか紹介します。
畳み込み演算
畳み込み層では、「畳み込み演算」と呼ばれる演算処理を画像に適用することで、画像の局所的な特徴を数値として抽出することができます。
畳み込み演算では、まず「フィルター(カーネル)」と呼ばれる小さな行列を用意します。このフィルター内の各数値(重み)は、学習の初期段階ではランダムに設定されますが、学習が進むにつれて特定のパターンに反応するように最適化(更新)されていきます。
◆例:2×2のフィルターを考えた場合の計算手順は以下の通りです。
フィルターを入力画像の左上に重ねる
フィルター内の値と入力データに対応するピクセル値を要素ごとに掛け合わせ、その総和を計算
この値が出力画像の左上のピクセル値となります。
次にフィルターを画像上で一定の間隔(ストライド)でスライドさせて、同様の計算を行い次の出力値を得ます。
この一連の走査を画像全体に適用することで、入力データから特定の特徴を抽出し、新たな行列が生成されます。この出力した行列のことを「特徴マップ」と呼びます。
「* 走査 : フィルターを画像データの左上から右下まで一定の間隔でスライドさせながら計算を繰り返す動作のこと」

実際の畳み込み層では、異なる特徴(輪郭や色、質感など)を捉えるために、複数の独立したフィルターによる畳み込み演算が並列して行われます。各フィルターが独自の視点で抽出した「特徴マップ」は、最終的に1枚ずつ重ね合わされ、データの「厚み(チャンネル)」として保持されます。

このように、適用したフィルターの数だけ多様な特徴マップが生成されることで、1つの層において画像から多角的な情報を一挙に抽出することが可能になります。

ゼロパディングについて
このような畳み込み演算において、併せて重要となるのが「ゼロパディング」という手法です。これは、入力画像の周囲を「0」で囲んで一回り大きくする処理を指します。

通常、畳み込み演算を行うと、出力される特徴マップのサイズは元の画像よりも小さくなります。これは画像の端にあるピクセルにフィルターの中心を合わせようとすると、フィルターの一部が画像からはみ出してしまうため、演算を画像からはみ出さない範囲だけで行おうとすると、フィルターをスライドできる範囲がどうしても内側に制限されてしまい、結果として出力サイズが削られてしまいます。これにより、後続の畳み込み層が深くなるごとに画像サイズが圧縮されてしまい、どこかで画像サイズの枯渇により処理が行えなくなるという問題が起きてしまいます。
そこで、あらかじめ周囲を「0」で埋めて拡張し、フィルターサイズやスライド幅(ストライド)を適切に設定することで、入力サイズを維持したまま次層へデータを渡せるようになり、高度で深いモデル構造を構築することが可能になります。
さらに、ゼロパディングには「端の情報の欠落を防ぐ」という大きなメリットもあります。パディングがない状態では、中央付近に比べて画像の周辺部のデータは計算に使われる回数が少なくなりますが、周囲に余白を作ることで端のピクセルも十分にスキャンできるようになります。これにより、画像全域から漏れなく特徴を抽出できるようになり、フィルター内のパラメーター更新がより効率的に行われ、学習精度の向上に寄与します。

畳み込み層まとめ
畳み込み層の役割を総括すると、性質の異なる多様なフィルターを網羅的に適用することで、画像内に潜む輪郭や質感といった複雑な視覚的要素を多角的に検出することにあります。畳み込み演算を通じて出力される「特徴マップ」は、特定のパターンが画像のどの位置に、どの程度の強さで分布しているかを数値化した情報の集積であり、次層へ伝えるべき重要な特徴の所在を明確に表しています。
当サイトの運営会社であるデータアナリティクスラボ株式会社は、データサイエンティストのプロフェッショナルサービスを提供しています。画像認識を用いた分析実績も多数ございますので、お気軽にご相談ください。
ご相談・お問い合わせはこちらから
プーリング層
プーリング層は、畳み込み層から出力された特徴マップをまとめて圧縮する層のことです。特徴マップの局所領域ごとの値を代表値に置き換えることで、データ量を圧縮し、扱いやすくします。また、プーリング層は畳み込み層と異なり学習パラメータ(重み)を持たないため、計算コストが低いという特徴があります。この性質を活かして、重要な情報を保ったまま特徴マップのサイズを小さくし、計算量を削減することが可能です。これがプーリング層の基本的な役割となります。
演算の仕組み(Avg Pooling と Max Pooling の具体的な処理)
プーリング層で代表的な手法は最大値プーリング(Max Pooling)と平均値プーリング(Average Pooling)の2つです。
最大値プーリングは、設定した局所領域(例えば 2×2の範囲)の中から、最も大きな数値だけを代表値として抽出する手法です。特徴マップの数値は「その特徴がどれくらい強く現れているか」を示しているため、最大値を取ることは、その領域内で最も際立った特徴を優先的に残すことを意味します。これにより、輪郭といった重要な情報を強調しやすくなるため、CNNモデルでは広く使われてきました。

(出典: Bhatt et al., 2021, Electronics 10(20):2470, https://doi.org/10.3390/electronics10202470)
一方、平均値プーリングは、局所領域内の数値の平均を計算し、それを代表値とする手法です。特定の強い反応だけを拾うのではなく、領域全体の情報を平均的に集約するため、特徴マップ全体を滑らかに圧縮する効果があります。最大値プーリングに比べると、画像内の激しい変化(ノイズなど)の影響を受けにくい反面、際立った特徴がぼやけてしまう傾向もあります。対象物だけでなく、周囲の背景やテクスチャの全体的な傾向を残したい場合に有効となる手法です。

(出典: Bhatt et al., 2021, Electronics 10(20):2470, https://doi.org/10.3390/electronics10202470)
これら2つの手法を使い分けることで、特徴の強さを強調するか、あるいは全体の傾向を緩やかにまとめるかといった、データの性質やタスクの目的に応じて最適な情報集約が可能となります。
移動不変性
プーリング層の重要な役割の一つに、上記の計算量の削減に加えて、特徴の位置変化に対する頑健性(ロバスト性)を高める役割があります。この役割の特徴を移動不変性と呼びます。
実世界の画像データでは、識別したい物体が常に同じ位置(常に画像の中央にあるなど)に写るとは限りません。撮影時の角度や被写体の動きによって、特徴の現れる場所は数ピクセル単位で容易に変化します。プーリング層は、局所的な領域を一つの代表値に集約することで、「その特徴が具体的にどのピクセルにあるか」という細かな位置情報をあえて捨て、「その領域のどこかに特徴が存在する」という抽象的な情報へと変換します。
このプロセスにより、領域内で特徴が数ピクセル程度移動しても、抽出される代表値(最大値など)が変化しにくくなるため、モデルは位置の微細な変化に左右されにくい識別能力を得やすくなります。
移動不変性に関する注意点
ただし、ここで注意が必要なのは、「プーリング層があれば、どんな位置ズレでも完全に同じ結果になる(完全な移動不変性)」というわけではないという点になります。
近年の標準的なCNNにおいて、入力画像が1ピクセルほど移動しただけでもプーリング後の出力(特徴マップ)が大きく変動してしまうケースがあることが指摘されています。そのため、現代のCNNにおいてプーリング層は「位置ズレに対する耐性を高めるための補助的な仕組み」として捉えるのがより正確となります。
このように、畳み込み層で見つけ出した鋭い特徴を、位置のズレや歪みに比較的強い情報へと整えることで、CNNは複雑な実写画像に対しても一定の精度を保つことを可能にしています。
プーリング層まとめ
プーリング層は、畳み込み層が得た詳細な特徴マップを代表値によって集約し、情報の密度を高めながらデータ量を最適化する役割を担います。最大値プーリングで際立った特徴を強調し、あるいは平均値プーリングで全体の傾向を滑らかに捉えることで、計算効率の向上だけでなく、被写体の細かな位置ズレや歪みに対する一定の頑健性を獲得することができます。完全な移動不変性を保証するものではありませんが、実用的な精度を支えるCNNの重要な構成要素となっています。
全結合層

畳み込み層やプーリング層によって抽出された特徴マップは、物体の識別を可能にする情報を保持していますが、特徴量を抽出するだけでは画像を識別することはできません。そこでまず、「平坦化(Flatten)」を行い、3次元(縦・横・チャネル)のデータを1次元の「数値の列(特徴ベクトル)」へと変換します。この平坦化によって、全結合層が入力として受け取れるデータ形式へと整えます。全結合層では、並べられた個々の特徴を組み合わせることで、画像がどのクラス(カテゴリ)に該当するかを最終的に判断します。

全結合層での処理
平坦化された1次元ベクトルは”全結合”という名前の通り、次の層のすべてのノードと網目状に結びついており、それぞれに割り当てられた「重み」によって情報の重要度が評価されます。
「ある1つのノード」に着目してみると、そのノードは、前の層にあるすべての入力ノードからそれぞれの数値に「重み(w)」が掛けられた情報を同時に受け取ります。「重み」が大きい結合からの情報は強く伝わり、重みがゼロに近い結合からの情報は弱い、もしくは反映されません。これにより、画像全体の中から「分類に本当に必要な特徴」だけが強調されることになります。

次に、このように重みによって強調された情報は、活性化関数(主にReLU)というフィルターを通ります。ReLUでは、負の信号を遮断して、重要な情報のみを次層へ伝播させます。具体的には、0以上の場合はそのままの値を出力し、0以下の場合は0とします。
こうして精査された情報は、必要に応じてさらに全結合層を重ねることで抽象度を高め、最終的に分類したいクラス数と同じ数のノードを持つ「出力層」へと到達します。この出力層では、最後の重み計算によってクラスごとの「スコア(ロジット)」が算出されますが、この段階では数値の範囲がバラバラで、そのままでは判定結果として扱いにくい状態となっています。そこで、最後に適用されるのがソフトマックス関数です。この関数は、算出された複数のスコアを、合計が1(100%)となる「確率」へと変換する役割を担います。
この処理により、モデルは数値の羅列ではなく「車である確率85%、バスである確率10%、トラックである確率5%」といった、人間が直感的に理解できる形式で最終的な回答を導き出します。

まとめ
本記事では、画像認識のベースとなるCNNの仕組みや学習の流れについて解説しました。CNNは物体検出やセグメンテーションといった他の技術を理解する上でも欠かせず、基本的な特徴抽出から学習までの流れを理解することで、今後さらに高度な手法を学ぶ際の本質の理解をスムーズに行うことができます。本記事がさまざまな応用技術を理解する上で、少しでもお役に立てば幸いです。
当サイトの運営会社であるデータアナリティクスラボ株式会社は、データサイエンティストのプロフェッショナルサービスを提供しています。画像認識を用いた分析実績も多数ございますので、お気軽にご相談ください。
ご相談・お問い合わせはこちらから
こちらもご覧ください






