久しぶりにdoxygenでハマった

昨日のGoogle Testと合わせてですがDoxygenによるドキュメンテーションも意識しようとしてるのですが久しぶり過ぎて躓きましたorz

入門ガイド — Google Test ドキュメント日本語訳を参考にテストコードを書くと,無名名前空間が出てきたのですが,無名名前空間内のテスト用のクラスのドキュメンテーションが出来ない!なんでだ・・・って3時間ほど悩みましたが,単に設定の問題でした.

EXTRACT_ANAN_NSPACESという設定にチェックをつけ忘れていたのでそれをチェックすれば解決できました。
こんなことに3時間悩んでいた自分に腹が立つ・・・。もっと精進しないとなぁ。

その他ICCV気になる論文

いくつかあるけど、とりあえず3つほど。

  • 1つ目はCMUでお世話になった金出先生とノンパラ関連でよく目にするLiFei-Feiらの論文

Distributed Cosegmentation via Submodular Optimization on Anisotropic Diffusion (project)
Gunhee Kim (CMU), Eric P. Xing (CMU), Li Fei-Fei (Stanford), Takeo Kanade (CMU)
プロジェクトページ
そうそうたるメンバーだし、ICCV祭りで紹介する予定の文献なのできっちり読まないとね。

  • 2つ目はYoutubeのデモがすごいDTAM

DTAM: Dense Tracking and Mapping in Real-Time 
Richard A. Newcombe, Steven J. Lovegrove and Andrew J. Davison
Youtubeのデモ
PDF
ですがデモがすごいです。こんな上手く行くもんなんだなと心が折れそう・・・.

  • 3つ目は“Shared Shape Spaces”著者もPDFものってないですがShapeを共有するという話っぽくて自分に関係ありそうなのでよみたいです。

自分が残り半年で出来ることと言えば今やってる研究を精一杯形にしてCVPRに投稿するというのが第一目標!それ+ジャーナルをもう1本書いて、あとはD論のみを社会人になってから出すという形に持ってくのが多分自分にできるベストだと思ってます。あとで「なぜベストを尽くさないのか」って思わないで済むように精一杯頑張ろう!自分

Google Test 導入

今までテストコードとか全然ちゃんと書いていなかったのですが,それはまずいなと思うに至りGoogle Test ドキュメント日本語訳を参考にGoogle Testを導入することにしました.

とりあえず,入れ方も良く分かっていない状態だったので検索をかけたら,idojunさんのアイコンが出てきてちょっとびっくりしました.やっぱり企業の方のコードだとテストもきっちりしてるんだなと妙な納得をしてみたりw

自宅PCにはVS2008 Professionalが入っていたので以下はそれにGoogle Testを利用するための自分のための覚書です.
(VS2003ならデフォルトでソリューションファイルが用意されてます)

  1. Google TestのDownloadからzipファイルをダウンロード
  2. cmakeを使ってVS2008用のソリューションファイルを作成してビルド(結構時間かかる)してライブラリを作成

そろそろ眠いので続きは起きてからやります.
俺,明日起きたらCoccoのアルバム買ってTestマスターになるんだ(死亡フラグ)QtとTestちゃんとマスターしたらそれなりにマシなコードは書けるようになるかな.ヘッポコプログラマーなんで精進しないと。

以下追記

VSのプロジェクトで実際のテストを行う手順は以下の通り.

  1. プロジェクトにgtest.libなど作成したライブラリを追加
  2. インクルードパスも追加
  3. ::testing::Testを継承したテスト用クラスを作成
  4. TEST_F(Type,test_name)としてテスト関数を定義
  5. main関数に"::testing::InitGoogleTest(&argc,argv);" "return RUN_ALL_TESTS();"の2文を追加

これでテストが可能に。
今回はノンパラベイズの実装の前準備として各種の確率分布を表現するクラスを作ってみてテストを行いました.コード内の例外処理をしっかり書いて,EXPECT_ANY_EXCEPTION()マクロでエラー入力に対してちゃんと例外をスローしているかを確認をするテストとサンプリング結果と期待値がちゃんと似た値になるかのテストを行いました.そうしたらDirichlet分布のサンプリングについてのテスト結果が明らかにおかしくて引数の順番間違えという初歩的なミスが発見出来ました.

テストってホント大事ですね(水野晴郎

8月23日追記

OpenCVと連携しようと思ったら謎のエラーでハマって困っていたのですが
id:takminさんが同様の事例で悩まれていて解決法を残して下さったのでその通りやったら解決しました!

takminさんはホント神様やでー・・・・・ありがとうございました.

DTAMやばい!

今年のICCVで発表される予定のDTAMがヤバいです。
どのくらいヤバいかはこのリンクを見て頂ければ分かるかと
youtube
PDF
このような技術が出てくるといよいよMatrixな世界が近づいてきてるのかなぁと思ったり。
論文の中身はまだ全然ちゃんと読めていないですが、きっちり読もうと思います。

あとはCMUでお世話になった金出先生とLi Fei-Feiがタッグを組んで発表しているペーパーも割と気になってます。
Twitterでketsumedo_yarouさんが呟いていたんですがLi Fei-Feiってまだ35未満という事実に驚愕しました。
頑張らなきゃって思わせる言い材料と思って頑張ろうと思います。

今年はけちょんけちょんにけなされようとCVPR出すぞー!
といって自分を追い込むライフハック。ポスターでいいので頑張って通したいですね。

Qtインストール 

研究で色々ビジュアライズする必要性を感じていて,GUIでぐりぐりうごかしたいのだけど
OpenCVGUIが貧弱なので以前から手を出そうか迷っていたQtに手を出すことにしました。

Qtは修行*1とか色々な方から言われていたので無茶苦茶ビビっていたのですがそこまでビビるほどでもなかったなというのがインストールしてみた感想です。

VS2008ProfessionalとQtを連携させるには以下の手順で大丈夫だと思います.

  1. http://qt.nokia.com/downloads-jp/downloads-jpからQt 4.7.3 for Windows(VS 2008, 228 MB)をダウンロードしてインストール
  2. 続いて,http://qt.nokia.com/downloads-jp/downloads-jpからQt Visual Studio Add-inをダウンロードしてインストール

これだけです。ね,簡単でしょ?

このあとVisual Studioを立ち上げるとQtが下図のようにツールバーに入っているはずです.


この状態になればプロジェクトの新規作成時にもQtを利用したプロジェクトが作れるようになるのでそこからはMFCみたいに必要な設定をいくつかしてやればVS側で色々とファイルを生成してくれます.楽ちん楽ちん♪


GUIのレイアウトの変更や追加もプロジェクト作成時に生成される[プロジェクト名].uiファイルを開けばGUIデザイナが呼び出され,MFCGUIの編集をした要領でGUIの編集が出来ます.


今回はとりあえずチェックボックスを追加して実行してみました.

まだ,ボタンのイベントハンドラやマウスイベントの取得などは全然ですが思っていたより敷居が低かったのでほっとしてます.

目指せ,Qtマスター!

参考URL:

*1:VS2005とかだとソースビルドが必要でそれにものすごく時間がかかるらしい

Win7 64bitマシンにSP1が上手く適用できない

2月のMSのアップデートで出たWin7 SP1を適用したのですが
途中で失敗してしまうのでその回避法についてメモ.

現象が起きたPCはWin7 Enterprise 64bitを入れてあるDell Precision690です.

  • 起きた現象

Windows Updateを適用するときに出てくる、更新X個(10万〜13万くらいある様子)中Y個のファイルを適用中・・・といった画面で
282個目を適用するときに、致命的なエラー(C0000034)とでてアップデートが終わらない.
強制終了して再起動してもまた同じアップデートを行おうとしてWindowsが使えない

  • 対応策

参考サイトに書いてある通りにすればどうにかなりました.
サラっと訳すと

    • 再起動時にオプションを立ち上げて,スタートアップの復元を選択(Windowsを通常起動するとの2択)
    • 復元が始まったらキャンセルを選択
    • 情報をMSに送信するかきいてくるがとりあえずキャンセル
    • ダイアログに復元の高度なオプションへのリンク(画面左側)があるのでそれをクリック
    • 一番下のコマンドプロンプトを使うものを選択
    • notepad.exeを打ち込んでメモ帳を開く
    • メモ帳からファイル→開く→c:\Windows\winsxs\pending.xmlのコピーを取る
    • pending.xmlを開いて0000000000000000.cdf-msをctrl+fで検索.以下のような部分が見つかるはず(少し状況によって変わる部分もあるかも)



自分の場合はこの方法で回避できました.参考になれば幸いです.

Mode-seeking by Medoidshifts

クラスタ数がはっきりしない状態でクラスタリングを行う手法として
MeanshiftやMedoidshiftがあるが、Medoidshiftがあまり分かっていなかったので

Mode-seeking by Medoidshifts
Yaser Ajmal Sheikh, E.Khan, and Takeo Kanade
Eleventh IEEE International Conference on Computer Vision (ICCV 2007), October, 2007.

を読んでみました.
どうもComplexityがO(N^2.38)で済むらしく速いらしい。

meanshift・・・

  • N点との距離計算をシフトする毎に計算

medoidshift・・・

  • NxNの距離行列を作ってしまえば以後シフト時の距離比較は行列を参照すればok

これが一番の理由のようです。

具体的な手順は以下の通り

  1. 距離行列Dと重み行列Kを計算し、その積の行列S=DKを計算
  2. Sのi列目に注目し、最小となる要素jを探す
  3. j列目に移動
  4. 移動しなくなるまで手順2,3を繰り返す。この時のiから最後のjまでの集合が1つのクラスタとなる。medoidは最後のインデックス番目の要素
  5. 全ての要素を属するクラスタのmedoidに置換

案外簡単そうなので明日にでも実装してみよう。