今回の記事はDocker上にYOLOの開発環境を作る方法をご紹介していきます。YOLOの開発環境は正直なかなか構築手順が定まっていないように感じているのでこの機会に自身のPCの環境にぐらいは適したDockerコンテナを作ってみようという考えです。
今回の記事のゴール目標は、Docker上にYOLO・Darknetの環境を構築して、その環境で任意の画像をYOLOの処理によって領域検出するところまで行ってみようと考えたいます。
YOLO開発環境環境とDockerバージョン
Docker version 19.03.12
dockerimageのPythonは下記
python 3.6
YOLOの既存のWeightは下記を利用(通常のyolov3はダウンロード時間的にNG)
yolov3-tiny
以上が今回のバージョン全て
Dockerコマンド内での操作
まずは、GPUがあるバージョンとないバージョンで設定など微妙に違います。まずはGPUを使用しないバージョンから説明していきます。
GPU使用しない場合
非常に簡単です。まずは、dockerコンテナを立ち上げます。Pythonのimageを使用してdockerコンテナを起動していきますが、Pythonのimageをまだ持っていない方は適宜pullで取ってきてください。
docker run -it -p 8888:8888 [imageのID] /bin/bash
こちらでコンテナの起動とbash
を開けてると思いますのでこのまま操作を行なっていきます。
まずはDarknetを撮ってくる必要があるのでgitよりインストール。そのためにまずはDockerコンテナ内にgitをインストールしておきます。必要になるのでvimも同時にインストールしておきましょう。
apt-get update
apt get install git vim
途中でyesとか入力すれば問題なくインストールできます。完了後は下記でレポジトリをcloneしていきます。
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
レポジトリをクローンしてそのレポジトリないでmakeコマンドを使用する感じです。これでなんと準備完了です。GPUを使用する場合はここで少し記述をいじる必要がありますが今は置いておきましょう。
次にこのディレクトリ上で下記を実行しYOLOの学習ずみモデルをダウンロードしてください。
wget https://pjreddie.com/media/files/yolov3.weights
以上全て完了すれば下記を実行してみてください。
うまく検出できていると思います。
./darknet detect cfg/yolov3.cfg yolov3.weights data/eagle.jpg
GPU使用する場合
自身のPC端末がGPUを積んでいるかが重要です。もちろん積んでいないとGPUは使用できません。また、docker上でコンテナ作成を行うばいは2020/段階ではmacOS上でGPU対応の環境環境構築を行うことができると言う旨の記事を見つけられておりませんので素直にUbuntuにインストールするのが吉なのかもです。もしくはdockerを諦めてAWSやABCIなどを利用するなどの方法が良いと思われます。
nvidea-dockerを使用し、imageからdockerコンテナを作成する方法に関しては下記を参照ください。
GPU使用する場合の処理の変更は基本的にほぼありません。自身のPCがGPUを積んでいるかどうかのみで積んでいる場合は上記の「make」前にMakefileを少しだけ変更するのみです。では手順を再度行なっていきます。
apt-get update
apt get install git vim
git clone https://github.com/pjreddie/darknet.git
cd darknet
[ここで追加の操作あり]
make
wget https://pjreddie.com/media/files/yolov3.weights
./darknet detect cfg/yolov3.cfg yolov3.weights data/eagle.jpg
ではその追加の操作を示していきます。
docker内ですのでvimを使用します。
vim Makefile
一番上にGPU=0になっている箇所があるので下記のように変更
GPU=0 → GPU=1
〜(省略)〜
保存してmakeからは同じ手順。
何が一番めんどくさいかと言うとやはりdockerを新しくするのがめんどくさいですね。。
上記内容はこちらのサイトを参考にさせていただきました。非常にわかりやすくまとめていただいております。こちらのサイトにはDockerfileもあるようなのでdockerfileのbuildのみで環境作れちゃうと思います。
dockerでGPUは必要かどうかに関して比較してみた記事も書いたので下記をご参照ください。
コメント
[…] […]
[…] ・YOLO非常に処理が早いことが有名なYOLOです。上記の手法とは別の方法で物体検出を行なっていることが大きいそうです。チュートリアルはあるのですが、C言語で書かれているのそのあたりが少し問題です。ただし、最近はラッパーが出てきているという噂もきております。こちら過去に記事を書いておりますんのでこちらをご参照ください。 […]