【物体検出】vol.7 :YOLOv3をもっと便利に!魔改造のススメ

YOLOv3では、やりたいことはほとんど標準のコマンドと引数で実現できますが、「もうちょっとこうしたいんだけどなぁ」という場面もあります。
今回のゴールは、「動画のフレーム番号に対応した、検出結果のログを取り出したい(=検索で使いたいから)」です。
そのためには、次のようなことが出来ないといけません。
こんなことはできますか?
- 複数の静止画について、一括で処理を掛けたい
- 動画から静止画を切り出しながら、静止画で検出処理をしたい
- 動画のフレーム数をログに書き出してくれたら検索に使えるのに
- カメラから取得した映像にリアルタイムで検出処理をした結果を動画で保存したい
実は、上でリストアップした
- はtestコマンドに対するインプットを "< jpeglist.txt" で表現すれば対応できます。
- の動画から静止画を切り出す処理は、元々ある-prefixオプションで実現していますし、
- についても、動画検出結果をjsonで書き出すことはできませんが、スクリーンへの出力をtxtで出力できます。
- は-cオプションで-output_fileを指定すれば実現可能です。
「基本的な機能は、考え抜いたうえで、すでに用意しているので、あとの必要なことはShellプログラムや、他のスクリプトでやってくれたまい、君たち」と恐らくAlexey氏は考えられているのではなかろうか、とは当R&DセンターのM室長の言です。(Alexey氏がどう考えたか本当のところはわかりませんが...)
それでもやはり「こうしたいけれどどうすればよいのか?」と多くの悩める方たちが、Alexey氏のGithubのIssueやPull Requestで質問しているのを"英語"で読むことができます。(残念ながら、日本語で質問している人はいません。)
ソースコード魔改造のヒントは、GithubのIssueを読むべし。
ソースコード魔改造事例
素晴らしいことに、Alexey氏のcソースコードをすこし魔改造して(改悪して)リビルドすれば、ちょっとしたことなら出来てしまいそうです。
実際に、私もいくつか処理を加えて、やりたいことを実現してみました。その事例を以下でご紹介します。
同じものを手にしたい方は、ページ末尾の問い合わせ先から"見積もり依頼"をお願いします。
その1:フォルダ内の静止画を一括処理したい
方針:検出させたい画像のファイルリストを作成。
リストで与えたファイルフルパスからパス部分とファイル名部分を分け、Resultフォルダ内にサブディレクトリと出力ファイルを生成する。
修正箇所:detector.c 1341行目あたり~
関連情報:https://github.com/AlexeyAB/darknet/issues/1396
その2:動画検出のログファイル出力機能を追加する
方針:動画のフレーム番号(頭からの連番)と検出結果をjson形式のログに出力する。
・オプション"-prefix"か"-out_filename"を指定してるときだけjsonファイルを出力
・出力先は"-prefix"か"-out_filename"の指定先と同じ(両方指定しているときは"-prefix"の方に出力)
・ファイル名は"result.json"で固定
・コマンドプロンプトへのログ出力で画像ファイル名(または連番)を表示する
修正箇所:demo.c 206行目あたり~352行目まで
Pythonスクリプトで自動処理化
動画検出→静止画保存の一気通貫処理 video2video.py
方針:動画→静止画切り出し→yolo物体認識→動画保存を連続実行する
・動画→静止画はdataフォルダの下に出力
・静止画→yolo物体認識はresultsフォルダの下に出力
・yolo物体認識→動画保存はresultsフォルダの下(物体認識の静止画と同じ階層)に出力
※data、resultsフォルダの下の階層が同じになるようにフォルダを自動生成します
コマンド例
python video_2_video.py -i data/test.mp4 -o test -r 29.97
-i : 処理する動画ファイル(必須)
-r : 切り出し/動画作成時のフレームレート(必須、デフォルトは30)
-o : 出力先フォルダ名(デフォルトは"frame")
▼この記事を書いたひと
R&Dセンター 野原 佐知世
R&Dの「ちょっとしたものづくり」を主に担当。360°パノラマ、機械学習などシステム、画像処理を中心に活動しています。
機械学習・AIの最新記事
- 【エッジAI】Raspi5+SONY IMX500で30FPS枕木検出チャレンジ!~鉄道技術展2025デモ編 vol.25
- 【エッジAI】Raspi+SONY IMX500で30FPS物体検出チャレンジ!~オリジナルモデル、静止画・ログ保存編 vol.24
- 【エッジAI】Raspi5+SONY IMX500で30FPS物体検出チャレンジ!~環境整備編 vol.23
- 【エッジAI】Raspi5+SONY IMX500で30FPS物体検出チャレンジ!~検出実行編 vol.22