Deep

Deepラーニングのメモです

34

986 views

Conv1×1の謎

はじめに

畳み込みニューラルネットワーク(CNN)で頻繁に登場するけれど、「何のためにあるのかよくわからない」存在が Conv 1×1

3×3の畳み込みは周囲の特徴を捉えるのはイメージしやすいですが、1×1って何してるの?意味あるの?と思ったこと、ありませんか?

今回は、Conv1×1が何をしているのか、どんな場面で役立つのかを具体例と共に解説します!


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

まず、よくあるケース。

CNNの途中で、例えば以下のような特徴マップが出てきたとします。

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

この512チャンネルの特徴マップに、1×1 Conv (in=512, out=256) を適用すると…

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

つまり、チャンネル数だけを512 → 256に削減します。

ポイントは:

  • 高さと幅はそのまま
  • チャンネル方向(深さ)だけ変換
  • 各ピクセルの特徴ベクトル(512次元)に 線形変換 を適用

これが Conv1×1の役割 です。


でもチャンネル数減らしたら情報欠落しないの?

✅ 答え:ある程度欠落します!

しかし問題なし。必要な情報は残るように学習するのがポイント。

なぜ?

  • CNNの特徴マップは 全部のチャンネルが等しく重要とは限らない
  • 無駄な・冗長な特徴が多いので、1×1 Convで圧縮することで、
    • 必要な特徴だけ残し、不要なものは削除できる。

これ、実は PCA (主成分分析) とよく似ています。

項目 1×1 Conv (学習あり) PCA (固定)
学習 誤差逆伝播で学習 データの統計情報から事前計算
目的 損失関数を最小化するよう特徴選択 分散が大きい主成分を残す
動的か静的か 動的(タスクやデータに応じて変わる) 静的(データ1セットから計算固定)

つまり、1×1 Convは「タスク特化型のPCA圧縮器」と考えてOK!


FPNなどでの使い道

代表的な使い道の一つが Feature Pyramid Network (FPN)

FPNでは、複数層の特徴マップ(C3, C4, C5...) を組み合わせて使いますが、

特徴マップのチャンネル数
C3 256
C4 512
C5 1024
C6 2048

チャンネル数がバラバラ!

そのままでは足し算・結合できないので、

→ 全部1×1 Convで同じチャンネル数(例えば256)に揃える!

こうすることで、スムーズに融合できます。


実際の可視化

では、PyTorchで1×1 Convの動きを確認してみます。

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()

# 入力特徴の最初の5ch
visualize_feature(input_feat, 'Input')

# 出力特徴の5ch
visualize_feature(output_feat, 'Output')

出力を見ると…

  • 入力は64chで多彩な模様
  • 出力は16ch、情報が削られたが必要なパターンは残る


まとめ

1×1 Convの役割 なぜ使うのか
チャンネル数を変換 (圧縮/展開) 冗長な特徴を圧縮し、必要情報を選択
各ピクセルの特徴ベクトルに線形変換を適用 各特徴の重みを学習可能にする
空間サイズはそのまま 空間情報を保ったままチャンネルだけ操作できる
FPNなどでチャンネル数を統一 特徴融合がスムーズ
PCA的に情報圧縮 必要な特徴だけ残す(タスク特化型PCA)

Page 11 of 33.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626