2017年5月30日火曜日

OpenCVの次期リリース予定 (OpenCV Milestones)


はじめに

本家のページには、3.3のリリースが掲載されていますが、どこまで当てにできるか分かりません。

そういえば、前回3.2.0-rcに関して、2016年12月20日に備忘録に記載したら、2016-12-23に
3.2が正式リリースされ、一体3.2.0-rcとは何だったのかと思うことありました。

今でも3.2.0-rcのタグは残っています。



OpenPoseでいろいろな画像を試してみた。その3 (Detected bones of various images with OpenPose sample program. Part3)

1 逆光画像 ほぼシルエット

はじめに

前回人ではないものを対象に、OpenPoseでボーンの検出ができるか試してみた結果、ロバスト性が非常に高いことが確認できた。

今回は、人を対処として、検出対象としては難しい逆光の画像で試してみた。
さらには、入力画像として白黒画像を試してみたが、問題はあるが検出できることが確認できた。

言い換えると入力は輝度信号1chだけでも検出出きるため、入力を3chとして計算しているモデルは、冗長性があるのでは推測される。

検出結果画像を載せておく。なお出力は、自動的に1280x720にリサイズされる。

写真は、登録するとSサイズ(640x427)は無料で使用できる photoAC さんのものを使用している。


2 少し逆光
3 白黒のバストショット
4 白黒の全身画像



GPU版のTensorFlow r1.1 をNVIDIA Docker上にインストールした。(Install the TensorFlow r1.1 of GPU version on the NVIDIA Docker)

TensorFlowのバージョンTag

はじめに

Caffe をベースとした新たなアルゴリズムのインストールに支障がでたため、いま流行りのTensorFlowを試してみることにした。
githubをみると、r1.1が新しそうなので、r1.1のソース一式ダウンロードし、展開した。

展開したフォルダーの tensorflow/tools/docker フォルダーに、ドッカーファイルが格納されている。今回は、Dockerfile.gpu を使用し、Docker Imageを作成した。


Dockerfile.gpu 内容のメモ

・fileの中を見てみると、ubuntu 16.04 と CUDA 8.0、 cuDNN 5 をベースにしている

  FROM nvidia/cuda:8.0-cudnn5-devel-ubuntu16.04

・Jupyter notebook と TensorBoard 用にそれぞれ8888、 6666 ポートを使用するように設定されている。

・Dockerfileの最後の行にかかれている
  CMD ["/run_jupyter.sh", "--allow-root"]
は削除したほうがよい。

Dcokerコンテナ起動後、この記述のため、他のコマンドを試すために、いちいちJupyter notebookを殺さないといけない。

変更点

 tensorflowのGPU版のインストールは、PIPを使用し、下記のコマンドを実行する用に修正した。
オリジナルのままでは、バージョンのところが0になっている。

RUN pip --no-cache-dir install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp27-none-linux_x86_64.whl

Docker Build

ビルドは以下のコマンドで行う。

docker build -t hoge/tensorflow_r11 -f Dockerfile.gpu .

ビルド時間は記録していなかった。

その他

このTensorFlowをベースに他のアルゴリズムを試すために、

apt update && apt install -y --no-install-recommends libopencv-dev python-tk python-opencv

を追加したほうがよい。


 .whlでノーマル版をインストールしているので、実行時にCPUの最適化が利用できないとの警告が多数表示される。

>>> sess = tf.Session()
2017-05-31 13:44:43.467055: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
2017-05-31 13:44:43.467078: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-05-31 13:44:43.467087: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-05-31 13:44:43.467095: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-05-31 13:44:43.467102: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.



2017年5月29日月曜日

SSD-Caffe を cuDNN Caffeにインストールを試みたが失敗した。(attempted to install SSD-Caffe on cuDNN Caffe but failed.)

はじめに

SSD (Single Shot MultiBox Detector) を cuDNN Caffe (ver 1.0) 上にインストールを試みたが、失敗した。その原因を備忘録として残しておく。

SSDに関しては、Takanori Ogata さんの SSD: Single Shot MultiBox Detector に概要が説明されている。

SSD-Caffeの取得

関連するファイル一式は、ここから取得する。中段右にある、Clone or Downloadのボタンを押し、
Download ZIPを押下すれば、一式のZIPファイルを取得できる。

上記ページにインストール方法の説明が記載されており、これに従えば問題なくインストール出きると推測される。(今は試してはいない)

cuDNN Caffe でSSD CaffeのExsampleを動作させてみる

cuDNN Caffe の環境に、上記ZIPファイルを展開する。
展開したら、学習済みデータ(93M)をここから取得する

展開すると
models/VGGNet/VOC0712/SSD_300x300
のフォルダーに、prototxt ファイルと caffemodel ファイルが格納されている

サンプルはプログラムは、exsamplesの下にいくつか準備されている

examples/ssd/ssd_pascal_video.py を使用すると、一緒に提供されていているビデオファイル( examples/videos/ILSVRC2015_train_00755001.mp4) 内のオブジェクトの検出と分類を行う

python examples/ssd/ssd_pascal_video.py

エラー

cuDNN Caffe 上で上記コマンドを実行すると、
model_libs.py がないとのメッセージが表示されエラーとなる。

ssd/python/caffe/model_libs.py を /opt/caffe/build/python/caffeに コピーして再び実行させると

net_spec.py 内の関数がおかしいとのエラーとなる。

根本的原因

SSD-Caffe は、BLVC Caffeのバージョン 1.0.0-rc3 をブランチしたものである。
これは、CMakeLists.txtをみれば分かる。

# ---[ Caffe version
set(CAFFE_TARGET_VERSION "1.0.0-rc3" CACHE STRING "Caffe logical version")
set(CAFFE_TARGET_SOVERSION "1.0.0-rc3" CACHE STRING "Caffe soname version")
add_definitions(-DCAFFE_VERSION=${CAFFE_TARGET_VERSION})

cuDNN Caffe 1.0 と SSD Caffe の python/caffe フォルダーを比較した結果以下のような差分が確認された。

左側 Caffe 1.0  右側 SSD Caffe (1.0.0-rc3 のブランチ)


これだけ、pythonのインタフェースに差があると、オリジナル上で動作させることは無理と考えられる。

注意

ブランチにmasterとあるが、これは単にCaffeをそのままブランチしたもんで、SSDではない



以上

2017年5月27日土曜日

OpenPoseのサンプルプログラムでいろいろな画像を試してみた。 その2 (drew a heat map of various images with OpenPose sample program)

1 例のマリオカート

初めに

OpenPoseを試せる環境ができたので、早速サンプルプログラムを試してみて、いろいろな画像を試してみた。

今回のサンプル tutorialの2_extract_pose_or_heatmat_from_image.bin は、ボーンの検出ではなく、ボーン検出の元になる特徴点のヒートマップを描画するものである。

使用例

使い方は、サンプル1と同じである。

./build/examples/tutorial_pose/tutorialの2_extract_pose_or_heatmat_from_image.bine.bin --image_path /opt/work/p1.png

前回同様に、準備したサンプル画像は、800x450画素に縮小している。 大きな画像だと検出時間が長くなる。

プログラムを実行させ、検出に成功すると元の画像にヒートマップが上書きされる。赤ほど可能性が高い点を示している。

終了するには、ESCキーを押せばよい。

検出例

説明をクリックすると別が面に大きな画像が表示されます

2 銅像
3 検出できないアニメパネル

CPU版の OpenPoseのビルドに失敗した。



準備されているサンプル画像 examples/media

はじめに

順序がGPU版と逆になるが、最初はOpenPoseをCPUのみの環境で動作させようと試みた。

OpenPoseのビルド手順を見ていたら、独自にCaffeが使用でき、なおかつMakefile.configのオプションに

# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1

などと期待をもたせる記述があった。

結果

残念ながら試みは失敗に終わった。OpenPoseは、Caffe上に独自のライブラリを構築しており、そこで明示的にCUDAの機能を利用している。
上記のオプションは機能してないようだ。

ソース(openpose-master/src/openpose/pose/poseExtractorCaffe.cpp)を見ると

error("ResizeAndMergeCaffe CPU version not implemented yet.", __LINE__, __FUNCTION__, __FILE__);

error("NmsCaffe CPU version not implemented yet.", __LINE__, __FUNCTION__, __FILE__);


などの記載があるので、今後様子を見てみる。

参考 GPU版

以下は、GPU版でのビルド中のメッセージである。

NVCC src/openpose/pose/bodyPartConnectorBase.cu
NVCC src/openpose/pose/poseRenderGpu.cu
NVCC src/openpose/experimental/face/faceRenderGpu.cu
NVCC src/openpose/experimental/hand/handRenderGpu.cu
NVCC src/openpose/core/nmsBase.cu
NVCC src/openpose/core/resizeAndMergeBase.cu

明示的にCUDAの機能を利用していることが確認できる。

GPU版 BVLC/Caffe を Docker 上でビルドした。(Installation of cuDNN Caffe on NVIDIA Docker)

はじめに

多くの新しいアルゴリズムがCaffeをベースにしているが、発表の時期により要求されるCUDAとcuDNNのバージョンの組み合わせが異なることが多いため、nVidia Dockerを使用することで、バージョンの違いを吸収できるようにした。

最初にオリジナルのBVLC/Caffeをビルドした。

Dockerfileの入手

BVLC/CaffeのDockerfileはここから入手できる

ビルドした時点では、
CUDA    8.0
cuDNN    6.0
ubuntu    16.04
をベースとしている。

取得しているCaffeは、Dockerfile内の CLONE_TAG で 1.0 と指定されている (5/29 追記)

そのままコピーし、Docker buildを行ったが、予想以上に時間(ざっくり1時間以上かかる)がかかった。

ビルド中 CUDA のアーキテクチャを指定しないため、多数の警告が表示される

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

再度ビルドするときは、時間短縮を含めて、CUDAのバージョン指定が必要か思われる。

ビルドした結果は、
/opt/caffe/build
に格納される。

テスト

正しくビルドできたかは、make runtest -j4 を実行し、PASSEDが表示されれば、問題ない。

[----------] Global test environment tear-down
[==========] 2101 tests from 277 test cases ran. (343557 ms total)
[  PASSED  ] 2101 tests.

メモ

nccl のソースを所得しビルドしているが、ncclは分散環境の協調の基盤であるため、個人には不要と思われるので削除したほうがよいかも


nccl: Optimized primitives for collective multi-GPU communication

注意点

Caffeの依存環境しているライブラリをインストールする最後の行で、
rm -rf /var/lib/apt/lists/*
が実行されている。
Dockerimageのサイズを小さくするためと思われれが、これにより、ライブラリ取得用のデータがすべて削除される。

この後、
apt install -y upzip などのインストールを試みると、
Unable to locate package unzip
のようなエラーとなり困ることとなる。