ホーム›Part 3 ディープラーニングとAI›3.3

Part 3 · ディープラーニングとAI

3.3 CNNと画像認識

画像から特徴を拾う

読了目安 10分前提:3.1 ニューラルネットワーク▶ 動画(約5分)

この回で分かること

  • 画像が数の並び(画素)であることと、3.1 の全結合層のままでは効率が悪い理由を説明できる
  • 畳み込み(小さなフィルタを画像全体にずらして当てる)の計算ができ、特徴マップ・プーリングの役割を説明できる
  • 層が進むと単純な特徴から物体へと表すものが変わることと、CNN の弱点(遠くの小さな物、画像の劣化、見当違いの手がかり)を説明できる

直感で理解する

コンピュータにとって、画像は数の並びです。1つひとつの点(画素)が明るさを表す数を持ち、カラー画像なら赤・緑・青の3枚分あります。車載カメラの 1920 × 1080 画素の画像なら、数はおよそ620万個です。

これを 3.1 の全結合層にそのまま入れると、ニューロン1,000個の層だけで重みは約62億個になります。しかも、画像の左にいる歩行者と右にいる歩行者は同じ歩行者なのに、別々に覚え直さなければなりません。

そこで、画像全体を一度に見る代わりに、3 × 3 画素のような小さな窓(フィルタ)を画像の上で少しずつずらしながら当てていきます。どの場所でも 同じフィルタ(同じ重み) を使うので、重みはわずかで済み、どこに写っていても同じ特徴を見つけられます。虫めがねで画像を端から順に調べていくようなものです。この計算を 畳み込み、畳み込みを使うニューラルネットワークを CNN(畳み込みニューラルネットワーク)と呼びます。

0 0 0 9 9 0 0 0 9 9 0 0 0 9 9 0 0 0 9 9 0 0 0 9 9 −1 0 1 −1 0 1 −1 0 1 0 27 27 0 27 27 0 27 27 入力画像(明るさ) フィルタ 特徴マップ 5×5画素 縦の境目を探す 境目で大きな値 × = 赤い枠の9画素に フィルタを重ねて 掛けて足すと 27
縦の境目を探すフィルタの畳み込み。左の暗い所と右の明るい所の境目にかかる位置でだけ、大きな値(27)になる。フィルタを1画素ずつずらして全体に当てると、右の特徴マップができる。

CNN は、こうしたフィルタを1つの層に何十〜何百個も持ち、それを何層も重ねます。フィルタの中身は人が決めるのではなく、3.2 の誤差逆伝播法でデータから学びます。学習が進むと、前の層は境目や模様のような単純な特徴を、後の層は車輪や脚のような部品、さらに車や歩行者といった物体全体を表すようになることが知られています。

前の層(入力に近い) 後の層(出力に近い) 色・明るさの境目 角・曲線・模様 車輪・脚などの部品 車・歩行者
層が進むほど、より大きく複雑なまとまりを表すようになる。これは学習の結果として自然にそうなるもので、人がそう決めているわけではない。

数式で確かめる

① 畳み込みの計算

フィルタの重みを \(w_{m,n}\)、画像の画素を \(x\) とすると、特徴マップの位置 (i, j) の値は、フィルタを重ねた部分の「掛けて足す」です。3.1 のニューロンの重み付きの和と同じ形をしています。

$$y_{i,j} = \sum_{m}\sum_{n} w_{m,n}\, x_{i+m,\, j+n} + b$$

図の赤い枠では、3行とも「左 0、中 0、右 9」の画素に、フィルタ「−1、0、1」を掛けて足すので、1行あたり \(-1 \times 0 + 0 \times 0 + 1 \times 9 = 9\)、3行で 27 です。一方、左端の位置では、枠の中がすべて0なので値は0。明るさが一様な所では、左右が打ち消し合って0になり、左が暗く右が明るい境目でだけ大きな値 になります。そのあと ReLU(3.1)を通して、特徴があるかどうかを表します。

② 重みの共有:パラメータがとても少ない

3 × 3 のフィルタ1枚は、重み9個とバイアス1個だけです。画像がどれほど大きくても変わりません。カラー画像(3枚)に 3 × 3 のフィルタを64種類使う層でも、パラメータは 3 × 3 × 3 × 64 + 64 = 1,792個です。全結合層の約62億個と比べると、桁違いに少なくなります。

③ プーリング:少しのずれを気にしない

畳み込みのあとには、たとえば 2 × 2 画素ごとに最大の値だけを残す プーリング をよく使います。特徴マップの大きさが縦横半分になり、計算が減るとともに、物が1〜2画素ずれても結果が変わりにくくなります。畳み込みとプーリングを重ねて特徴をまとめたあと、最後に全結合層とソフトマックス関数(2.4)で「歩行者 0.9・自転車 0.07…」のような確率を出します。

④ 遠くの物は画素が少ない

横の視野が60°、横 1920 画素のカメラで、背の高さ1.7 m の歩行者を写すと、25 m 先なら縦に約113画素ですが、50 m 先で約57画素、100 m 先では約28画素しかありません。画素が少ないほど、フィルタが拾える特徴は少なくなり、見分けるのが難しくなります。

自動運転との接点

  • カメラの認識の土台:歩行者や車の検出、車線・標識・信号の認識などは、CNN(や 3.5 の Transformer)を使ったモデルが担います。→ 3.4 物体検出とセグメンテーション
  • 距離ごとに性能を確かめる:遠くの歩行者ほど画素が少なく、見逃しやすくなります。停止に必要な距離(2.2)まで見つけられるかを、距離ごとに分けて評価します(2.7)。
  • 画像の劣化に弱い:雨粒やレンズの汚れ、逆光、夜の暗さ、動きによるぶれで、拾える特徴が変わり、性能が落ちます。こうした条件は SOTIF でいうトリガー条件の候補で、試験に含めて確かめます。→ 5.3 機能不十分とトリガー条件
  • 見当違いの手がかりに頼ることがある:CNN は、物の形より表面の模様(テクスチャ)に頼りがちなことや、背景の雪を手がかりにオオカミと判定していた例が報告されています。正しい理由で判断しているかは、正解率だけでは分かりません。→ 3.9 説明可能性(XAI)
  • 見たことのない見え方:着ぐるみの人、車いす、横倒しのトラックなど、学習データに少ない見え方では、フィルタが拾う特徴の組み合わせが変わり、認識を誤ることがあります。→ 2.8

まとめ

  • 画像は画素の数の並び。全結合層では重みが多すぎ、場所が変わると覚え直しになる
  • CNN は小さなフィルタを画像全体にずらして当てる(畳み込み)。同じ重みを使い回すのでパラメータが少なく、どこに写っていても同じ特徴を拾える。プーリングで少しのずれに強くなる
  • 層が進むと、境目 → 模様 → 部品 → 物体と表すものが変わる。遠くの小さな物、画像の劣化、見当違いの手がかりに注意し、条件ごとに評価する

確認クイズ

Q1. 図と同じフィルタ(各行 −1、0、1)を、3行とも「2、2、8」の部分に当てると、値はいくつ?

1行あたり \(-1 \times 2 + 0 \times 2 + 1 \times 8 = 6\)、3行で 18 です。

Q2. 同じフィルタを、9画素すべてが5の一様な部分に当てると、値はいくつ?それは何を意味する?

1行あたり −5 + 0 + 5 = 0 で、値は0です。明るさの境目がない所では反応しない、ということです。

Q3. カラー画像(3枚)に、3 × 3 のフィルタを16種類使う畳み込み層のパラメータは何個?

重みが 3 × 3 × 3 × 16 = 432個、バイアスが16個で、合計448個です。

Q4. 同じ検出器でも、100 m 先の歩行者は 25 m 先より見逃しやすくなります。なぜ?評価ではどうする?

100 m 先の歩行者は縦に約28画素しかなく(25 m 先なら約113画素)、フィルタが拾える特徴が少ないからです。評価は距離ごとに分けて行い、止まるのに必要な距離で十分に見つけられるかを確かめます。

もっと知りたい人へ