CNNのチャネルについて

AI実装検定のご案内

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

主な理由は以下の通りです。

  1. 抽象度が高くなるほど、表現すべき特徴の多様性が増える
  2. 空間サイズ(H, W)が縮小するため、計算量を増やせる
  3. 情報を「圧縮しつつ多様化」するため

チャネル数とパラメータ数の関係

畳み込み層のパラメータ数

通常の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のチャネルについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次