モジュール 7 ・ 目安 90 分

物体検出と、その先へ

このモジュールで学ぶこと

いよいよ最終モジュールです。ここまでで、ニューロンから始めてCNNを組み、勾配降下で訓練し、過学習と戦い、転移学習で少ないデータでも成果を出す方法まで身につけました。最後に扱うのは、画像分類の一歩先です。

前モジュールで、事前学習済みの特徴の上に「古典的な分類器」を載せる実務パターンを学びました。そのとき登場した分類器の代表格が ロジスティック回帰(Logistic Regression) です。名前に「回帰」とありますが、実際にやるのは分類です。まずはこの中身をきちんと理解し、機械学習でもっとも基本的な「確率を出す分類器」を自分のものにします。

そのうえで視野を大きく広げ、物体検出(Object Detection) に踏み込みます。分類が「この画像は何か」を一言で答えるのに対し、検出は「どこに何が、いくつあるか」まで答えます。自動運転が歩行者や標識を捉え、外観検査がキズの位置を特定する――こうした応用の土台です。検出を支える2つの道具、IoUNMS を、式と可視化の両方でつかみます。

最後に、このコース全体を振り返り、次に学ぶならどこへ進めばよいか、道しるべを示して締めくくります。

ロジスティック回帰 — 確率を出す分類器

動機 — 「はい/いいえ」を確率で答えたい

線形回帰は連続値(例:温度、応力)を予測します。しかし分類では、出したいのは「このメールは迷惑メールか?」「この部品は不良か?」といったはい/いいえ、あるいはその確からしさです。0か1かを直接あてはめようとすると、直線は素直に振る舞ってくれません。欲しいのは、どんな入力に対しても0から1の確率を返してくれる仕組みです。

直感 — 線形和を「確率の坂」に通す

やることは2段構えです。まず、モジュール2で学んだニューロンと同じように、入力 x\mathbf{x} を重み付けして足し合わせ、スコア zz を作ります。

z=wx+bz = \mathbf{w}^{\top}\mathbf{x} + b

このスコアはマイナス無限大からプラス無限大までの、ただの実数です。これを確率に変えるために、S字カーブの関数に通します。これが シグモイド関数(Sigmoid Function) です。

σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

シグモイドは、大きな正のスコアを1に近く、大きな負のスコアを0に近く、境目(z=0z=0)をちょうど0.5に押し込みます。滑らかな「確率の坂」を通すイメージです。こうして得た σ(z)\sigma(z) を「クラス1である確率 pp」と解釈します。wx+b=0\mathbf{w}^{\top}\mathbf{x}+b = 0 となる場所が確率0.5の分かれ目、すなわち決定境界になります。

式 — 交差エントロピーで「確率の誤差」を測る

では、この確率をどう学習させるのでしょうか。予測確率 pp と正解ラベル y{0,1}y \in \{0, 1\} のズレを測る損失として、モジュール3でも登場した 交差エントロピー(Cross-Entropy) を使います。二値分類での形は次の通りです。

L=1Ni=1N[yilogpi+(1yi)log(1pi)]L = -\frac{1}{N}\sum_{i=1}^{N}\Big[\, y_i \log p_i + (1 - y_i)\log(1 - p_i) \,\Big]

直感的には、正解が1なのに pp が小さい、あるいは正解が0なのに pp が大きいほど、対数がぐっと大きなペナルティを課します。自信を持って間違えるほど強く叱られる、と考えてください。この損失を勾配降下で下げていけば、w\mathbf{w}bb が良い決定境界へと調整されていきます。学習の道具立て(勾配降下・SGD)はモジュール4のものがそのまま使えます。

式 — L2正則化で境界を「なめらか」に

小さなデータでは、ロジスティック回帰でさえ過学習します。重み w\mathbf{w} が極端に大きくなると、決定境界が一部の点に過剰に反応してとがってしまうのです。これを抑えるのが 正則化(Regularization) 、なかでも定番の L2正則化(L2 Regularization) です。損失に「重みの大きさそのものへの罰則」を足します。

Ltotal=L+λjwj2L_{\text{total}} = L + \lambda \sum_{j} w_j^{2}

ここで λ\lambda(ラムダ)は罰則の強さを決めるつまみです。λ\lambda を大きくするほど「重みを小さく保て」という圧力が強まり、決定境界はなめらかで単純になります。機械工学の曲線あてはめでいえば、係数が暴れないように手綱を締める操作です。ただし締めすぎると、今度は境界が単純すぎて必要な区別までできなくなる(未学習)。ちょうどよい λ\lambda を選ぶ、というのが実務のさじ加減です。

決定境界と正則化を手で動かす

言葉で「λ\lambda を上げると境界がなめらかになる」と言われても、実感が湧かないかもしれません。下のロジスティック回帰の決定境界では、2次元データ上で λ\lambda(L2正則化)としきい値を動かせます。まず λ\lambda をいちばん小さくして、境界がデータの細かい凹凸に食いついてぐねぐねする様子を見てください。次に λ\lambda を少しずつ大きくすると、境界がすっと直線に近づいてなめらかになっていくはずです。上げすぎると分離が甘くなることも確かめましょう。あわせて、確率の色勾配が境界付近でどう変化するか――境界から離れるほど自信(確率が0や1に近づく)が増す様子――にも注目してください。

ロジスティック回帰の決定境界

λを最小にして境界がデータに食いつく様子を見たあと、λを少しずつ大きくして境界がなめらか(直線に近く)になることを確認しよう。/ しきい値スライダーを動かして、確率の色勾配の中を境界線が移動する様子を観察しよう。
0.01
50%
クラス0クラス1

実線: しきい値の決定境界
破線: 確率0.5の境界(しきい値が0.5以外のとき)
色勾配: 暖色(オレンジ)=クラス0寄り、寒色(青)=クラス1寄り

ten-crop augmentation — テスト時にも拡張する

分類器の精度を、モデルを訓練し直さずに底上げする小技として、ten-crop augmentation(テンクロップ拡張)を紹介します。これはモジュール5で学んだ Test Time Augmentation(推論時のデータ拡張)の具体的な一手法です。

ten-crop拡張(Ten-Crop Augmentation) のやり方はこうです。1枚のテスト画像から、四隅+中央の5か所を切り出し(クロップ)、さらにそれぞれの左右反転を加えて計10枚を作ります。この10枚すべてをモデルに通し、出てきた予測(確率)を平均します。

なぜ効くのでしょうか。1回きりの予測は、たまたま切り出した位置や向きに引きずられて外れることがあります。しかし10通りの見え方で予測して平均を取れば、まぐれ当たりやまぐれ外れがならされ、より安定した答えになります。これはモジュール5で学んだアンサンブル(弱い予測の多数決)と同じ発想を、1つのモデルの中で実現していると考えられます。追加の訓練が要らず、推論を10回回すだけで精度が少し上がる――手軽なわりに実務でよく使われるテクニックです。

物体検出 — 「どこに何があるか」を当てる

動機 — 分類では足りない場面

これまでの分類器は、画像1枚につき答えを1つ返しました。しかし現実には、「1枚の写真の中に、歩行者が3人・車が2台・信号が1つ」というように、複数の物体がそれぞれ別の場所にいる状況が普通です。自動運転、外観検査(キズがどこにいくつあるか)、ロボットの物体把持――どれも位置の特定が欠かせません。

物体検出(Object Detection) は、この要求に応える課題です。出力は、各物体を囲む長方形の枠―― バウンディングボックス(Bounding Box) ――と、その中身のクラス名、そして確からしさ(スコア)のセットになります。

直感 — 2つの思想: R-CNN系 と YOLO

物体検出には大きく2つの流派があり、その思想の違いを押さえることが理解の近道です。

R-CNN系(Region-based CNN) は、「まず怪しい場所に見当をつけ、それから中身を調べる」 という二段構えの思想です。最初に「ここに何かありそう」という候補領域(region proposal)をたくさん提案し、その一つひとつをCNNで分類していきます。人間が写真を見て、気になる箇所を順番に確認していくのに近い、丁寧なやり方です。精度は高くなりやすい一方、候補を一つずつ調べるため処理は重く、遅くなりがちです。

YOLO(You Only Look Once) は、名前の通り 「画像を一度だけ見て、位置とクラスを一気に予測する」 という思想です。画像をグリッドに区切り、各セルが「自分の担当エリアに物体があるか、あるならどんな枠でどのクラスか」を同時に出力します。候補を一つずつ調べる段階を踏まないため圧倒的に速く、リアルタイム処理(動画・自動運転)に向きます。かつては精度で二段構えに劣るとされましたが、その差は年々縮まってきました。

一言でまとめれば、R-CNN系は「見当をつけてから調べる(丁寧・高精度・低速)」、YOLOは「一目で全部当てる(一括・高速)」。速度と精度のどちらを重視するかで選び分ける、というのが実務の勘所です。

式 — IoU: 枠の「重なり具合」を測る

検出では、モデルが出した枠が正解の枠とどれだけ一致しているかを数値で測る必要があります。そのものさしが IoU(Intersection over Union) です。名前が示す通り、2つの枠 AA, BB について、共通部分(Intersection)の面積を、和集合(Union)の面積で割った比として定義されます。

IoU(A,B)=ABAB\mathrm{IoU}(A, B) = \frac{\lvert A \cap B \rvert}{\lvert A \cup B \rvert}

IoUは0から1の値を取ります。2つの枠がまったく重ならなければ0、完全に一致すれば1です。実務では「IoUが0.5以上なら正解の枠を当てたとみなす」といったしきい値でモデルの良し悪しを判定します。分子が「重なった部分」、分母が「どちらかの枠が占める全体」なので、位置がずれても大きさが違っても、その両方をまとめて1つの数で評価できる点が優れています。

式 — NMS: だぶった枠を1つに絞る

検出モデルは、1つの物体に対してよく似た枠を何枚も出してしまいがちです(グリッドの隣接セルが同じ車を報告する、など)。この重複を掃除するのが 非最大抑制(NMS)(Non-Maximum Suppression) です。手順はシンプルです。

  1. 出力された枠のうち、スコアが最も高い枠を1つ選び、採用する。
  2. 残りの枠のうち、採用した枠とのIoUがしきい値を超えるものは「同じ物体のだぶり」とみなして捨てる
  3. まだ残っている枠に対して、1〜2を繰り返す。

こうして、物体1つにつき最もスコアの高い枠だけが生き残り、重複が消えます。「非最大(=最高スコア以外)を抑制する」という名前の通りです。IoUのしきい値がNMSの効き具合を決めます。しきい値を低くするほど「少しでも重なれば消す」ので枠が減り、高くするほど重なりに寛容になって枠が残りやすくなります。

IoUとNMSを手で動かす

この2つは、動かして初めて腑に落ちます。下のIoU/NMSプレイグラウンドでは、まず2つのボックスをドラッグ・リサイズして、重なり具合が変わるとIoUの値がどう動くかを体感してください。完全に離すと0、ぴったり重ねると1に近づきます。半分ずらしたときの値が意外と小さいことにも気づくはずです。次にNMSモードに切り替え、たくさんのだぶった枠に対してしきい値スライダーとステップ実行を操作し、「最高スコアを残して、それと重なりすぎる枠が1つずつ消えていく」様子を追ってください。しきい値を変えると最終的に残る枠の数がどう変わるか、実際に確かめるのがおすすめです。

IoU / NMS プレイグラウンド

IoUモード: ボックスをドラッグ・コーナーをリサイズして、重なり方とIoU値の関係を体感しよう。半分重ねたときの値が意外と小さいことに気づくはず。/ NMSモード: しきい値を変えてから「次のステップ」を押して、最高スコアのボックスが残り、重なりすぎる候補が除去される流れを追ってみよう。
ボックスA 面積: 39600
ボックスB 面積: 46800
交差面積(Intersection): 14000
和集合面積(Union): 72400
IoU = 0.193
ヒント: 図のコーナーをドラッグしてリサイズ、内部をドラッグして移動できます。
ABIoU = 0.193Intersection

コース全体のまとめ

7つのモジュールを通じて、私たちはゼロから機械学習の一通りを歩き切りました。全体像を振り返ります。

  • M1:AI ⊃ 機械学習 ⊃ 深層学習という関係、モデル=パラメータを持つ関数 y=f(x;θ)y=f(x;\theta)、そして過学習と未学習という中心的な緊張関係を学びました。
  • M2:ニューロン=線形和+活性化という最小部品から出発し、それを組んで論理を表現し、Train/Validation/Test の使い分けという鉄則を確認しました。
  • M3:活性化関数・softmax・交差エントロピー、そして重みを使い回す畳み込みというCNNの核心部品を組み立てました。
  • M4:損失を勾配降下で下げる学習のしくみ、誤差逆伝播の直感、SGD・Momentum・Adam といった最適化を扱いました。
  • M5:過学習との戦い。データ拡張、Dropout、BatchNorm という、汎化を守るための道具をそろえました。
  • M6:少ないデータで戦う転移学習。事前学習済み特徴+古典分類器という実務の定石を身につけました。
  • M7:ロジスティック回帰の中身、そして物体検出(R-CNN系 vs YOLO、IoU、NMS)へと視野を広げました。

貫いているメッセージは一貫しています。機械学習とは、データからパラメータを調整して関数を作る営みであり、その最大の敵は過学習であり、それに対処する工夫の積み重ねが実務である、ということです。数式の細部は忘れても、この骨格と、パラメータを動かして得た「手ざわりの直感」は、みなさんの中に残るはずです。

次に学ぶなら

このコースは、機械学習の広く使われる土台をカバーすることに絞りました。ここから先に広がる世界は大きく、いくつかの主要テーマは本教材のスコープ外です。それでも、次の一歩を踏み出したい人のために、定番の道しるべを挙げておきます。

  • 強化学習(Reinforcement Learning):試行錯誤を通じて「報酬を最大にする行動」を学ぶ分野です。ゲームAIやロボット制御の土台。定番教材として Sutton & Barto の『Reinforcement Learning: An Introduction』(無償公開版あり)、David Silver の講義動画が有名です。本コースでは扱っていません。
  • Transformer と大規模言語モデル(LLM):ChatGPT をはじめとする近年の生成AIの中核アーキテクチャです。“Attention Is All You Need” の論文、および解説記事 “The Illustrated Transformer” が入口として定番です。本コースの分類・検出とは別系統の技術で、詳細はスコープ外です。
  • データサイエンス全般:機械学習を「道具の一つ」として、統計・データ前処理・可視化・実験計画まで含めて扱う領域です。オンライン講座(Coursera の Andrew Ng『Machine Learning』、fast.ai の実践的コース)や、scikit-learn の公式ユーザーガイドが、手を動かしながら学ぶのに向いています。

いずれも、本コースで得た「モデル・損失・最適化・過学習」という共通言語がそのまま効いてきます。ここが終わりではなく、自分の研究やキャリアの課題に機械学習を当てはめる旅の出発点です。おつかれさまでした。

確認クイズ

確認クイズ(0 / 5 問回答)正解 0 / 5
  1. ロジスティック回帰で、線形和 z = wᵀx + b を「0〜1の確率」に変換するために通す関数はどれですか。

  2. ロジスティック回帰の損失に L2 正則化項 λΣw² を加え、λ を大きくすると決定境界はどう変化しますか。

  3. ten-crop augmentation(テスト時拡張)の説明として正しいものはどれですか。

  4. 物体検出の R-CNN 系と YOLO の思想の違いとして正しいものはどれですか。

  5. 非最大抑制(NMS)が行う処理として正しいものはどれですか。