CNN(Convolutional Neural Network)を理解するうえで、「チャネル(channel)」は避けて通れない重要概念です。
チャネルを正しく理解できるかどうかで、モデル構造の読解力・設計力・トラブルシュート力に大きな差が出ます。
本稿では、直感的な説明に留まらず、数学的・実装的にも破綻しない形でチャネルを解説します。
チャネルとは何か(定義)
CNNにおけるチャネルとは、
同じ空間サイズ(高さ×幅)を持つ特徴マップの“種類”を区別するための次元
です。
CNNで扱われるデータは、基本的に次のような構造を持ちます。
高さ(H) × 幅(W) × チャネル数(C)
この C(奥行き方向) がチャネルです。
入力画像におけるチャネル
カラー画像(RGB)
一般的なカラー画像は 3チャネルで構成されます。
| チャネル | 情報 |
|---|---|
| R | 赤成分 |
| G | 緑成分 |
| B | 青成分 |
内部的には、RGB画像は次のようなテンソルとして扱われます。
H × W × 3
CNNは、この 3チャネルすべてを同時に入力として処理します。
グレースケール画像
白黒画像の場合は 1チャネルです。
H × W × 1
この場合でも、CNNの仕組み自体はRGB画像と変わりません。
畳み込み層におけるチャネルの基本構造
出力チャネル数とフィルタ数の関係
CNNでは、1つのフィルタ(カーネル)につき、1つの出力チャネル(特徴マップ)が生成されます。
- フィルタ数 = 出力チャネル数
これは 常に成り立つ重要な関係です。
例
- 入力:H × W × 3
- フィルタ数:64
→ 出力は H′ × W′ × 64
※ H′・W′ は stride / padding / dilation に依存し、必ずしも入力と同じサイズになるとは限りません。
フィルタ(カーネル)とチャネルの正確な関係
フィルタは「入力チャネル分の厚み」を持つ
通常のConv2Dにおいて、1つの出力チャネルを生成するフィルタは次の形をしています。
フィルタサイズ = kH × kW × 入力チャネル数(C_in)
RGB画像の場合
入力:H × W × 3
フィルタ:kH × kW × 3
このフィルタは、RGBすべての情報を加重和として統合し、1枚の特徴マップ(=1チャネル)を出力します。
重みテンソル全体は4次元
実装上、畳み込み層の重みは次のような形になります。
- PyTorch
(out_channels, in_channels, kH, kW) - TensorFlow / Keras
(kH, kW, in_channels, out_channels)
つまり、
- 「1出力チャネルを作るカーネル」は3次元
- 「畳み込み層全体の重み」は4次元
という構造です。
チャネルは何を表しているのか?
チャネル=特徴マップ
CNNにおける各チャネルは、
あるパターンに強く反応する特徴マップ
と捉えるのが最も安全です。
層の深さによる特徴の違い
- 浅い層
- エッジ
- 明暗の境界
- 色や方向の変化
- 深い層
- パーツ(目・鼻・車輪など)
- テクスチャ
- より抽象的な構造
ただし、「1チャネル=完全に1種類の意味的特徴」と厳密に対応するわけではありません。
実際には入力チャネルの線形結合であり、意味は次層との関係で決まります。
なぜ層が深くなるほどチャネル数は増えるのか
多くのCNNは次のような設計を取ります。
64 → 128 → 256 → 512
主な理由は以下の通りです。
- 抽象度が高くなるほど、表現すべき特徴の多様性が増える
- 空間サイズ(H, W)が縮小するため、計算量を増やせる
- 情報を「圧縮しつつ多様化」するため
チャネル数とパラメータ数の関係
畳み込み層のパラメータ数
通常のConv2Dのパラメータ数は次の式で表されます。
kH × kW × C_in × C_out + C_out(※バイアスを使う場合)
例
- フィルタ:3×3
- 入力チャネル:64
- 出力チャネル:128
重み:3 × 3 × 64 × 128 = 73,728
バイアス:128(ある場合)
チャネル数はモデルサイズ・計算量に直結します。
実装視点でのチャネル指定(PyTorch例)
nn.Conv2d(
in_channels=3,
out_channels=64,
kernel_size=3,
stride=1,
padding=1
)
in_channels:入力チャネル数out_channels:出力チャネル数(=フィルタ数)
チャネルを正しく理解すると得られるもの
チャネルの理解が深まると、次のことが可能になります。
- CNNモデル構造を「読める」ようになる
- パラメータ数・計算量を定量的に把握できる
- Bottleneck / Depthwise Convolution の意味が理解できる
- 転移学習で「どの層を凍結すべきか」判断できる
- 軽量化・高速化の設計判断ができる
まとめ
- チャネル = 特徴マップの種類を表す次元
- 出力チャネル数 = フィルタ数
- 1出力チャネルは kH×kW×C_in のカーネルで生成される
- 出力の高さ・幅は stride / padding に依存する
- チャネル数は性能と計算コストの両方に影響する
以上、CNNのチャネルについてでした。
最後までお読みいただき、ありがとうございました。
