[HybridNets] 機械学習で交通物体検出、車線検出 [Python]

2022年3月21日月曜日

Artificial Intelligence

本記事では、HybridNetsと呼ばれる機械学習手法を用いて、交通物体検出、運転可能エリアのセグメンテーション、車線検出する方法をご紹介します。

アイキャッチ

HybridNets

概要

HybridNetsは、交通物体検出、運転可能エリアのセグメンテーション、車線検出などのマルチタスクを同時に実行するEnd to Endの知覚ネットワークです。

HybridNetsは、重み付けされた双方向機能ネットワークに基づく効率的なセグメンテーションヘッドとボックス/クラス予測ネットワークから構成され、アンカーの自動的なカスタマイズや、効率的なトレーニング戦略により、運転可能エリアのセグメンテーション、車線検出などのマルチタスクをEnd to Endで実現しながら、従来技術よりも優れた精度を実現しています。

HybridNetsアーキテクチャ
出典: HybridNets: End-to-End Perception Network

詳細はこちらの論文をご参照ください。

本記事では、上記手法を用いて、任意の運転動画から交通物体検出、運転可能エリアのセグメンテーション、車線検出する方法をご紹介します。

デモ(Colaboratory)

それでは、実際に動かしながら交通物体検出などを行っていきます。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

環境セットアップ

それではセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

はじめに、論文発表元のGitHubからソースコードを取得します。

!git clone https://github.com/datvuthanh/HybridNets.git

%cd /content/HybridNets
# Commits on Feb 14, 2023
!git checkout 1cc6a1b8b3452d6728e7e276ed3fb4c08f1d9d39

最後に、ライブラリをインストールします。

%cd /content/HybridNets
!apt-get install git unzip wget ffmpeg libsm6 libxext6 -y

!pip install -r requirements.txt
!pip install --upgrade gdown
!pip install moviepy==0.2.3.5 imageio==2.4.1
!pip install --upgrade --no-cache-dir gdown albumentations opencv-python

以上で、環境セットアップは完了です。

学習済みモデルのセットアップ

続いて論文発表元から提供されている学習済みモデルをセットアップしていきます。

!mkdir weights
!curl -L -o weights/hybridnets.pth https://github.com/datvuthanh/HybridNets/releases/download/v1.0/hybridnets.pth

以上で学習済みモデルのセットアップは完了です。

検出・セグメンテーション

それでは、交通物体検出、運転可能エリアのセグメンテーション、車線検出していきます。

まず、モデルに入力する動画をGoogle Colaboratoryにアップロードします。本記事では、こちらのPixabay様の動画を使用させていただきます。
また処理時間短縮のためMoviePyを使用して動画の1秒から7秒までを切り出して使用します。適宜ご利用の動画に合わせてご変更ください。

%cd /content/HybridNets
!rm -rf upload
!mkdir -p upload
%cd upload

import os
from google.colab import files

uploaded = files.upload()
uploaded = list(uploaded.keys())
file_name = uploaded[0]

# 半角スペース除去
rename = file_name.replace(" ", "")
os.rename(file_name, rename)

# 切り出し
clip_video = "/content/HybridNets/upload/subclip.mp4"
clip = VideoFileClip(rename)
# 1~7秒までを切り出し
sub_clip = clip.subclip(1, 7)
sub_clip.write_videofile(clip_video)

セットアップした動画を入力して予測を行います。

%cd /content/HybridNets
!python hybridnets_test_videos.py \
  --cuda True\
  --source /content/HybridNets/upload \
  --output /content/HybridNets/upload

出力結果をColaboratory上に表示します。

clip = VideoFileClip("/content/HybridNets/upload/0.mp4")
clip = resize(clip, height=420)
clip.ipython_display()

出力結果は以下の通りです。

HybridNets出力結果

モデル一つで走行する車や車線が検出され、走行する道路がセグメンテーションされていることが確認できます。

まとめ

本記事では、HybridNetsを用いた交通物体検出、運転可能エリアのセグメンテーション、車線検出を行いました。
これを機に機械学習に興味を持つ方が一人でもいらっしゃいましたら幸いです。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1.  論文 - HybridNets: End-to-End Perception Network

2. GitHub - datvuthanh/HybridNets

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology