ある医療機器メーカーが、内視鏡画像を解析するCNNを軽くしたい。ある層では、縦56×横56×256チャネルの特徴マップに3×3の畳み込みを行っており、計算量が大きい。そこで、縦横の解像度は保ったまま、各位置でチャネルどうしの情報を混ぜてチャネル数を64に減らしてから、3×3の畳み込みを行いたい。この目的に合う処理として、最も適切なものを1つ選べ。
正解と解説を見る
解説
正解 A
この問題の論点:1×1畳み込みの役割
ポイント
1×1の畳み込みは、縦横の解像度を保ったままチャネル数を変え、チャネル間の情報を混ぜる処理です。
選択肢ごとの解説
- A
適切 正解
1×1の畳み込みは、各位置で256チャネルの値に重みを掛けて足し合わせる処理で、位置ごとに全結合層を適用するのと同じです。縦横は変えずに、チャネル数をフィルタの枚数の64にできます。GoogLeNetでも計算量の削減に使われました。
- B
不適切
Depthwise畳み込みは各チャネルを別々に処理するため、チャネルどうしの情報は混ざらず、出力も256チャネルのままです。これに1×1の畳み込みを組み合わせたものがDepthwise Separable Convolutionです。
- C
不適切
出力は64チャネルになりますが、ストライド2では特徴マップの縦横がおよそ半分になり、解像度を保つという条件に反します。また、256チャネルのまま3×3の畳み込みを行うため、チャネル数を先に減らすという狙いとも異なります。
- D
不適切
GAPは各チャネルの特徴マップ全体を平均して1つの値にするため、縦横の位置の情報が失われます。全結合層でチャネルどうしの情報は混ざりますが、出力は位置を持たない64個の値で、続けて3×3の畳み込みを行えません。
補足
この層の3×3の畳み込みの出力を64チャネルとし、バイアスを除いて重みの数を比べます。256チャネルのまま行うと3×3×256×64=147,456個です。先に1×1の畳み込みで64チャネルに減らすと、1×1×256×64=16,384個と3×3×64×64=36,864個の合計53,248個で、約2.8分の1になります。
試験での狙われ方
1×1の畳み込みの働きは、ストライドやGAP、Depthwise畳み込みとの違いや、GoogLeNetなどのモデルの工夫として問われやすい論点です。