【フレームワークを使用せず】ゼロから作る物体検出AIモデル
【No.0】ゴールを設定

1. 本シリーズについて

このシリーズは、物体検出のAIモデルをゼロからpythonで構築しようというものになります。ただし、PytorchやTensorFlowなどの機械学習系フレームワークを使用せずに構築していきます。

なぜこの様な苦行をするかというと、このシリーズの意図を「物体検出が、実際どの様なアルゴリズムで組まれているかを理解する」としています。
フレームワークを使用しないことで、より根幹の理解を深めることが期待できるという理由です(ニューラルネットワークから全て関数化して実装していきます)。

是非このシリーズを読んでいただきたい方として

①「ultralyticsなどで、なんとなく物体検出モデルを使用しているが、そもそもどういう構造で検出されているか知りたい」という方や、「物体検出の各パラメータ(confやlrなど)を、なんとなくいじっているが、正直どういう意味かわかっていない」 という方

②「オリジナルの物体検出モデルを作りたいが、ベースとなる基礎知識が不足している」という方

上記の様にお考えの方におすすめです。

2. 本シリーズのゴールを設定

このシリーズのゴールとして、
「YOLOv1」的な物体検出モデルを構築 としています。
YOLOv1というのは、物体検出の代表的なモデルです。2016に発表されたモデルで、2024年現在v10まで発表されています。

概要については後述させていただきます。

進め方として、モデル構造やアーキテクチャはそのまま踏襲しますが、細かい部分をもしかしたら変更するかもしれません。
そういう意味で「的な」とさせていただいております。

YOLOv1を選定した理由として、まず構成がそこまで複雑でないので、他のモデルと比べ構築に労力を費やさなくても良い点があります。

また、2016年発表のモデルということで、現在ではあまり実用的ではないという見方もできます。
一方で、現在の1ステージ型物体検出モデルの原型といっても良いと思いますので、そういう意味で、現在の最先端モデルやYOLOシリーズのアーキテクチャを理解する上で有益と考えます。

3. YOLOv1について

YOLOv1について、簡単な解説を行います。

概要

YOLOv1(正式にはYOLO)は2016年に発表された物体検出モデルです。

論文
https://arxiv.org/pdf/1506.02640

この当時、物体検出と言えばR-CNNに代表される様な2ステージ型のアーキテクチャが主流でした。
2ステージ型とは、処理が前半(領域の提案)と後半(クラス分類)に分けられているものを指します。

一方、YOLOv1はアーキテクチャが1ステージ型(領域の提案とクラス分類を同処理で行う)となっており、2ステージ型に比べ処理スピードが格段に早くなりました。
その結果、YOLOv1はリアルタイムでの物体検出を可能にしました。

モデルの構造

図1 YOLOv1のモデル構造 (https://arxiv.org/pdf/1506.02640'>https://arxiv.org/pdf/1506.02640より引用)

YOLOv1は、入力画像をS*Sのグリッドセルに分割します(論文ではS=7)。

各グリッドセルは、B個のバウンディングボックス(論文ではB=2)を保有しています。

それぞれのグリッドセル毎に、バウンディングボックスの座標(x=中心のx座標, y=中心のy座標, w=バウンディングボックスの幅, h=バウンディングボックスの高さ)と信頼度(confidence)を予測します。

一方で、各グリッドセルはC個のクラスに対する確率(論文ではC=20)を予測します。

バウンディングボックスの信頼度とクラス確率を用いて、クラス毎のバウンディングボックス信頼度を算出します。

クラス毎のバウンディングボックス信頼度の高い順からNMS(Non-Maximum Suppression)にかけ、余計なバウンディングボックスを排除し、最終的な推論を決定します。

アーキテクチャ

図2 YOLOv1のアーキテクチャ (https://arxiv.org/pdf/1506.02640'>https://arxiv.org/pdf/1506.02640より引用)

YOLOv1は24層のCNNと4層のPooling層、最後に2層の全結合層からなります。

グリッドセルS=7、バウンディングボックスB=2、クラスの数C=20の時、最終の出力は7*7*30となります。30の内訳は、
1つ目のバウンディングボックスのx座標値、y座標値、幅w、高さh、信頼度が1セットです。今、バウンディングボックスは2つですので、5*2=10となります。更に、残りの20はクラス数です。

ロス関数

図3 YOLOv1のロス関数 (https://arxiv.org/pdf/1506.02640'>https://arxiv.org/pdf/1506.02640より引用)

1, 2行目: バウンディングボックスについての損失計算
3, 4行目: オブジェクト有無についての損失計算
5行目: クラスについての損失計算

4. 引用論文

「You Only Look Once: Unified, Real-Time Object Detection」
(Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi)

https://arxiv.org/pdf/1506.02640

・物体検出AIの導入
・アノテーションサービス
・手書き計算サイト ZONE++ の運営
・技術ブログ LAB++の運営
   上記をメインにおこなっております

詳しくはこちら

Category

Search