Zenn
📖

絶対腹落ちできる、Conv1×1解説

2025/03/22に公開

はじめに

Conv1×1って、CNN系のネットワークを見ているとちょいちょい出てきますよね。
でも最初は「1×1で畳み込むってどういうこと?意味あるの?」と思ってました。
3×3の畳み込みなら“周囲の情報を集める”って直感があるんですが、1×1はただの1ピクセル。隣も見ないし、広がりもない。それなのに、実はめちゃくちゃ使えるやつなんです。

今回は、「Conv1×1が何をしているのか」「どんな場面で使われているのか」を、できるだけ直感的に・図解的にまとめてみました!

Conv1×1は「チャンネル圧縮器」

よくあるケースを考えてみます。
CNNの中間層で、たとえばこんな特徴マップが出てきたとします。

入力特徴マップ: [バッチサイズ, チャンネル数, 高さ, 幅] = [1, 512, 32, 32]

この512チャンネルに、1×1の畳み込み(Conv2d(512, 256, kernel_size=1)) をかけると:

出力特徴マップ: [1, 256, 32, 32]

チャンネル数だけが512 → 256に減ったことがわかります。
ポイントは以下の通り:

  • 高さと幅はそのまま(32×32)
  • チャンネル方向(深さ)だけ変わる
  • 各ピクセルの特徴ベクトル(512次元)に線形変換をかけて圧縮

つまり、空間は変えずにチャンネルだけ加工する畳み込みです。
これがConv1×1の役割です。

情報って削れてないの?

正直、ある程度は削れます。

でも、ここが重要で──
「必要な情報は残すように学習する」 のがこの操作のミソなんです。

CNNの特徴マップって、全チャンネルが平等に大事なわけではなくて、無駄な・似たような特徴 も含まれています。
そこを圧縮して、本当に必要な特徴だけ残す のがConv1×1の目的です。

Conv1×1は“PCAっぽい”

この操作、**主成分分析(PCA)**にめっちゃ似てるんですよね。

項目 Conv1×1 PCA
学習方法 誤差逆伝播で学習 データの統計から固定的に計算
特徴の選択基準 タスクに合わせて動的に重みを学習 分散が大きい方向を選ぶ(汎用的)
出力 損失最小化に最適な特徴空間 分散が大きい成分を保持

Conv1×1は「タスク特化型の学習付きPCA圧縮器」 と言ってもいいと思います。

FPNなどでの使い道

Conv1×1の便利さがよく出るのが、Feature Pyramid Network(FPN) みたいな構造です。

FPNでは、複数層(C3〜C6など)の特徴マップを統合するんですが、各層でチャンネル数が違います:

チャンネル数
C3 256
C4 512
C5 1024
C6 2048

このままじゃ加算・統合できないので、全部1×1 Convで同じ数(例:256)に揃えて から合成します。
こうすることで、スムーズに融合できるんですね。


実際の動き:PyTorchで可視化してみる

import torch
import torch.nn as nn
import matplotlib.pyplot as plt

# 仮の特徴マップ (batch=1, ch=64, 16x16)
input_feat = torch.randn(1, 64, 16, 16)

# 1x1 Convで 64 → 16 チャンネルに圧縮
conv1x1 = nn.Conv2d(64, 16, kernel_size=1)
output_feat = conv1x1(input_feat)

# 可視化関数
def visualize_feature(tensor, title):
    fig, axs = plt.subplots(1, 5, figsize=(15, 3))
    for i in range(5):
        axs[i].imshow(tensor[0, i].detach().numpy(), cmap='viridis')
        axs[i].set_title(f'{title} {i}')
        axs[i].axis('off')
    plt.show()

visualize_feature(input_feat, 'Input')
visualize_feature(output_feat, 'Output')

👀 実際に見てみると、
入力は64chで情報がごちゃごちゃしてたのが、16chに圧縮されて整理された感 があります。
「減った」というより「要点だけ残した」って感じですね。

まとめ

1×1 Convの役割 なぜ使うのか
チャンネル数の変換(圧縮/展開) 冗長な特徴を圧縮、必要な情報に絞り込む
各ピクセルに線形変換をかける 特徴に重み付けし、選別する
空間情報は保持 位置情報はそのままで、チャンネルだけ加工
特徴マップの統合を可能にする FPNなどでチャンネルを揃えて融合しやすくする
PCA的な意味合い タスク特化の“動的な”特徴圧縮

おわりに

Conv1×1、地味だけどめちゃくちゃ有能です。
自分も「これ何がいいの?」って長らく思ってたんですが、やっと腑に落ちました。

もし同じように「???」となっていた方の助けになれば嬉しいです。

Discussion

ログインするとコメントできます