飽きるまでやります。

私の私による私のためのメモ。内容に一切の責任を負えません。

DockerでYOLO v3

概要

Dockerでkeras-yolo3をGPUで動かしました.

github

github.com

Dockerfile

FROM nvidia/cuda:9.0-cudnn7-devel

# apt
RUN apt update
RUN apt install -y bzip2 wget git imagemagick

# install Anaconda3
RUN wget -q https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
RUN touch .bashrc
RUN bash Anaconda3-5.0.1-Linux-x86_64.sh -b
ENV PATH $PATH:/root/anaconda3/bin

# pip install
RUN pip install tensorflow-gpu==1.12.0 keras pillow matplotlib

# git clone keras-yolo3
RUN git clone https://github.com/qqwweee/keras-yolo3.git
WORKDIR /keras-yolo3

# download weights
RUN wget -q https://pjreddie.com/media/files/yolov3.weights
RUN python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

# mount dir(外から画像を置く)
RUN mkdir input_img

CMD ["python", "yolo_video.py", "--image"]

インストール

imagemagic

今回はこれにハマりました.yoloはPILで画像を表示していて,PILはimagemagicで画像を表示しているようです.

Anaconda3

apt install python3-pipでは面倒そうな問題が起こったのでAnacondaを入れました.容量問題がありますが今回は気にしないことにします.

tensorflow-gpu

CUDA9.0に対応しているtensorflow-gpu1.12.0を入れています.

keras-yolo3

githubからcloneしたのち,ディレクトリに移動します.

weights

githubの手順通りにweightsをダウンロードしてkeras用にコンバートします.

mount

keras-yolo3/の下に試したい画像を置くためのディレクトリを作っておきます.お試しなので適当です.

CMD

yolo_video.pyを実行すればyoloが動きますが,--imageオプションで画像モードにしています.お試しなので適当です.

docker run

docker run -it --rm \
-v ~/path/to/input_img/:/keras-yolo3/input_img \
keras_yolo3

でrunするとimageモードに入って入力画像のパスが要求されるのでinput_imgに画像を置いて指定すれば物体検出をしてくれます.

しかしながらX Window System的なあれで結果画像は表示されません.

dockerでGUI

qiita.com

お試しなればこそ結果画像を表示させたいので↑を参考にさせて頂きました.

imagemagicはここで必要になります.あとは参考の

X11アプリケーションのDockerコンテナを起動する

のオプション通りです.

docker run -it --rm 
-v ~/path/to/input_img/:/keras-yolo3/input_img 
-v $HOME/.Xauthority:/root/.Xauthority 
-e DISPLAY=$DISPLAY 
--net host 
keras_yolo3

結果

f:id:sdr816:20190620165044p:plain 親の顔より見た画像