今回の記事は領域検出で有名なC言語オープンソースAPIのYOLOの処理速度がGPU搭載のマシンとそうでないマシンによってどの程度の際になるのかを検証していきます。
GPUとYOLOなどの環境
GPU環境
cuda: 10.0.130.1
cudnn:7.42
mccl:2.4.7-1
YOLOバージョン
yolov3のweightをダウンロードして使用
環境構築
GPU環境と非GPU環境で環境構築方法が違います。
build時のMakefileの記述を少し変更するのみなのです簡単です。
詳しくは下記記事を参照ください。
今回の記事上ではGPUあり版の環境構築を行います。
apt-get update
apt get install git vim
git clone https://github.com/pjreddie/darknet.git
cd darknet
vimなりなんなりでMakefile修正
======修正点=======
GPU=0 → GPU=1
cud=0 → cud=1
make
wget https://pjreddie.com/media/files/yolov3.weights
./darknet detect cfg/yolov3.cfg yolov3.weights data/eagle.jpg
処理速度の違い検証
では実際に処理速度をみていきましょう。
使用する画像は鳥の画像を使用してみます。
GPUなし版の場合。
./darknet detect cfg/yolov3.cfg yolov3.weights data/eagle.jpg
layer filters size input output
0 conv 32 3 x 3 / 1 608 x 608 x 3 -> 608 x 608 x 32 0.639 BFLOPs
1 conv 64 3 x 3 / 2 608 x 608 x 32 -> 304 x 304 x 64 3.407 BFLOPs
〜〜〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜〜
105 conv 255 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 255 0.754 BFLOPs
106 yolo
Loading weights from yolov3.weights...Done!
data/eagle.jpg: Predicted in 25.496686 seconds.
bird: 99%
約25秒で処理完了です。時間としては長いかな。。
GPUあり版の場合。
./darknet detect cfg/yolov3.cfg yolov3.weights data/eagle.jpg
layer filters size input output
0 conv 32 3 x 3 / 1 608 x 608 x 3 -> 608 x 608 x 32 0.639 BFLOPs
1 conv 64 3 x 3 / 2 608 x 608 x 32 -> 304 x 304 x 64 3.407 BFLOPs
〜〜〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜〜
104 conv 256 3 x 3 / 1 76 x 76 x 128 -> 76 x 76 x 256 3.407 BFLOPs
105 conv 255 1 x 1 / 1 76 x 76 x 256 -> 76 x 76 x 255 0.754 BFLOPs
106 yolo
Loading weights from yolov3.weights...Done!
data/eagle.jpg: Predicted in 0.296851 seconds.
bird: 99%
なんと驚異の0.29秒。早すぎ。。
正直リアルタイム認識を行う場合はこの程度の処理速度が必要と思われるのでGPU使用はリアルタイム時には必須と感じます。約10倍の差が出ておりますね。これは驚きです。
以上が今回の検証でした。
コメント
[…] 【YOLO】GPU使用と非使用でのYOLOの処理速度の違い。 […]