第29回関東CV勉強会でSelective Search for Object Recognitionを紹介してきました

初ガツオの季節です。都会なので目に青葉は映りません。山などないのでホトトギスもいません。テッペン原稿カケタカ!

さて、仕事がらComputer Vision的な活動はぜんぜんできていなかったこの1年でしたが、年明けたぐらいから気持ち的にも余裕ができてきたので、ちょいちょいと遊んでいました。
そして先日開催された関東CV勉強会で、かなりひさしぶりに外で専門分野のお話をさせていただく機会をいただき、検出界隈では有名と思われる手法Selective Search(*1)(*2)について紹介してきたので、簡単に振り返ってみたいと思います。

勉強会情報

Continue reading

ndarrayとPySideのQImageとの相互変換

魚類はあまり変態しない(生まれた姿のまま大きくなる)ことが一般的で、カレイなどのように左右対称形から非対称になる…など、昆虫や両生類のそれに比べると控えめな程度にとどまるようです。

さてnumpyと愉快な仲間たちにおいて画像はndarrayとして表現されていて、それを表示するのに使うmatplotlibはちょっとしたGUI機能(widgetsモジュール)をもっています。
ただこれコード的にも絵的にもクセが強くごく単純なデモ以上のことは難しいので、何かしたいときはQtのPythonラッパーであるPySideを使っています。

んで、そのPySideで画像はQImageで扱われるので、裏っかわでndarrayで処理をしているならそれをQImageとの間で相互変換できる必要があります。

そのやり方はこちら。

(参考: python – QImage to Numpy Array using PySide – Stack Overflow

画素毎にループしてコピーするとかイケてないことしなくて済むから簡単だね!
QImageに持ってきてしまえばQPixmapにしてQLabelに突っ込んで表示するなりQPainterでお絵かきするなり、自由です。

cv::SurfDescriptorExtractorの拡張ディスクリプタを無効にする

魚類というのは分類学的にどうなるのか調べてみたら,昔は「綱」だったけどそうも言えないことがわかって,今は魚類をひっくるめた分類というのはない(生物学的には意味がなくなってしまう)んだそうですね.

さて,局所特徴量のSURFと言うと64次元だよね!という認識が一般的だと思います.
実際には原著(*1)の段階から特徴量を128次元で記述する拡張ディスクリプタ(extended descriptor)についても言及されていて,OpenCVの実装ではSURF特徴記述を行うcv::SurfDescriptorExtractorにおいてデフォルトで有効となっています.

cv::SurfDescriptorExtractor extractor;
std::cout << extractor.descriptorSize() << std::endl;  //128と出力されます

本来の64次元で使うには,特徴記述処理を行う前にこれを無効にします.
SurfDescriptorExtractorのコンストラクタのextendedをfalseにすればおkなんですが,
ぐぐって見つかるリファレンスでは最新のバージョンに同期されてなくて,でもコンパイルは通るので一瞬困惑します.

コンストラクタで指定するよりは,

cv::SurfDescriptorExtractor extractor;
extractor.extended = false;
std::cout << extractor.descriptorSize() << std::endl;  //64と出力されます

とすれば,その他のコンストラクタの他のデフォルトはそのままにいけます.少し汚いですが.

*1: H.Bay et. al., “Speeded-Up Robust Features (SURF),” ECCV2006

BundlerによるStructure from MotionでKAZE局所特徴量を使ってみた

一応お魚キャラとしてやっているわけですが,私のアイコンの魚を前からみるとどうなるの?とときどき聞かれます.
回答としては,このお魚は”幅を持たない”形状をしています.二次元です。

さて,大量の未整列な多視点画像からの三次元形状復元ついでにカメラの内外部パラメータの推定まで一気にしちゃう手法のことをStructure from Motion(SfM)と言い,結構長いこと研究されているホットな話題であります.

そんなSfMを行うためのツールにBundlerがあります.r○byのbundlerとは全く関係ありません.
Bundlerは局所特徴量を用いたsparseな画像間対応からSfMをするもので,一般的にはSIFTが使われていますが,対応付けは独立プログラムに委譲されてるので,うまくやればどんな局所特徴量でもSfMをお楽しみいただける設計になっています.

ということで,Computer Vision Advent Calendar 2012で書いたさかな前線 » ECCV2012で発表されたKAZE局所特徴量を試してみたの続きという事で,KAZE特徴量を用いたBundlerでのSfMを試してみました.実用的な例がほしかったのでw
CVAdventCalendarの@yasutomo57jpさんの記事の二番煎じです…

Bundler(やPMVS)のアルゴリズムについては他に譲ります(←

20121209_bundler_example_pmvs

※結論から言うとやり方がまずいのでto be continuedです…

Continue reading

CV勉強会@関東に参加してきました.ついでに少ししゃべりました.

フグといえば山口県ということで僕の地元でして,県としては対外的にはフグのことを福とかけて「フ」と言ってるわけですが,ぶっちゃけ一般市民はそう読んでなくてフク雑な気持ちになります.

さて,2012/12/16に慶応大矢上キャンパスにて@takminさん主催でコンピュータビジョン勉強会@関東ECCV2012読み会が開催されまして,就活ついでに行ってきたついでに発表までしてきました.

簡単に感想だけ.

Continue reading

cv::Matとcv::Mat_<T>の画素アクセスの速度

近くのスーパーに秋は国内産の鮭が売っててよく買ってたんですが最近は輸入のサーモンばっかしです少し寂しいです.

OpenCVでちょっと気になって,画素単位のアクセスをするときcv::Matのat()による方法とcv::Mat_のoperator()による方法でどっちが速いかなと思って調べてみました.
星の数ほどされてる議論のようなするけどぱっと見た範囲で見当たらなかったのでやってみた.
参考までに画像ピクセル値へのアクセスと計算速度 | OpenCV.jpもあります.

結論から言うと,全く同じでした.

コードはこんなかんじ.時間計測はオレオレライブラリで高精度な計測ができます.

実行結果はこんなかんじ.

% ./a.out
cv::Mat::at<T>() -> 9.82353ms/回
cv::Mat_<unsigned char>::operator() -> 9.69412ms/回

大きさ(w,h)によらず同じくらいの模様.

あと気になる生配列とのアクセス速度の差ですが,上述プログラムと同じ処理を書いちゃうと最適化で全部消えちゃうしそうならないくらい複雑なプログラムは面倒だったので断念.
最適化しなければ,cv::Matの方が3割くらい遅いくらいでした.最適化するとどうなるやら.

  • CPU: i7 870 (2.93GHz)
  • OS: Ubuntu 11.10 x86
  • gcc: 4.7.0
  • option: -std=c++0x
  • OpenCV: 2.4.3

追記:
Ivy Bridge速すぎワロタw

  • CPU: i5 3570 (3.40 GHz)
  • OS: Linux Mint 13
  • gcc: 4.6.3
  • OpenCV: 2.4.3
% ./a.out
cv::Mat::at<T>() -> 2.34902ms/回
cv::Mat_<unsigned char>::operator() -> 2.34902ms/回

ECCV2012で発表されたKAZE局所特徴量を試してみた

先日ちょっと膝をケガしてしまいまして,ギプスに松葉杖です.けっこうリアルさかなに近づけたんじゃないかと思うのですがいかがでしょう?
折しも12/6で私も23歳を迎えました.できれば無事健康体で迎えたかったこの日.

この記事はComputer Vision Advent Calendar 2012の12/7担当分として書かれたものです.
主催者でありながら華麗に遅刻をキメました.これはひどい.
高専時代の後輩でもある@blue_jamくん,お疲れ様でした.そして誕生日メッセージありがとうございます.

さて,コンピュータビジョンにおける極めて重要な要素のひとつに画像特徴量があります.
これまでにたくさんの特徴抽出手法が提案されてきているわけですが,この度は最近の国際会議で発表されたばかりの新しい手法の実装が公開されていたので,それを試して見ることにしました.

Continue reading

Linuxでの野良ビルドのOpenCVでカメラをちゃんと使うにはlibv4l-devが必要みたい

地元に鮎の美味しいお店があって,そこの背ごしは最高の絶品だったりします.また行きたいですが,地元でも山の中なので,行くこと自体がけっこう大変.

さて,Computer Vision Advent Calendarの担当日からすでに3時間遅刻していますがこれはその記事ではありません.
今,がんばって書いてるところです(←

手元のLinux環境でOpenCVを野良ビルドするとき,libv4l-devをインストールしてからでないと,cv::VideoCaptureが動かないみたいです.

$ sudo apt-get install libv4l-dev
 ...
 --   Video I/O:
 --     DC1394 1.x:                  NO
 --     DC1394 2.x:                  YES (ver 2.2.0)
 --     FFMPEG:                      YES
 --       codec:                     YES (ver 53.35.0)
 --       format:                    YES (ver 53.21.0)
 --       util:                      YES (ver 51.22.1)
 --       swscale:                   YES (ver 2.1.0)
 --       gentoo-style:              YES
 --     GStreamer:                   NO
 --     OpenNI:                      NO
 --     OpenNI PrimeSensor Modules:  NO
 --     PvAPI:                       NO
 --     GigEVisionSDK:               NO
 --     UniCap:                      NO
 --     UniCap ucil:                 NO
 --     V4L/V4L2:                    Using libv4l (ver 0.8.6)
 --     XIMEA:                       NO
 --     Xine:                        NO
 ...

ここでUsing libv4lとなってることが重要みたいです.

cv::VideoCaptureが無言でエラーだけ返すので困りましたがそういうことだったみたいです.

今週のサーベイ(2012/11/30)

11月が旬のお魚って何があるかな?と思って調べてたんですが,アイナメって年中おいしくいただけるんですね知りませんでした.

さて,研究に関係することも純粋な興味も,なんかいろいろサーベイしながら構造的に記録取ってなくて時間の無駄感MAXなので毎週簡単にログ書くことにしました.
あんまり自分の研究に近いものはちょっと省きます.何をどうやってやろうとしてるかバレちゃうのでw
なんで,ここに書いたのの数倍は呼んでるんじゃないかなw

継続的にやります.うん.

"Online Moving Camera Background Subtraction"
  • Ali Elqursh, Ahmed Elgammal(Rutgers University)
  • ECCV2012 poster
  • 非固定カメラからの動物体領域をdenseに推定する手法の提案

    • このタイトル誤解を招くよ…
    • いわゆる背景差分の要素はないです
  • ラボの論文紹介で紹介
  • 今度の関東CVのECCV2012読み会で紹介します〜
“A Database and Evaluation Methodology for Optical Flow”
  • S.Baker,D.Scharstein,J.P.Lewis,S.Roth,M.J.Black,R.Szeliski
  • IJCVのジャーナル(2011)
  • optical flowを算出する各種手法を統一的に評価するデータセット
“A Stereo Vision System for 3D Reconstruction and Semi-Automatic Surveillance of Museum Areas”
  • Shahram Bahadori, Luca Iocchi
  • イタリア国内のワークショップ?2003年とこの分野のstate-of-the-artからすると古め
  • ステレオ映像から3次元復元をベースにしたactivityのsurveillance
  • システムとしてはおもしろいけど手法としてはまぁ

    • ページ数が少ないのでそれほどわかんないですけどね

第21回 名古屋CV・PRML勉強会を開催しました.

懇親会のとき11人掛けのテーブルに2皿来たほっけのうち1皿をぼく一人で半分くらい食べてすみませんでした.

さて,先日2012/11/18に,第21回 名古屋CV・PRML勉強会を開催いたしました.

実は第1回勉強会は2010年の11月に開催されており,今回をもって勉強会も晴れて3周年目に突入いたしました.
基本毎月ペースですが,例年8月と今年については6月にお休みだったぶんで回数が合いますね.

概要

内容と感想

藤吉先生・山内さんより,「[サーベイ報告]統計的学習手法による人検出」
  • スライドは統計的学習手法よる人検出 – Slideshare
  • paperはhttp://www.vision.cs.chubu.ac.jp/04/pdf/TS04.pdf
  • 9月のPRMUで発表された内容でした
  • その時私は自分の発表とかぶってて聞けませんでした(´;ω;`)なので非常に楽しみでした

    • ぼくはまさに人検出をやっておりますw
  • 人検出はやっぱりすごいホット
  • 手法的には落ち着きを見せ始めてる印象,すなわち,トップ会議に見る最新の動向を見ると,手法として高精度化するよりは学習手法などの点で高精度化し実用的にする流れが増えている
広島大学・平川さんより,「初めてのグラフカット」
  • 遠いところからはるばる,ありがとうございました!
  • セグメンテーションをするためにグラフカットを勉強した,という立場からグラフカット入門
  • わからなかった人がわかるようになった過程をたどって教えてくれるのが最も効果的なので,非常に貴重なご発表でした
  • 即席とは思えないくらいよく作り込んであって,ちょっと同い年として非常に危機感を…w

    • 玉木先生といえばプレゼンが非常にわかりやすいことで僕の中で有名ですが,やはりそこの学生さん,さすがです…!
    • 3次元でグラフの雰囲気を表示してる図というのは僕は初めて見ましたw
高橋さんより,「ACCVと私」
  • 11月に開催されたACCV,名古屋クラスタとしてほぼ唯一参加されたとのことで,前回のECCVに引き続きぜひご報告を…!とお願いしました
  • 韓国・テジョンにて

    • わりと周りに何もなかったらしいw
  • statistics,awardsなど

    • awardsの各論文の内容まで紹介いただいて勉強になりました…!
  • もはやACCVもトップ会議に近いくらいの水準になりつつあるんですねぇ…
玉木先生より,ICPR2012の参加報告
  • 時間が余ればということでICPR2012についてお話をいただきました
  • preziを実際に使われた発表というのは実は初めて見ましたw
  • ICPR,規模がすごい

    • オーラル何パラ,どころか,オーラルとポスターがパラレルだったりinvited talkがパラレルだったりshotgunプレゼンがパラレルだったりというw
    • 日本だとやっぱ狭い…
  • 次回は2014年,ストックホルムにて

懇親会

  • 今回は藤吉先生が幹事をされまして25人という大盛り上がり
  • 学生さんが多かったですね

    • M1が多かったです
    • B3の人も2名いました
    • 2年前僕が初めて参加した時がちょうどB3の11月でしたので,なにか非常に嬉しいものでした
  • いろいろ楽しいお話も聞けました
  • PRMUアルコンにnagoyacvから横割りでチーム組んで出ようという案

    • 僕自身も6月頃から考えていたのですが,他の方も考えていたそうです
    • こりゃやるっきゃないww

全体の感想,その他

  • 人が多いとやっぱ楽しい
  • 今回は準備おくれてすみません(´;ω;`)
  • 次回は一応12月15日開催予定です

    • テーマどうしようかな…