2014年9月17日水曜日

Caffeで手軽に画像分類を試してみた(1)  泥沼だ


昨日公開されたすばらしい記事に従い試してみたが、泥沼にはまってしまった。

Windowsの環境を変えたくなかったのでUbuntu14.04で試している。

最初に本家のインストール方法のページを見てみる。

事前準備
 必要なモジュール
  • CUDA library
  • BLAS (provided via ATLAS, MKL, or OpenBLAS).
  • OpenCV.
  • Boost (>= 1.55, although only 1.55 is tested)
  • glog, gflags, protobuf, leveldb, snappy, hdf5, lmdb
  • Python 2.7, numpy (>= 1.7), boost-provided boost.python

最初 GPUを使用しないためCUDAをinstallしなかった(第1の間違い)
OpenCVは、3.0alphaの環境が使用可能なので放置(第2の間違い)

BLASは、素直にATRASを使用
  Ubuntu: sudo apt-get install libatlas-base-dev

その他
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libboost-all-dev libhdf5-serial-devでinstall

Ubuntu 14.04追加
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
memo
  • libprotobuf-dev                serializing structured data
  • libleveldb-dev                mapping from string keys to string values
  • libsnappy-dev                very high speeds and reasonable compression7
  • libboost-all-dev            Boost development environment
  • libhdf5-serial-dev            Hierarchical Data Format 5 (HDF5) - runtime files
  • libgflags-dev                commandline flags processing
  • libgoogle-glog-dev            google-glog
  • liblmdb-dev                    Lightning Memory-Mapped Database
  • protobuf-compiler
cp Makefile.config.example Makefile.config の後、CPU-only Caffe は、Makefile.config の the CPU_ONLY := 1をコメントアウト

PIPをinstallし、


sudo apt-get install python-pip

pip install -r python/requirements.txt
を実行


そして、いよいよmake allを実行したが、STUB_GPU_FORWARDが定義されていないよのエラーで停止。

続く

cv::Matに関する情報の取得方法


若干ややこしいのでメモ

elemSize()
 1画素のデータサイズ : チャンネル数を考量
 CV_16SC3の場合 6 = (2x3)

elemSize1()
 1画素のデータ長 : チャンネル数は考量されない
  CV_16SC3の場合 2

depth()
 1画素の深度のindexを返す
 下記固定値と比較して判定する必要あり

CV_8U - 8-bit unsigned integers ( 0..255 )
CV_8S - 8-bit signed integers ( -128..127 )
CV_16U - 16-bit unsigned integers ( 0..65535 )
CV_16S - 16-bit signed integers ( -32768..32767 )
CV_32S - 32-bit signed integers ( -2147483648..2147483647 )
CV_32F - 32-bit floating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )
CV_64F - 64-bit floating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )

channels()
 チャンネル数を返す

OpenCV 3.0 alphaのADASに関して

事前の案内では、ADAS用のモジュールが追加されるとあり期待していたが、いざリリースされると、contribにADAS.cppが存在するが中身はない。それどころか、自動車の検出用の辞書さえも存在していないのは、残念な結果となった。




よく調べてみると、pencv_contrib/modules/adas/tools/fcw_trainに、辞書作成と、検出のツールのソースが含まれており、contribをビルドすると、ツールができる。使用方法などドキュメントは存在しない。

ソースを見ると、単にcv::xobjdetect::ICFDetectorにパラメータを整えて渡しているだけのようであり、cv::xobjdetect::ICFDetectorのリファレンスには、WaldBoost and Integral Channel Featuresと簡単な説明がある

必要なパラメータは、
pos_path  path to training object samples
model_size  model size in pixels
ぐらいしかない。

cascadeでの辞書作成は、画像のパス、左上座標、サイズを記したファイルを指定していたが、ファイル名しか指定していないので、今回は、自分で事前に指定のサイズにpositive画像を切り抜いておく必要があると推測される

ソースを見ると、読み込んだファイル(jpg, png)を指定のサイズにリサイズしているので、範囲さえあっていればよいみたいである。

negativeは、指定数だけランダムに画像を切る抜いたものを使用している。

その後、パラメータを整えてwaldboostを使用して学習している。

マルチスケールでwaldboostを使用して検出しているが、並列化などの高速化や、検出結果のグルーピングは行われていないので、自力で対応しないといけない

以上

OpenCV 3.0のリファレンスマニュアルは3種類存在する

OpenCVの各バージョンのドキュメントはここからアクセスできる





なぜか3.0は、3つのバージョンが存在しており、masterとalphaは上記からアクセスできるが、trunkは、記載されていない。masterとtrunkの違いが不明


3.0.0 trunk
http://docs.opencv.org/trunk/modules/refman.html
http://docs.opencv.org/trunk/index.html

3.0.0 master
http://docs.opencv.org/master/modules/refman.html
http://docs.opencv.org/master/index.html

3.0.0-alpha
http://docs.opencv.org/3.0-alpha/modules/refman.html
http://docs.opencv.org/3.0-alpha/index.html

OpenCV 3.0 alphaの変更点で気になる点(1)

mainは2.4.9との互換性を保つようになぅっているが、それでもところどころに変更があり、過去のソースを修正しないと3.0alphaでは、動作しない。

特に気になる点

1 cvtColorのcolor space conversion codeの変更
CV_BGR2GRAYのように指定していたが、COLOR_BGR2GRAYに変更された


過去の多くのソースがここでつまずく

2.4.9のリファレンス

3.0 alphaのリファレンス


2 ビデオ出力のコーデック指定用の4文字コードの変更
CV_FOURCC('X','V','I','D')からcv::VideoWriter::fourcc('X','V','I','D')に変更された

特に、3.0alphaのリファレンスでもCV_FOURCC('M','J','P','G')に間違ったままなので注意が必要

以上

OpenCV 3,0 alphaのサンプルを調べてみた


2.4.9のC++のサンプルと3.0alphaのC++のサンプルを比較してみた

いくつか新規に追加されているが、特徴点と特徴量関連のサンプルがなくなっているのが気になる

3.0.0 alphaで追加されたもの
tutorial_code\photo
tutorial_code\video
shape_sample

cloning_demo.cpp
cloning_gui.cpp
create_mask.cpp
dbt_face_detection.cpp
facedetect.cpp
image_alignment.cpp
lsd_lines.cpp
npr_demo.cpp
polar_transforms.cpp
shape_example.cpp
smiledetect.cpp
train_HOG.cpp
tree_engine.cpp
ufacedetect.cpp

airplane.jpg
baboon200.jpg
baboon200_rotated.jpg
box.png
box_in_scene.png
graf1.png
graf3.png
puzzle.png
scene_l.bmp
scene_r.bmp
tree.avi

H1to3p.xml
intrinsics.yml
waveform.data

3.0.0alphaから消去、移動したもの

tutorial_code\contrib
fabmap
matching_to_many_images
Qt_sample
rgbdodometry

bagofwords_classification.cpp
bgfg_gmg.cpp
brief_match_test.cpp
build3dmodel.cpp
calibration_artificial.cpp
chamfer.cpp
descriptor_extractor_matcher.cpp
detection_based_tracker_sample.cpp
detector_descriptor_evaluation.cpp
detector_descriptor_matcher_evaluation.cpp
fabmap_sample.cpp
facerec_demo.cpp
freak_demo.cpp
gencolors.cpp
generic_descriptor_match.cpp
hybridtrackingsample.cpp
latentsvm_multidetect.cpp
linemod.cpp
logpolar_bsm.cpp
matcher_simple.cpp
matching_to_many_images.cpp
meanshift_segmentation.cpp
OpenEXRimages_HDR_Retina_toneMapping.cpp
OpenEXRimages_HDR_Retina_toneMapping_video.cpp
peopledetect.cpp
retinaDemo.cpp
rgbdodometry.cpp
simpleflow_demo.cpp
video_dmtx.cpp

facerec_at_t.txt
fern_params.xml

3.0.0alphaで修正されたもの

3calibration.cpp
bgfg_segm.cpp
calibration.cpp
camshiftdemo.cpp
connected_components.cpp
contours2.cpp
convexhull.cpp
cout_mat.cpp
delaunay2.cpp
demhist.cpp
dft.cpp
distrans.cpp
drawing.cpp
edge.cpp
em.cpp
fback.cpp
ffilldemo.cpp
fitellipse.cpp
grabcut.cpp
houghcircles.cpp
houghlines.cpp
image.cpp
image_sequence.cpp
imagelist_creator.cpp
inpaint.cpp
intelperc_capture.cpp
kalman.cpp
kmeans.cpp
laplace.cpp
letter_recog.cpp
lkdemo.cpp
minarea.cpp
morphology2.cpp
opencv_version.cpp
openni_capture.cpp
pca.cpp
phase_corr.cpp
points_classifier.cpp
segment_objects.cpp
select3dobj.cpp
squares.cpp
starter_imagelist.cpp
starter_video.cpp
stereo_calib.cpp
stereo_match.cpp
stitching.cpp
stitching_detailed.cpp
tvl1_optical_flow.cpp
videostab.cpp
watershed.cpp

CMakeLists.txt

以上

2014年9月11日木曜日

Windows8.1 64bit版にOpenCV 3.0 alpha の開発環境を構築した(2)  進捗だめです



Windows7と同様にcontribのビルドを行おうとしているが、残念ながらビルドの途中で_popcntが見つからないエラーが出現し、これから試行錯誤しなければいけない

ビルドまでの手順は確立したので公開しようかと考えたが、後で訂正が入りそうなので、解決したらのせることとする。

補足 2014/9/10 1:00

 Visual Studio Express 2013 for Windows Desktopで64bitのプロジェクトがビルドできるとは知らなかった。CMakeのコンパイラをx64に変更すれば、コンパイルのエラーはなくなり、一応の解決を得た。

アプリ動作を確認後手順を載せます。

2014年9月10日水曜日

Windows8.1 64bit版にOpenCV 3.0 alpha の開発環境を構築した(1)

検索などでこのページを訪れる人が、数は少ないけど、コンスタントにいる。
ちょうどこの上にあるG+1のボタンを押してもらうと、Goolgeの検索に見つかりやすくなるので、ご協力いただきたい。

2.4.9までは、OpenGL、OpenNI、CUDAを使用しなければ、ダウンロードしたファイルを展開して、pathの設定すれば使用できたが、今回は自分でビルドする必要があるので手間がかかる。

以下は、Windows8.1 64bit版上で、Visual Studio 2013 Express for Desktopで、OpenCV3.00 alphaのプログラムを開発するための環境を構築する方法である。

今回はメインモジュールのみ contribは後で

ソースの取得

このページに移動し、opencv-3.0.0-alpha.exeをダウンロードする。
ダウンロードサイズは350M、展開すると3.5Gになる。
展開したいフォルダーの構成は、2.4.9と同じくソースとビルドに分けられている。

opencv-3.0.0-alphaのbuildには、staticなライブラリは準備されているが、共有ライブラリが準備されていないので、自分でビルドしないといけない。

先ほど展開したフォルダーをd:\の直下に移動させ、フォルダー名をopencv30alphaに変更する。
また、作業用にopencv30alphaの下にworkのフォルダーを新規に作成する。

cmakeの準備と設定

ビルドには、cmakeが必要なので、このページに移動しzip版をダウンロードする。


ダウンロードしてzipを展開後に、binの下のcmake-gui.exeを起動する。
ソースの場所は、D:\opencv30alpha\sourcesを指定する。
バイナリは、D:\opencv30alpha\workを指定する。

Configureボタンを押下すると、コンパイラの選択ダイアログが表示されるので、Visual staudio 12 2013を選択する。

Configure、画面上部にオプションの選択画面が表示される。赤色の表示だが気にしなくてよい
環境にあったオプションを選択する。今回は、1394やcudaやtestを外している。

選択が終わったら、Generateのボタンを押下する
完了するとD:\opencv30alpha\workに、VisualStudio 2013用のプロジェクト一式ができている

プロジェクトのビルド

workフォルダーのOpenCV.slnをダブルクリック
visual studio 2013が起動する

プロジェクトの構成をリリースに変更しビルドを開始
マシンに依存するが約10分で完了する

alpha版では、ビルドが最後まで終わらないので、以下の作業を手動で行う

ソリューションエクスプローラのINSTALLを選択し、マウス右ボタンでメニューを表示し、ビルドを指示する。


これにより開発に必要なファイル一式がD:\opencv30alpha\work\installの下にコピーされる

リリース版が終わったなら構成をdebugに切り替えて、ソリューションのビルドと、INSTALLのビルドを行う

以上の処理で、2.4.9までと同様の状態になる。このあと、プロパティシートを作成し、環境変数の登録を行えばよい。

以上

つぶやき

いまさらの話ですが、dandelion1124さんが不定期に連載されているOpenCV入門で、末端に紹介されました。

twitterでOpenCV関連のタイムラインがみれます。時々みています。



(業務連絡 うまくいかないようでしたらコメントに書いてください 修正します)

インテル RealSense App Challenge 2014開催

Intel RealSense Developer Kitが買えます

OpenCV Challengeが開催されるとのこと


記事録をみてたらOpenCV Challengeが開催されるとのこと

概要はここ


以下大まかな訳

編集中のようであり、変わる可能性がある。下記内容は9日20時のものである。


下記の6のカテゴリーで、総額5万ドルの実装コンテストを行う

- Image segmentation
- Vision-based Simultaneous Localization and Mapping (SLAM)
- Multi-view stereo matching
- Face recognition
- Gesture recognition
- Action recognition

実装は、C/C++, Matlab/Octave or Pythonで行ってもよいが、賞を得るには、OpenCVに即したC/C++に変換しないといけない

ソースコードのほかに、性能評価の結果を提出する必要がある

参加者が定量的にアルゴリズムの品質と精度を評価するために、指定のベンチマークを使用すること

ベンチマーク用のデータセット

Image Segmentation
* The Berkeley Segmentation Dataset and Benchmark
https://www.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/
SLAM
* KITTI Vision Benchmark
http://www.cvlibs.net/datasets/kitti/eval_odometry.php
Multiview Stereo Matching
* Stereo ? Middlebury Computer Vision
http://vision.middlebury.edu/mview/
Face Recognition
* Labeled Faces in the Wild-a
http://www.openu.ac.il/home/hassner/data/lfwa/
Gesture Recognition
* Sheffield Kinect Gesture Dataset
http://lshao.staff.shef.ac.uk/data/SheffieldKinectGesture.htm
Action Recognition
* HMDB: A Large Human Motion Database
http://serre-lab.clps.brown.edu/resource/hmdb-a-large-human-motion-database/


はじめ方

参加者は登録する必要はない。最初にカテゴリーを選択する。参加国の制限はないが、送金の関係で制約が生じる可能性はある
そのため、参加者は国際銀行の口座が必要である。

データセットを読み込む簡単なツールを準備する。すべてのデータを読み込むだけのものである。
ほかに機能を追加する予定である。ここにツールがあり、ビルドの仕方はここ

質問がある場合には、vision-challenges@opencv.orgにメールを

優勝者の選択方法
OpenCVにより選任された人が、実装を選択する。上記のデータセットで報告された性能を有するものを識別するだろう。
OpenCVは、最新のスコアに近い目標をもうけるだろう。ソースコードと要求された値を超えた性能評価レポートを提出した人が、賞を獲得する資格になる
各分野での優秀者5人が選ばれるだろう。最終選考者は、同じ評価基準でパフォーマンスの測定が行われる

OpenCV は、テストデータを追加するかも知れない。最終的には、速度と精度のトレードオフを考慮して決める

優秀な5つのアルゴリズムは、OpenCVの規則に基づき実装される。OpenCV は、制作者にソースコードを修正するスケジュールの調整を図る。
制作者は、BSDライセンスのもとアルゴリズムをOpenCVのライブラリに組み込む。実装規則は後日Webサイトに公開する

スケジュール
9/5 2014 開始
11/31 2014 締め切り
12/21 2014 結果発表

http://code.opencv.org/projects/opencv/wiki/VisionChallenge
に詳細を公開する

2014年9月2日火曜日

OpenCVのサンプルプロジェクトをGitHubに公開してみた(1)

異なるマシン間でのファイルおよびプロジェクトを共有するために、はじめてGitHubを使用してみた

テストケースとしてWindows7のOpenCV3.0alphae + contirb用の、SIFTのサンプルプロジェクトを作成し、GitHub for Windows経由でサーバにアップしてみた


公開したプロジェクトはここから、ZIPをダウンロードして展開して下さい

自由に使用してもらってもかまいませんが、自己責任で使用してください

注意
このプロジェクトは、Visual Studio 2010 express edition 32bit向けのプロジェクトなので、他のバージョンでの使用には問題があります
(特にOpenCVは、Visual Studio 2010向けにビルドしたものなので他のバージョンでは使用できない可能性が高い)

最初に起動する前に、プロジェクト内のプロパティシートをエディタで開き、自分の環境にあったパスに変更してください
また、プログラム内に固定でファイル名を書いていますので、ここも変更してください



なぜかVisual Studio 2010でダウンロードしたプロジェクトを開くと警告が表示されます


対策方法や、Windows7でのGitHubの使いかなどアドバイスがあればお願いします

OpenCV 関連の洋書 2014の前半

OpenCV Computer Vision Application Programming Cookbook (英語) ペーパーバック
 2014/8/26
中身検索
374ページ 5058円

OpenCV Essentials (英語) ペーパーバック ?
2014/8/25
214ページ 3304円


A Practical Introduction to Computer Vision with OpenCV (Wiley-IS&T Series in Imaging Science and Technology) (英語) ペーパーバック ?
 2014/5/12

234ページ 7164円
中身検索
中身を見ると10章のVisionProblemsが面白そうである

注意
金額は9/2のもの

Windows7 64bit版にOpenCV 3.0 alpha の開発環境を構築した(5)

前置きは、前の記事と同じなので省略するが、できれば+1を押してほしい。

プロパティシートを使用したOpenCVアプリの開発方法を示す。

 OSの環境変数の設定(要管理者権限)
  コントロールパネル、システムとセキュリティ、システムを開き
  システムの詳細設定の環境変数ボタンを押し
  システム環境変数のPathの編集

  末尾に";C:\opencv30a\work\install\x86\vc10\bin"を追加
 (この作業後、一度ログオフし、再度ログインする)

Visual C++ 2010 Expressのパスの設定を行う

以前の記事では、システム全体のプロパティを書き換えていたが、この方法ではOpenCVに関係ないプロジェクトも影響を受ける

今回は、専用のプロパティシートを作成する。
OpenCV3.0alphaのプログラムを作成する場合は、この作成したプロパティシートを読み込むことで、パスの指定を行うことになる。

プロパティシートを読み込みは、プロジェクト作成後に、メニューの表示でプロパティマネージャを呼び出し、プロジェクト名を選択した状態で、既存のプロパティシートの読み込みボタンを押し、OpenCV30a.propsを読み込む。

プロパティシートの作成

c:\tmpに、エディタを開き以下の内容をコピーし、OpenCV30a.propsという名前でファイルを保存する。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>C:\opencv30a\work\install\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <AdditionalLibraryDirectories>C:\opencv30a\work\install\x86\vc10\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

以上

Windows7 64bit版にOpenCV 3.0 alpha の開発環境を構築した(4)

検索などでこのページを訪れる人が、数は少ないけど、コンスタントにいる。
ちょうどこの上にあるG+1のボタンを押してもらうと、Goolgeの検索に見つかりやすくなるので、ご協力いただきたい。

 contribのビルドがうまくいかなかったが、原因が複数あったので再度設定方法を記す。

mainのみのビルドの記事はここ、今回変更部分のみ記載しているので注意


1 contribのソースを取得
 解説では、git cloneで取得するように書かれているが、このページに移動し、右側のdownload zip のボタン押下し、37.4Mのzipファイル opencv_contrib-master.zip をダウンロードする


2 ファイルの展開
OpenCV3.0aのフォルダーの下にzipファイルを展開する
zipの展開を行うと、opencv_contrib-master の下に opencv_contrib-masterのフォルダーができるので注意

3 cmakeの準備と設定
cmake-gui.exeを起動し、オプション指定の、OPENCV_EXTRA_MODULES_PATHに opencv_contrib-master\modulesを指定する


ubuntuと同じ問題が生じるのを回避するために、ここで一旦、C:\opencv30a\opencv_contrib-master\modules\xfeatures2dのCMakeLists.txtのバックアップを作成し、CMakeLists.txtをエディタで開き、opencv_cudaarithm を削除する

再び、cmake-gui.exeに戻り、configureのボタンを押下し、その後、Generateのボタンを押下する
完了するとWorkフォルダーのVisualStudio 2010用のプロジェクト一式が更新されている

4 プロジェクトのビルド
workフォルダーのOpenCV.slnをダブルクリック
visual studio 2010が起動する

この時ソリューションエクスプローラにcontribのモジュールが登録されていることを確認
特にxfeatures2dがあることを確かめること


プロジェクトの構成をリリース変更し、念のために一旦ソリューションのクリーンを行い、その後ビルドを指示する。マシンに依存するが約10分で完了する

ビルドが終了したら、ソリューションエクスプローラのINSTALLを選択し、メニューのビルドからINSTALLのビルドを指示する


INSTALLは、ほぼ一瞬で終了する

OpenCVの開発に必要なファイルがwork\installのフォルダーにできている

プロジェクトの構成をdebugに変更し、リリースと同じ作業を行う

以上 開発環境の構築の前半を終える。
後半は、プロパティシート作成方法について述べる

2014年9月1日月曜日

Windows7 64bit版にOpenCV 3.0 alpha の開発環境を構築した(3)

修正点が多いので ”Windows7 64bit版にOpenCV 3.0 alpha の開発環境を構築した(4)”に書き直しました



mainのみのビルドの記事はここ、今回変更部分のみ記載しているので注意

今回は、contribを含めたOpenCV3.0alphaのビルドの仕方だが、9/1日時点では、ビルドはできるがプログラムが開発できない状況である。
手動だが解決方法が見つかった。手順は明日に

1 contribのソースを取得
 解説では、git cloneで取得するように書かれているが、ここにアクセスし右側のdownloadのボタン押下により、37.4Mのzipファイル opencv_contrib-master.zip がダウンロードできる


2 ファイルの展開
OpenCV3.0aのフォルダーの下にzipファイルを展開する
zipの展開を行うと、opencv_contrib-master の下に opencv_contrib-masterのフォルダーができるので注意

3 cmakeの準備と設定
cmake-gui.exeを起動し、オプション指定の、OPENCV_EXTRA_MODULES_PATHに opencv_contrib-masterを指定



Generateのボタンを押下
完了するとWorkフォルダーのVisualStudio 2010用のプロジェクト一式が更新されている

4 プロジェクトのビルド
workフォルダーのOpenCV.slnをダブルクリック
visual studio 2010が起動する

プロジェクトの構成をリリース変更し、念のために一旦プロジェクトのクリーンを行い、その後ビルドを開始
マシンに依存するが約10分で完了する

注意
サンプルをビルドしようとしたらcontribのincludeファイルの指定方法がわからない

引き続き調査を行う


補足
visual studioでのビルドの最後のエラーが表示されるが、これが関連しているのかは不明




以上