2017年12月5日火曜日

Open CV 3.4 のリリース予定が公表された。


12/4の会議メモで3.4のリリース予定が記載されていた。

それによると、12/15日 が 3.4 RC版、翌週 12/22が正式リリース予定とのこと

特徴

・GSoCの成果を統合
・背景分離
・ドキュメントの多言語化
・deepnetでのOpenCLの改良
・deepnet関連
 多数

など

OpenCV Advent Calendar 2017 の担当日が16日になので、3.4RC版を対象にしようか考え中

2017年12月2日土曜日

DeepLensが発表された。

発表内容のメモ

Amazon主催の re:Invent で DeepLens が発表された。
DeepLens の説明はここ

気になる点
CPU        Intel Atom
OS        Ubuntu 16.04
ライブラリ Intel clDNN


対応フレームワーク
 TensorFlowやCaffe2など

注文ページ
発売は、April 14, 2018.
価格 249.00 

This item does not ship to Japan. とのこと残念

ワークショップのサンプルコードが公開されている
Reinvent 2017 Deeplens Workshop


キーワードに
SageMaker, Greengrass, Lambda があるがまったく未知の分野 

2017年12月1日金曜日

久しぶりに Windows上でOpenCVのアプリを作成したらigdrcl64.dllがエラーをはいた。

はじめに


最近ubuntu上でアプリを作成していたが、久しぶりにWindowsでOpen CVのアプリを作成した。
作成したアプリは、コンソール上では、問題なく動作するが、Visual Studioから実行するとエラーが生じる現象に遭遇しあせった。

環境

Windows 10 64bit pro
 OSのバージョン記録し忘れ

OpenCVは、ここから3.3.1 Win packをダウンロードし展開したもの。

開発環境はVisual Studio 2015 Community edition

プログラムは、画像を表示させるだけの簡単なものであった。

昔と異なる点

・提供されている共有ライブラリが、opencv_world 331d.dll と opencv_world 331d.dll だけになっていたこと
pathを設定するのが手間だったので、この2つを c:\windows\system32のフォルダーにコピー

原因不明のエラー

普通にMatにカラー画像を読み込み、imshowで表示させるだけのプログラムであったが、なぜか、
imshowのところで落ちてしまう。初めての現象に遭遇し、かなりあせった。昔のブログを見ても該当するものはなし。

エラーの画面をダンプし忘れたが、エラーメッセージをよく見ると、igdrcl64.dllが問題とのこと

google先生に尋ねたところ、Open CV のフォーラムにそれらしきものを発見。

対応策

#include <opencv2/core/ocl.hpp>と
とプログラムの冒頭に
cv::ocl::setUseOpenCL(false);
を追加したら、エラーは、発生せず問題なく画像が表示できた。


微妙に環境が異なる他のWindowsPCでは発生せず、どの組み合わせが悪いかは、調査はしていない。他のPCでも再現したら、Advent のネタにしようかと考えたがやめにした。

メモ

専用のプロパティシートを作成しておく

ライブラリの指定は、

#if _DEBUG
#pragma comment(lib, "opencv_world331d.lib")
#else
#pragma comment(lib, "opencv_world331.lib")
#endif
でOK

2017年11月27日月曜日

Intel Movidius Neural Compute Stick の環境を準備した

Movidius NCS

はじめに

Movidius NCS を購入したのでubuntu 16.04に動作環境を作成した。
SDKのバージョンは、1.10.01.01を使用している。

ソースの取得

ここからソース一式をダウンロード
展開して、フォルダー名をncsdkに変更し、ncsdkに移動。

ビルド

make install

成功すると以下のメッセージが表示される

Successfully installed mvnc-1.10.1.0
NCS Libraries have been installed in /usr/local/lib
NCS Toolkit binaries have been installed in /usr/local/bin
NCS Include files have been installed in /usr/local/include
NCS Python API has been installed in /opt/movidius, and PYTHONPATH environment variable updated

Movidius を挿入

dmesgで認識されているか確認

usb 3-3: new high-speed USB device number 4 using xhci_hcd
usb 3-3: New USB device found, idVendor=03e7, idProduct=2150
usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-3: Product: Movidius MA2X5X
usb 3-3: Manufacturer: Movidius Ltd.
usb 3-3: SerialNumber: 03******

サンプルの実行

python版
~/ncsdk/examples/apps/hello_ncs_py$ make run

making run
python3 hello_ncs.py;
Hello NCS! Device opened normally.
Goodbye NCS! Device closed normally.
NCS device working.

c++版
~/ncsdk/examples/apps/hello_ncs_cpp$ make run

making hello_ncs_cpp
g++ cpp/hello_ncs.cpp -o cpp/hello_ncs_cpp -lmvnc
Created cpp/hello_ncs_cpp executable

making run
cd cpp; ./hello_ncs_cpp; cd ..
Hello NCS! Device opened normally.
Goodbye NCS!  Device Closed normally.
NCS device working.

コメント

環境構築時に多数のライブラリがインストールされ、環境が汚染された気がする。


以上

2017年11月20日月曜日

OpenCV の dnn の順方向のデータ伝搬に関して調べてみた。

はじめに

OpenCV のチュートリアルの解説では、順方向のデータ伝搬に関しては、

6 Make forward pass

        prob = net.forward("prob");                          //compute output

During the forward pass output of each network layer is computed, but in this example we need output from "prob" layer only.

と解説されている。

以前からこの最後のレイヤー名を指定するのは、レイヤー名を知っていることが前提であり、少し不便かと思っていた。

そこで、関数の説明を調べてみたら、モデルの最終レイヤーからの出力が欲しい場合、レイヤー名を指定しなくても(デフォルト値)問題ないことが分かった。

forward() [1/4]
Mat cv::dnn::Net::forward    (    const String &     outputName = String())

By default runs forward pass for the whole network.


試しに、caffe_googlenet.cpp で、

prob = net.forward();

に変更してみても、オリジナルと同等の結果を得られたことを確認した。

以上

OpenCV の dnn でレイヤー名を取得した。

はじめに

今回、レーヤーのクラス名を取得する getLayerNames() を試してみた。

関数の説明は、 ここ

サンプルソースの修正

caffe_googlenet.cpp の readNetFromCaffe のあとに、

    std::vector<String> lname = net.getLayerNames();
    for (int i = 0; i < lname.size();i++) {
        std::cout << i+1 << " " << lname[i] << std::endl;
    }

を追加。

ビルドして、実行すると

 ./caffe_googlenet
1 conv1/7x7_s2
2 conv1/relu_7x7
3 pool1/3x3_s2
4 pool1/norm1
5 conv2/3x3_reduce
6 conv2/relu_3x3_reduce
7 conv2/3x3
8 conv2/relu_3x3
9 conv2/norm2
10 pool2/3x3_s2



140 pool5/drop_7x7_s1
141 loss3/classifier
142 prob

Best class: #812 'space shuttle'
Probability: 99.9935%
Time: 23.7494 ms (average from 10 iterations)

のような表示となる。

以上

2017年11月13日月曜日

OpenCV master のスタイル変換サンプルプログラムでいくつかのモデルを試してみた。 その2

composition_vii

はじめに

前回のつづき。

今回は、同じ画像を題材に、eccv16 のモデルを適用してみた。

モデルのサイズは、約25Mぐらいである。
提供されているモデルは、以下の4個である。

  • the_wave.t7
  • starry_night.t7
  • la_muse.t7
  • composition_vii.t7

結果

表題の画像は、composition_viiのモデルを摘要したものである。

以下残りの3つの摘要結果を示す。

the_wave
starry_night
la_muse

モデルの違い

fast-neural-style のアルゴリズムなどここに概略が記載されている。

eccv16 は、オリジナルの論文で使用されたモデルのようである。

instance normalization は、派生の様であり、 

This simple trick significantly improves the quality of feedforward style transfer models.

との説明されている。

参考

Instance Normalization (全てのサンプルから、平均を引いて、標準偏差で割る)