【物体検出】vol.4 :YOLOv3をWindows⇔Linuxで相互運用する

相互運用
LinuxでもWindowsでもディレクトリ構造や設定ファイル、モデルデータ(重みデータ)は同じなので、相互に流用できます。
学習時にはLinuxで実行し、モデルデータやclassファイルをWindowsに持ち込んで、動画や静止画の評価に回すなどワークフローを柔軟にできます。
注意事項:
Windowsで作ったclassファイルやdataファイルなど、テキスト形式の設定ファイルでは、改行コードや文字エンコードの変換が必要です。
この目的のために作られたdos2unix.pyというプログラムがあります。
Windows版とLinux版のYOLOv3
ほぼ同格なLinux(Ubuntu)、Windowsの2台のマシンで、同じデータを使ってYOLOv3の学習を実施してみました。
20000イテレーションまで実施し、1000イテレーション毎に保存される重みファイルのタイムスタンプ間隔を計測します。
Linuxマシン
Deepstation
i7 7700 3.6GHz*8、メモリ32GB
NVidia GeForce GTX1080Ti 11GB
Ubuntu 16.04.6LTS 64Bit
Windowsマシン
HP OMEN 880-000jp Desktop
i7 7700 3.6GHz*8、メモリ32GB
NVidia GeForce GTX1070 8GB
Windows10Professional 64bit
基本的な構成としてはほぼ同格。
GPU性能は、1070と1080Tiでは20-30%程度異なるようです。
結果
1000イテレーションに費やした時間
- Ubuntu:40-43分
- Windows:52-55分
ほぼ20-30%の違いです。

結論
Linux、Windowsで差はある...が学習速度の違いは、GPUの性能がそのまま出ているようです。
(Linuxの方が圧倒的有利かと先入観を持っていたが、YOLOv3のバイナリで実行した限りにおいて、GPU性能差以上の違いがなさそう)
Windwows版とLinux版をそれぞれ使ってみて気が付いた点
- Windows版もLinux版もGPUメモリ不足のエラーが出る
- Windows版もLinux版もtrainをしながらtestができる
- Linux版はtrain時に-mapオプションを付けるとmap算出時に落ちる
- Windows版ではtrain時に-mapオプションを付けても大丈夫
- trainしながら動画で検出して、検証結果を動画に書き出すと落ちる場合がある
- Windiws版で、trainをしながら、testし、動画を書き出すなどの並列処理ができた。(落ちる場合もある)
※trainが途中で止まると損失が大きいので、(特に動画を使った)評価とは分けたほうが良いです。
(参考)WindwowsゲーミングPCでリアルタイム検出してみると...
最後に、おまけとして、Windowsゲーミングノートの内蔵カメラで、リアルタイムに検出した場合の驚くべきパフォーマンスを示して、本記事を終わります。
Windowsゲーミングノート
OMEN by HP Laptop 17-an0xx
i7 7700 2.8GHz*8、メモリ16GB
NVidia GeForce GTX1070 8GB
Windows10 Professional 64bit
内蔵カメラ -c 0でdemoモード起動した際のスクリーンショットです。モデルは、VOC COCOの学習済モデル。34.2fps出ています。

▼この記事を書いたひと
R&Dセンター 松井 良行
R&Dセンター 室長。コンピュータと共に35年。そしてこれからも!
おすすめの関連記事
機械学習・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