1. YOLOv1の概要と物体検出の基本 [0]

YOLOv1は、画像全体を一度に処理し、単一のニューラルネットワークで物体検出と分類を同時に行うことで、リアルタイムでの物体検出を可能にした画期的なモデルである。

1.1. 物体検出の概念 [3]

  1. オブジェクトクラス予測(Class Prediction) [4]
    1. 画像内の物体の種類(クラス)を分類する作業である。
  2. オブジェクトローカライゼーション(Object Localization) [5]
    1. 物体のクラス予測に加え、物体がどこに位置するかをバウンディングボックス(中心座標xy、幅w、高さh)で特定する作業である。
  3. オブジェクト検出(Object Detection) [7]
    1. 1つの画像内に複数の物体が存在する場合に、それぞれの物体の位置(バウンディングボックス)とクラスを同時に検出する作業である。

1.2. 物体検出の2つの主要な方式 [11]

  1. ワンステージ検出(One-Stage Detection) [11]
    1. 物体のクラスと位置情報を同時に予測し、結果を得る方式である。
    2. 画像内のすべての位置を物体が存在しうる領域とみなし、候補領域に対してクラス予測を行う。
    3. 入力画像が畳み込み層を通過すると、各グリッドから直接クラス予測結果とバウンディングボックスの座標値が回帰によって得られる。
  2. ツーステージ検出(Two-Stage Detection) [11]
    1. まず候補領域を生成し、その結果を受けてクラス予測を行う方式である。
    2. 入力画像から物体が存在しそうな候補位置を提案する「領域提案(Region Proposal)」プロセスを経た後、その結果に基づいてクラス情報とバウンディングボックスの座標値を得る。
    3. 代表的なモデルとしてFast R-CNNがある。 [23]

1.3. 物体検出モデルの進化とYOLOの位置づけ [24]

  1. 初期のモデル [25]
    1. R-CNN、Fast R-CNN、DPM(Deformable Part-based Model)など、古典的な手法が用いられていた。
  2. ディープラーニングの登場 [25]
    1. 2011年のAlexNetの登場以降、ディープラーニングに基づくモデルが多数発表されている。
  3. ワンステージとツーステージの進化 [26]
    1. モデルの発展は、ワンステージとツーステージの2つの方式に分かれて進んでいる。
    2. ワンステージ検出器:YOLOv1、YOLOv2、YOLOv3、SSDなどが含まれる。
    3. ツーステージ検出器:R-CNN系列のモデルやSPPネットワークがこれに属する。
  4. YOLOv1の性能特性 [28]
    1. YOLOv3は速度が速いが、精度はやや低い傾向がある。
    2. Fast R-CNNのようなツーステージ検出器は速度は遅いが、より精密な性能を示す。
  5. YOLOアルゴリズムの発展 [32]
    1. YOLOアルゴリズムは2016年のYOLOv1から始まり、YOLOv5やDOPI PULまで発展している。

1.4. YOLOv1の主要な特徴 [34]

  1. You Only Look Once(一度だけ見る) [36]
    1. 画像全体を処理する回数が1回であることを意味する。
  2. Unified(統合された) [38]
    1. ワンステージ方式であるため、物体クラス予測とローカライゼーションの全段階を単一のネットワークで実行する。
    2. 物体検出の課題を1つの統合されたフレームワークで解決しようとした。 [44]
  3. Real-Time Object Detection(リアルタイム物体検出) [39]
    1. 速度の改善に重点を置いたモデルである。
    2. テスト時で約45fps(YOLOv2は155fps)を達成し、従来のR-CNN(2~3fps)やDPM(30fps)に比べて大幅な速度向上を実現した。
  4. 多様なドメインでの検出可能性 [46]
    1. さまざまなドメインで物体検出が可能である。

2. YOLOv1のモデル構造と学習プロセス [49]

2.1. YOLOv1の統合された検出方式 [49]

  1. 従来の多段階プロセスを統合 [52]
    1. 従来の領域提案、特徴抽出、クラス分類、バウンディングボックス回帰といった複数の段階を、すべてワンステージで統合したことに大きな意味がある。
  2. 特徴マップの活用 [53]
    1. 画像全体から得られた特徴マップを活用し、バウンディングボックスとすべてのクラスに対する確率を計算する。
    2. 入力画像をグリッドに分割し、各グリッドセルごとにクラス確率マップの計算とバウンディングボックスの回帰が並行して行われる。

2.2. YOLOv1の出力形式と予測プロセス [56]

  1. グリッドセルによる画像分割 [56]
    1. 入力画像をS×S(例:7×7)のグリッドに分割する。
    2. 各グリッドセルは、複数のバウンディングボックス(例:2個)とクラス確率を予測する。
  2. バウンディングボックスの予測 [60]
    1. 各グリッドセルは、B個のバウンディングボックスを予測する。
    2. 各バウンディングボックスは以下の5つの値を出力する。
      1. 中心座標 (x, y):バウンディングボックスの中心位置。 [62]
      2. 幅と高さ (w, h):入力画像全体の幅と高さで正規化された値(0~1の範囲)。 [62]
      3. オブジェクト存在確率 (Confidence Score, PC):このボックスに物体が存在する確率。 [62]
    3. 複数のバウンディングボックスを予測するのは、異なるアスペクト比の物体に対応するためである。 [66]
  3. クラス確率の予測 [68]
    1. 各グリッドセルは、C個のクラス(例:20個)に対する確率を予測する。
    2. これは、バウンディングボックス内に物体が存在する場合に、その物体がi番目のクラスに属する確率を意味する。
  4. 最終出力テンソル [71]
    1. 各グリッドセルは、(B * 5 + C) の長さのベクトルを出力する。
    2. 例えば、S=7、B=2、C=20の場合、各グリッドセルは (2 * 5 + 20) = 30 の長さのベクトルを出力する。
    3. 全体としては、S×S×(B * 5 + C) のテンソルが出力される。

2.3. YOLOv1のネットワーク設計 [75]

  1. ベースモデル [76]
    1. GoogleNetの構造を参考にしている。
    2. 最初の20層の畳み込み層にはInceptionネットワークを活用し、事前学習(pre-train)を行った。
  2. 追加層とファインチューニング [76]
    1. その後、4つの畳み込み層と2つの全結合層を追加し、PASCAL VOCデータセットでファインチューニングを行った。
  3. 演算量の削減 [78]
    1. 畳み込み演算による演算量の増加を抑えるため、途中に1x1のリダクション(Reduction)層を挿入して演算量を削減している。

2.4. YOLOv1の学習(トレーニング)段階 [82]

  1. レスポンスの割り当て [83]
    1. 特定の物体に対して、どのグリッドセルがその物体を予測する責任を持つかを割り当てる。
    2. 物体のグラウンドトゥルース(正解)ボックスの中心が位置するグリッドセルに割り当てられる。
  2. バウンディングボックスの選択 [88]
    1. 推論段階では複数のバウンディングボックスを予測するが、学習段階ではIoU(Intersection over Union)値が最も高い予測ボックスを1つだけ使用する。
    2. IoUは、予測ボックスとグラウンドトゥルースボックスの重なり具合を示す指標である。
  3. 損失関数への反映 [90]
    1. 選択されたバウンディングボックスは、損失関数に反映される。
    2. IoUが最も高いボックスには高い重みが与えられ、それ以外のボックスには低い重み(0など)が与えられることで、学習が適切に行われる。

2.5. YOLOv1の損失関数 [98]

  1. 平均二乗誤差(Mean Squared Error)の活用 [98]
    1. 予測されたx, y, w, h、クラス確率、オブジェクト信頼スコアのそれぞれについて、正解値との誤差を計算する。
  2. 誤差の計算項目 [100]
    1. バウンディングボックス座標の誤差:すべてのグリッドセルで予測されたバウンディングボックスと正解ボックスの座標誤差。 [100]
    2. オブジェクト確率の誤差:すべてのグリッドセルで予測された物体に対する確率値と正解値の差。 [101]
    3. 信頼スコアの誤差:すべてのグリッドセルで予測された信頼スコアと実際の正解値の差。 [102]
  3. 重み付け(ラムダ値) [103]
    1. 損失関数には、特定の誤差がより多く反映されるように調整するラムダ値が導入されている。
    2. 例えば、オブジェクトが存在するグリッドセルと存在しないグリッドセルで異なる重みを使用し、学習のバランスを取る。
  4. 損失関数の要約 [107]
    1. グリッドセルにオブジェクトが存在する場合の誤差と、予測されたボックスが選択された場合の誤差を学習する。

3. YOLOv1の推論段階と実験結果 [108]

3.1. 推論段階の処理 [108]

  1. 出力テンソルの生成 [109]
    1. 畳み込み層を通過した後、S×S×(B * 5 + C) の出力テンソルが生成される。
    2. 各グリッドセルは、B個のバウンディングボックスとC個のクラス確率を含むベクトルを出力する。
  2. クラス信頼度スコアの計算 [111]
    1. 各バウンディングボックスについて、オブジェクト存在確率(Confidence Score)とクラス確率(Class Probability)を掛け合わせることで、クラス信頼度スコア(Class Confidence Score)を計算する。
    2. クラス信頼度スコア = オブジェクト存在確率 × クラス確率
  3. 多数のバウンディングボックスの生成 [115]
    1. 例えば、7x7グリッドで各グリッドが2つのバウンディングボックスを予測する場合、1つの画像から98個のバウンディングボックスが生成される。
    2. このように多数の候補ボックスが生成されるため、後処理が必要となる。

3.2. NMS(Non-Maximum Suppression)アルゴリズム [117]

  1. NMSの目的 [117]
    1. 1つの物体に対して予測された複数のバウンディングボックスの中から、最も予測精度の高いボックスを1つだけ残すためのアルゴリズムである。
  2. NMSの適用方法 [119]
    1. NMSはクラスごとに適用される。
    2. 各クラスにおいて、最も予測力の高いバウンディングボックスが残される。
  3. NMSの具体的な手順 [121]
    1. スコアによるフィルタリング:バウンディングボックスのクラス信頼度スコアが一定の閾値以下のボックスは除去または無視する。
    2. 最高スコアボックスの選択:残ったボックスの中から最もスコアが高いボックスBを選択する。
    3. IoUによる除去:選択されたボックスBと、残りのすべてのボックスとのIoUを比較する。IoUが高い(つまり、ボックスBと大きく重なる)ボックスは、同じ物体を検出しているとみなし、リストから除去する。
    4. 繰り返し:このプロセスを、残りのボックスがなくなるまで繰り返す。
  4. NMSの適用例 [128]
    1. 物体が1つの場合:複数の予測ボックスの中から、最もスコアの高いボックスが選択され、他の重なるボックスは除去される。 [128]
    2. 同じクラスの物体が複数ある場合:各物体に対して、最もスコアの高いボックスが残り、同じ物体を検出している他のボックスは除去される。異なる物体を検出しているボックスは残る。 [135]
    3. 異なるクラスの物体が複数ある場合:クラスごとにNMSが適用されるため、それぞれのクラスで最も予測力の高いボックスが残る。 [147]

3.3. YOLOv1の実験結果 [159]

  1. 性能と速度の比較(PASCAL VOC 2007) [160]
    1. 速度(FPS):YOLOはFast R-CNNに次いで速く、DPMやR-CNN系列よりも大幅に高速である(YOLO: 45fps、Fast R-CNN: 145fps、DPM: 30fps、R-CNN: 2-3fps)。
    2. 精度(mAP):Fast R-CNNが最も高く、YOLOがそれに続く(Fast R-CNN: 70-70.3、YOLO: 63、DPM: 52)。
    3. YOLOは小さな物体や特定のカテゴリの物体において、R-CNNよりもmAPが高いことが後続研究で示唆された。 [166]
  2. YOLOとR-CNNのエラー分析 [167]
    1. YOLOはFPSが高く、背景除去においてR-CNNよりも効果的である(背景に物体がないのに存在すると誤検出するミスが少ない)。
    2. YOLOとR-CNNを組み合わせることで、mAPが3.2%向上した。
    3. これは単なるアンサンブル効果ではなく、YOLOの高いFPSがシナジー効果を生み出したためであると著者らは主張している。
  3. 多様なドメインでの検出性能 [172]
    1. YOLOは、PASCAL VOC以外の新しいデータセット(Picasso、People-Art)でも、人検出タスクにおいて比較的高い性能を維持した。
    2. R-CNNやDPMは、新しいデータセットに適用するとAPスコアが大幅に低下するのに対し、YOLOは性能の低下幅が小さかった。
    3. これは、YOLOが多様なドメインで汎用的に機能するアルゴリズムであることを示している。

3.4. YOLOv1の限界点 [179]

  1. 小さな物体の検出性能の低さ [179]
    1. 物体が小さい場合、予測されるバウンディングボックスも小さくなり、IoU値の差が小さくなるため、最適な予測器の選択が難しくなる。
    2. 結果として、小さな物体に対する検出性能が低い。
  2. アスペクト比が異なる物体や密集した物体の検出の難しさ [182]
    1. 一般化された知識と異なるアスペクト比の物体や、密集して存在する物体(オブジェクト群)の検出が苦手である。
    2. この限界は、多くの検出モデルに共通する課題でもある。