Edited at

Tensorflow Real-Time Object Detection メモ

More than 1 year has passed since last update.

Building a Real-Time Object Recognition App with Tensorflow and OpenCV の方の github に上がってるソースを動かしてみたメモです。

この方の環境と僕の環境が違ったので。


  • Anaconda / Python 3.5

  • TensorFlow 1.2

  • OpenCV 3.0

以下の Dockerfile を作って。

FROM ubuntu:16.04

RUN apt-get update --fix-missing \
&& apt-get upgrade -y \
&& apt-get install -y \
build-essential \
cmake \
git \
wget \
bzip2 \
sudo \
wget \
bzip2 \
ca-certificates \
curl \
unzip \
libgtk2.0-0 \
&& rm -rf /var/lib/apt/lists/*

# Anaconda3-4.2.0 install
RUN wget https://repo.continuum.io/archive/Anaconda3-4.2.0-Linux-x86_64.sh && \
bash Anaconda3-4.2.0-Linux-x86_64.sh -b && \
rm -f Anaconda3-4.2.0-Linux-x86_64.sh

ENV PATH $PATH:/root/anaconda3/bin

# OpenCV install
RUN conda install -c https://conda.anaconda.org/menpo opencv3

こんな shell script 作って。(run.sh とする。)

IMAGE=kidapu/tf-realtime

CONTAINER=tf-realtime

build ()
{
nvidia-docker build -t $IMAGE .
}

run ()
{
# xhost +local:root

nvidia-docker run --privileged -it \
--name ${CONTAINER} \
--env DISPLAY=$DISPLAY \
--env="QT_X11_NO_MITSHM=1" \
-v /dev/video0:/dev/video0 \
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
-v /home/kida/docker/08-tf-realtime/share:/tmp/share:rw \
${IMAGE} bash

# xhost -local:root
}

# main
case $1 in
"build") build ;;
"run") run ;;
*) echo "引数を指定して下さい";;
esac

以下のコマンド実行しました。

# docker の中から window を使うため

$ +xhost

# shell script の実行
$ sh run.sh build
$ sh run.sh run

で、docker コンテナの中に入って、いろんなものの環境を確認するとこんな感じで。(作者の方と違いましたが、、

# python --version

Python 3.5.2 :: Anaconda 4.2.0 (64-bit)
# python -c "import cv2; print(cv2.__version__)"
3.2.0
# conda --version
conda 4.3.22

とりあえず、ソースおとしたり、関連モジュール落としてきて。

$ git clone https://github.com/datitran/Object-Detector-App.git

$ conda env create -f environment.yml

てやると、なんか envirotment.yml の menpo::tbb=4.3_20141023=0 のところで、「そんなのないよ」的なエラーがでてたので、よくわからないながら、以下のように変えてしまって。

menpo::tbb=4.3_20141023=0


menpo::tbb

以下のように実行すると、ウェブカムの映像をリアルタイムに物体認識するアプリケーションが動きました。(ウェブカム必須)

python object_detection_app.py

僕の所感だと、 yolov2 と比べると、デフォルトのモデルは精度低いし、FPSも低いなって印象でした。

ただ、yolov2 より SSD のほうが精度いいってどこかの記事で見た気がするので、もうちょいモデルとか学習データとか調整して、もう1回試してみたい。