Convolutional Neural Network (CNN)
畳み込みニューラルネットワーク(CNN)は、共有されたスライドフィルターを使って画像特徴を学習します。層、特性、主要モデル、CNNとViTの比較を解説します。
畳み込みニューラルネットワーク (CNN) は、ディープラーニングアーキテクチャの一種です。主に画像などのグリッド状データを、小さな学習可能フィルターを入力上でスライドさせて処理します。各フィルターはすべての位置で同じ重みを再利用するため、CNNはエッジや車輪などのパターンが現れる場所を問わず検出でき、全結合ネットワークよりも大幅に少ないパラメーターで済みます。層を重ねることで特徴の階層を構築し、最初の層ではエッジやテクスチャを、深い層では物体の部品や物体全体を捉えます。CNNは、AlexNetが2012年のImageNetチャレンジで優勝して以来、コンピュータービジョンの進歩を牽引してきました。また、エッジハードウェア上のリアルタイムビジョンで今も最も一般的に選ばれています。
CNNの仕組み#
CNNは複数の段階でいくつかの種類の層を繰り返し適用し、各段階では前の段階より低い解像度で処理します。
- 畳み込み層: 各層は通常3×3の学習可能フィルター群を、入力の高さと幅に沿ってスライドさせます。各フィルターは出力特徴マップの1チャンネルを生成するため、64個のフィルターを持つ層は64チャンネルを出力します。
- 正規化と活性化: バッチ正規化は学習中に各層の出力を安定した範囲に保ち、ReLUやSiLUなどの非線形な活性化関数によって、層を重ねたときに単一の線形変換を超える表現が可能になります。
- ダウンサンプリング: 最大プーリングまたはストライド2の畳み込みによって高さと幅を半分にします。これにより、後続層の受容野が広がり、計算量が削減されます。多くの現代的な設計では、主にストライド付き畳み込みでダウンサンプリングします。
- ヘッド: 画像分類では、グローバル平均プーリングによって最終チャンネルごとに1つの数値に集約し、全結合層でその数値をクラススコアに変換します。物体検出モデルやセグメンテーションモデルでは、ボックスまたはピクセル単位のマスクを予測する層にこのヘッドを置き換えます。
CNNの主な特性#
畳み込みが画像に適している理由は、3つの特性で説明できます。局所結合では、各出力が入力の小さな近傍領域だけに依存し、近くのピクセル間に強い相関があることに対応します。重み共有では、1つのフィルターを画像全体に適用するため、入力サイズにかかわらずパラメーター数が一定です。並進同変性では、入力をずらすと特徴マップも同じ量だけずれるため、一角で学習したパターンをどこでも認識でき、さらにプーリング層が小さなずれへの許容度を高めます。これらの特性がCNNの帰納バイアスを形成します。つまり、トランスフォーマーより少ない画像から学習できるようにする、組み込みの前提です。
以下のPyTorchのコード例では、同じ224×224のRGB画像に適用した畳み込み層と全結合層を比較します。
import torch
from torch import nn
image = torch.randn(1, 3, 224, 224)
# 64 learnable 3x3 filters, each reused at every position of the RGB image
conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# A fully connected layer mapping the same flattened image to only 64 numbers
dense = nn.Linear(3 * 224 * 224, 64)
conv_params = sum(p.numel() for p in conv.parameters())
dense_params = sum(p.numel() for p in dense.parameters())
print(f"Conv2d: output {tuple(conv(image).shape)}, {conv_params:,} parameters")
print(f"Linear: output {tuple(dense(image.flatten(1)).shape)}, {dense_params:,} parameters")Conv2d: output (1, 64, 224, 224), 1,792 parametersとLinear: output (1, 64), 9,633,856 parametersが出力されます。重み共有によって、畳み込み層は1,792個のパラメーターからフル解像度の特徴マップを64個生成できます。一方、全結合層が出力するのは64個の数値だけですが、必要なパラメーター数は5,376倍です。
代表的なCNNアーキテクチャ#
- LeNet-5 (1998): Yann LeCunが手書き数字の読み取り用に開発したネットワークです。畳み込み層とプーリング層を交互に配置し、その後に全結合層を置く構成の先駆けとなり、銀行小切手の読み取りに商用導入されました。
- AlexNet (2012): 2基のGPUで学習し、ReLU活性化とドロップアウトを採用しました。ILSVRC 2012チャレンジでは、2位の26.2%に対して15.3%のtop-5テスト誤差で優勝しました。
- VGG (2014): 小さな3×3畳み込みを重ねて重み層を16~19層にすると、ImageNetの精度が大幅に向上することを示しました。
- ResNet (2015): 残差接続によって最大152層のネットワークを学習可能にし、ResNetのアンサンブルがILSVRC 2015で優勝しました。
- U-Net (2015): スキップ接続を備えたエンコーダー・デコーダー型CNNで、生物医学画像のセグメンテーションにおける標準アーキテクチャとなりました。
- ConvNeXt (2022): トランスフォーマー時代の設計要素を取り入れて現代化したResNetです。ImageNetのtop-1精度87.8%を達成し、COCOの物体検出でSwin Transformerを上回ります。
CNNの用途#
- 物体検出: 1段階CNN検出器は1回のフォワードパスで物体を検出・分類するため、カメラ、スマートフォン、組み込みボードでの動画処理に十分な速度を実現します。
- 医用画像解析: U-Net系CNNは、各ピクセルのラベルが重要となるCTやMRIスキャンで、臓器、腫瘍、病変をセグメンテーションします。
- 姿勢推定: CNNは、スポーツ分析、人間工学、フィットネスアプリ向けに、身体のキーポイントを予測します。
- 画像以外の信号: 1次元畳み込みは音声波形やセンサーの時系列データを処理し、2次元CNNは音声認識でスペクトログラムを分類します。
CNNとビジョントランスフォーマーの比較#
ビジョントランスフォーマー (ViT)は画像をパッチに分割し、自己注意機構で各パッチを他のすべてのパッチと関連付けるため、最初の層からグローバルなコンテキストを捉えます。帰納バイアスが弱いことには代償があります。元のViTはImageNetだけで学習した場合、同程度のサイズのResNetに及ばず、1,400万~3億枚の画像で事前学習した場合にのみ同等以上になりました。注意機構の計算コストはパッチ数の2乗に比例して増えるため、高解像度入力では高コストになりますが、畳み込みの計算コストはピクセル数に対して線形に増加します。そのため、現在の多くのモデルは両者を組み合わせ、高解像度では畳み込みステージを使い、特徴マップが小さい部分に注意機構を追加します。YOLO26もこの方式を採用しています。Convブロック (畳み込み、バッチ正規化、SiLU) とC3k2ブロックが処理の大部分を担い、マルチヘッド自己注意機構はストライド32の特徴マップにのみ適用されます。640×640画像の場合、これは20×20のグリッドです。










