tensorflowで物体認識(YOLOv2)をやってみる
以前chainer版は試しました。
今回はtensorflowで実装されたYOLOv2をやってみたいと思います。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
[追記]
今回はkeras中心の構成になっており、tensorflowの実装は
後日記述したこちらを参考にしてください
weekendproject9.hatenablog.com
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
[環境]
win7 64bit
GTX 960
python3.5
tensolfolw 1.2.1
keras 2.0.8
[準備]
参考HPがlinuxのやりかたなのでwinでの手順を書いていきます。
まず下記リンクからzipをDL→解凍。
GitHub - allanzelener/YAD2K: YAD2K: Yet Another Darknet 2 Keras
次に以下のURLをクリックしてDLし、先ほど解凍したフォルダに移動。
http://pjreddie.com/media/files/yolo.weights
次に以下のURLをクリックして同じフォルダに"yolo.cfg"を作成して中身をコピペ
https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolo.cfg
ライブラリ追加インストール
pip install numpy h5py pillow pip install tensorflow-gpu==1.2.1 pip install keras==2.0.8
[物体認識テスト]
まずモデルを生成します
python yad2k.py yolo.cfg yolo.weights model_data/yolo.h5
実行するとwindowsならエラーがでます。
以下エラー内容(自分のをコピーし忘れたので人のを借用しました)
表示内容 ____________________________________________________________________________________________________ Layer (type) Output Shape Param #Connected to ==================================================================================================== lambda_1 (Lambda) (None, 3, 160, 320) 0 lambda_input_1[0][0] ____________________________________________________________________________________________________ convolution2d_1 (Convolution2D) (None, 1, 40, 16) 327696 ..... .....続く エラー内容 Traceback (most recent call last): File "./yad2k.py", line 270, in <module> _main(parser.parse_args()) File "./yad2k.py", line 254, in _main model.save('{}'.format(output_path)) File "C:\Users\DanMo\Anaconda3\envs\py35cv3\lib\site-packages\keras\engine\topology.py", line 2506, in save save_model(self, filepath, overwrite, include_optimizer) File "C:\Users\DanMo\Anaconda3\envs\py35cv3\lib\site-packages\keras\models.py", line 106, in save_model 'config': model.get_config() File "C:\Users\DanMo\Anaconda3\envs\py35cv3\lib\site-packages\keras\engine\topology.py", line 2322, in get_config layer_config = layer.get_config() File "C:\Users\DanMo\Anaconda3\envs\py35cv3\lib\site-packages\keras\layers\core.py", line 661, in get_config function = func_dump(self.function) File "C:\Users\DanMo\Anaconda3\envs\py35cv3\lib\site-packages\keras\utils\generic_utils.py", line 176, in func_dump code = marshal.dumps(func.__code__).decode('raw_unicode_escape') UnicodeDecodeError: 'rawunicodeescape' codec can't decode bytes in position 195-196: truncated \uXXXX
どうやらwinだと特殊文字があってだめとのこと。
エラーが出ているkerasを書き換えに行きます。
Anacondaを使っている人は以下にインストールしたフォルダがあります
C:\ProgramData\Anaconda3\Lib\site-packages\keras\utils
もしくはここ
C:\Users\ユーザー名\Anaconda3\Lib\site-packages\keras\utils
ここの”generic_utils.py”を開き 175行目をコメントアウト、その下に新たに書き込みます
175 #code = marshal.dumps(func.__code__).decode('raw_unicode_escape') 176 code = marshal.dumps(func.__code__).replace(b'\\',b'/').decode('raw_unicode_escape')
セーブしたら再度実行
python yad2k.py yolo.cfg yolo.weights model_data/yolo.h5
今回はできました(194MBのファイルが生成される)
次に本題の物体認識です。
python test_yolo.py model_data/yolo.h5
実行するとimagesフォルダのoutフォルダに結果が表示されました。
2017/09/19 [追記]
PermissionError: [Errno 13] Permission denied:~~~~
というエラーが出ていたので対処しました。
・67行付近のoutputフォルダを生成しているifをコメントアウトを以下に変更
c_path = os.getcwd()#カレントディレクトリ取得 output_file = "out"#出力フォルダ名 o_path = os.path.join(c_path,output_file)#出力フォルダパス生成 if not os.path.exists(o_path): print('Creating output path {}'.format(o_path)) os.mkdir(o_path)#生成
・205行付近の画像保存を以下に変更
image.save(os.path.join(o_path, image_file), quality=90)
[参考]
YOLOv2(Keras/TensorFlow)でディープラーニングによる画像の物体検出を行う - Qiita
YOLOv2(TensorFlow)を使ってリアルタイムオブジェクト認識をしてみる - Qiita
UnicodeDecodeError · Issue #60 · allanzelener/YAD2K · GitHub
python - Keras model.to_json() error: 'rawunicodeescape' codec can't decode bytes in position 94-98: truncated \uXXXX - Stack Overflow
keras/generic_utils.py at master · fchollet/keras · GitHub
chainer v1系列最終版"chainer1.24"をインストールする
2017/9/17時点でpipでインストールするchainerはv2.0.1です。
これをv1系列の最終版の1.24にバージョンを落とします。
環境:
win10
python3.5.2
[pipでインストールする方法]
pip install chainer==1.24
[ソースからインストールする方法]
まずこちらの一番下からzipをDL.
Release v1.24.0 · chainer/chainer · GitHub
フォルダ移動 cd chainer-1.24.0\chainer-1.24.0 インストール python setup.py install
バージョン確認します
>python >>> import chainer >>> print(chainer.__version__) 1.24.0 >>>
無事インストールされました。
また、ubuntu16.04でも確認しましたがインストールできました。
おわり
chainerでYOLOv2をやってみる [訓練済みモデル実行編]
2017年7月ごろに一度YOLOv2でwebカメラから物体認識をさせたのですが、
今回違う環境で動かそうとしたところエラーが出たので対処しました。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
[2017/10/23追記]
自前データでの学習を載せました
ChainerでYOLOv2をやってみる [訓練/学習編] - ロボット、電子工作、AIなどの記録
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
環境:
win10
chainer 1.21.0
chainer 2.0.1
使用させてただいたプログラムはこちら
https://github.com/leetenki/YOLOv2
ここでDLして持ってきたら解凍。
次にすでに訓練されているモデルデータをDLするんですが、
YOLOv2/YOLOv2_execute.md at master · leetenki/YOLOv2 · GitHub
ここの
1、yolov2学習済みweightsファイルをダウンロードする。 wget http://pjreddie.com/media/files/yolo.weights 2、以下のコマンドでweightsファイルをchainer用にパースする。 python yolov2_darknet_parser.py yolo.weights
をしたところ、
<span style="color: #666666">C:\Users\YOLOv2-master\YOLOv2-master>python yolov2_da rknet_parser.py yolo.weights loading yolo.weights loading initial model... 1 992 2 19680 3 93920 4 102368 5 176608 6 472544 7 505824 8 801760 9 1983456 10 2115552 11 3297248 12 3429344 13 4611040 14 9333728 15 9860064 16 14582752 17 15109088 18 19831776 19 29273056 20 38714336 Traceback (most recent call last): File "yolov2_darknet_parser.py", line 85, in <module> exec(txt) File "<string>", line 1, in <module> ValueError: cannot reshape array of size 12265129 into shape (1024,3072,3,3)</span>
というエラーが出ました。
学習サイズが合っていないとのことなので合うサイズを持ってきます。
ここのお方がサイズが合ったものを提供してくださっています。
yolo.weights - Google ドライブ
ありがたくダウンロードして、YOLOv2-masterのフォルダに置く。
再度、chainer用にパースする
C:\Users\YOLOv2-master\YOLOv2-master>python yolov2_darknet_parser.py yolo.weights loading yolo.weights loading initial model... 1 992 2 19680 3 93920 4 102368 5 176608 6 472544 7 505824 8 801760 9 1983456 10 2115552 11 3297248 12 3429344 13 4611040 14 9333728 15 9860064 16 14582752 17 15109088 18 19831776 19 29273056 20 38714336 21 67029984 22 67465609 save weights file to yolov2_darknet.model
これでOK。
写真かWebカメラで動作確認。
python yolov2_darknet_predict.py data/people.png python yolov2_darknet_camera.py
※chainerのバージョンが1の系列なら実行可能です
※chainerが2のバージョンだと記述内容が変更になったためエラーで実行できません
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
[2017/10/23追記]
自前データでの学習を載せました
ChainerでYOLOv2をやってみる [訓練/学習編] - ロボット、電子工作、AIなどの記録
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
おわり
[参考]
how to use yolov2_darknet_parser.py ? · Issue #2 · leetenki/YOLOv2 · GitHub
ubuntu16.04にopencv3.3.0をインストールする(できなかった。。)
2017/09/07時点で最新のOpencvをUbuntu16.04にインストールしようとしました。
結果出来ませんでした。参考までにここに2種類載せます。
まず①、②の前にこちらを入れます。
opencvで使用するかなりの部分を入れてます(たぶn)。
このまま入れると環境によっては次回ログイン時に
"The system is running in low-graphics mode."
って出てきて画面が映らなくなります。
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev $ sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libatlas-base-dev gfortran
①の方法
Opencvの最新である3.3.0のソースURLを確認します。
Releases - OpenCV library
ホームに戻り、opencvを取ってきます。
本体を取得 $ cd ~ $ wget -O opencv.zip https://github.com/opencv/opencv/archive/3.3.0.zip $ unzip opencv.zip 追加で取得 $ cd ~ $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.3.0.zip $ unzip opencv_contrib.zip ビルド $ cd opencv-3.3.0 $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D BUILD_EXAMPLES=ON ..
ここで僕の環境では以下のエラーが出たのでここからは未確認の作業です。
エラー:sys/videoio.h - not found
どうやらGCCのヴァージョンを最新にすればいいらしいです。
$ make -j4 $ sudo make install $ sudo ldconfig
名前の変更
*cv2.cpython-35m-x86_64-linux-gnu.soが以下の場所にない場合は探す必要あり
$ cd /usr/local/lib/python3.5/site-packages/ $ sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
②の方法
$ cd ~ $ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip $ unzip opencv.zip $ cd opencv-3.3.0 $ mkdir release $ cd release $ cmake -DBUILD_TIFF=ON -DBUILD_opencv_java=OFF -DWITH_CUDA=OFF -DENABLE_AVX=ON -DWITH_OPENGL=ON -DWITH_OPENCL=ON -DWITH_IPP=ON -DWITH_TBB=ON -DWITH_EIGEN=ON -DWITH_V4L=ON -DWITH_VTK=OFF -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_opencv_python2=OFF -DCMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)") -DPYTHON3_EXECUTABLE=$(which python3) -DPYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -DPYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..
↑ pythonの項目が入っている ↑
$ make -j4 $ sudo make install $ sudo ldconfig
おわり
参考:
①https://medium.com/@debugvn/installing-opencv-3-3-0-on-ubuntu-16-04-lts-7db376f93961
②https://www.scivision.co/anaconda-python-opencv3/
http://pythonopencv.com/install-opencv-3-3-and-python2-7-3-5-bindings-on-ubuntu-16-04/
Raspberrypi OS (stretch) のリポジトリを日本に変更する
2017/09/08時点でラズベリーパイ最新OS(stretch)のリポジトリを日本に変更します。
ラズパイOS:
Download Raspbian for Raspberry Pi
ここに変更可能な一覧があります。
RaspbianMirrors - Raspbian
今回はJAISTにしました。
deb http://ftp.jaist.ac.jp/raspbian/ stretch main contrib non-free rpi
これで完了。
おわり
RaspberryPiとUbuntu16.04にpipでtensorflowをインストールする
RaspberryPi3(Raspbian)とUbuntu16.04にtensorflowをインストールしていきます。
[python3系デフォルト設定]
*python2の人はここの作業は不要です。
すでに以下のpython3系のインストールをやっているとして
sudo apt-get install python3 python3-pip python3-dev python3-numpy python3-scipy python3-matplotlib
まず僕の環境はpython3なので、
python3をデフォルトに設定させました
sudo nano .bashrc
一番下に記入
alias python=python3
$ . ~/.bashrc $ python --version
確認できたらok
[tensorflowインストール]
次にネイティブpipでtensorflowをインストール
tensorflowでgpuとかpython2系3系があるので以下を参照
$ pip install tensorflow # Python 2.7; CPU support (no GPU support) $ pip3 install tensorflow # Python 3.n; CPU support (no GPU support) $ pip install tensorflow-gpu # Python 2.7; GPU support $ pip3 install tensorflow-gpu # Python 3.n; GPU support
もしできなかった場合は、.whlでインストール
下のコマンドの最後にある”tfBinaryURL”の部分を自分の環境に合うURLに置き換える。
Python 2.7の場合 $ sudo pip install --upgrade tfBinaryURL # Python 3系の場合 $ sudo pip3 install --upgrade tfBinaryURL
Python 2.7
CPU only:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.3.0-cp27-none-linux_x86_64.whl
GPU support:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.3.0-cp27-none-linux_x86_64.whl
Python 3.4
CPU only:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.3.0-cp34-cp34m-linux_x86_64.whl
GPU support:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.3.0-cp34-cp34m-linux_x86_64.whl
Python 3.5
CPU only:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.3.0-cp35-cp35m-linux_x86_64.whl
GPU support:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.3.0-cp35-cp35m-linux_x86_64.whl
Python 3.6
CPU only:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.3.0-cp36-cp36m-linux_x86_64.whl
GPU support:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.3.0-cp36-cp36m-linux_x86_64.whl
ちなみにtensorflowのアンインストールは
$ sudo pip uninstall tensorflow # for Python 2.7 $ sudo pip3 uninstall tensorflow # for Python 3.n
おわり