YOLOPv2による走行車線・白線・他車の同時検知

GitHub - CAIC-AD/YOLOPv2: YOLOPv2: Better, Faster, Stronger for Panoptic driving Perception

この記事では、YOLOPv2を用いて、ドライブレコーダーの映像から、走行(可能)車線、白線、そして他車を同時に検知する方法を紹介します。

YOLOPv2とは

YOLOPv2は、自動運転での応用を見据え、ドライブレコーダーの映像を入力として、1つのネットワークで、走行車線、白線のセグメンテーション、そして他車の検知を同時に行うモデルです。

ネットワークは、入力画像から特徴量を抽出するタスク共通のエンコーダー(Backbone)と、タスクに応じた3つのデコーダー(Drivable area segment head, Lane segment head, Detect head)から構成されます。

3者を同時に推定するネットワーク構成の根本は、YOLOPやHybridNetsといった先行研究と変わらないものの、エンコーダーをE-ELANに変更し、(先行研究では走行車線と白線は共通であった)デコーダーを3タスク分それぞれ準備することで、精度の向上と高速化を実現しています。

デモ

それでは、Google Colaboratoryを使って実際に実行していきます。

なお、記事内で紹介したコードをすべて含むノートブックは、以下のリンクから直接参照することができます。

Open In Colab

環境設定

はじめに、画面上部のメニューから、「ランタイム」、「ランタイムのタイプを変更」と進み、「ハードウェアアクセラレータ」を「GPU」に変更しておきます。これにより、推論時にGPUを利用することができます。

続いて、公式リポジトリのクローンとライブラリのインストールを行います。

# リポジトリのクローン
!git clone https://github.com/CAIC-AD/YOLOPv2.git
%cd YOLOPv2

# ライブラリのインストール
!pip install -r requirements.txt

モデル設定

学習済みパラメータが公開されているので、ダウンロードします。

!wget -P data/weights https://github.com/CAIC-AD/YOLOPv2/releases/download/V0.0.1/yolopv2.pt

推論

colab上に推論対象のファイルをアップロードします。ファイルは静止画、動画のいずれでも大丈夫です。

demo.pyによって推論が実行され、YOLOPv2/runs/detect/expに入力ファイルと同じ名前で結果が保存されます。

# 対象ファイルの指定
source = 'アップロードしたファイルのパス'

# 推論
!python demo.py --source $source

YouTube、PIXTAから取得したドライブレコーダーの映像に対して推論を実行した結果がこちらです。左がオリジナル、右が推論結果です。

夜間の結果がこちら。

colabも面倒だよ、という方は、以下のリンクからブラウザ上で簡単に試すこともできます。

まとめ

手元の動画に対しても、昼夜問わず精度良く検知できていることが確認できました。

自動運転の根幹をなす非常に重要な技術でありながら、比較的シンプルな作りなので、ぜひコードを追いながら試してみてください。

参考文献

GitHub - CAIC-AD/YOLOPv2: YOLOPv2: Better, Faster, Stronger for Panoptic driving Perception