バックナンバー

--.--.-- --:-- | EDIT
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Category: スポンサー広告
Permanent Link | Comment(-) | Trackback(-) | PageTop↑
2013.04.08 13:25 | EDIT
去年,コンピュータビジョンの研究の進め方について投稿しました.

今年はその改訂版として新たに内容を加えました.

以下,赤字が新しい内容です.

[勉強方法]

1.プログラミング

- 基礎力
僕の使っている言語環境は主にC++です(Visual StudioまたはXCodeにて).3年生の研究室配属のとき,最初に一冊基礎の参考書を読んでから研究に入りました.もちろん,今まで少しずつ勉強は進めて参りました.構文を調べる時には,C++編(言語解説)/C++編(標準ライブラリ)を参考にしてきました(もちろん,今まで参考にしたページは数多くあります).

-ライブラリ
コンピュータビジョンの分野においてはOpenCVがライブラリとして使われてきました(OpenGLなんかも?).Kinectが登場した今ではOpenNIや Point Cloud Library(PCL)なども盛んですね.基本的には最初に触って遊んでみて,次にリファレンスを確認してどんな機能があるのかを覚えておくと問題に直面した時どの関数が使えるのか,という見当が付け易そうです.あとは,研究を進めて行く中でどんどん覚えて行きます.

- 自分で実装する
もちろん,コンピュータビジョンの知識がついてきてカスタマイズしたいと思った場合,どうしてもライブラリでは解決出来そうにない問題に直面した場合には自分で手法を実装する必要があります.最新の関連研究の論文に書いてある手法を試したい時にも自分で実装しなければなりません.そのためにもプログラミングスキルは磨いておくのが良さそうです.また,数学やコンピュータビジョンの知識も必要になるでしょう.僕は「完璧に理解すれば実装はできる」と思っているので,実装する時には手法についてとことん理解度を高めるようにします.文献を読んでみて,紙に書いて,プログラミングを書いてテストしながら前に進めます.

- コードリーディング
たまに他人が書いたプログラムを参照しています.参照する時にはオープンソースをみてみるのが良いでしょう.CVPapersのページでも,Computer Vision Algorithm Implementationsがあり,フリーで獲得出来るソースが多く載せられています.ここにも載せられていますが,OpenCVの中身をみてみるのも結構面白いです.

- トライアンドエラー
実際にやって試すことや,失敗することは非常に大事です.従来手法を実装してみたものの,うまく問題を解決できない時もあります.そのときにどうするかを考えて,自分の経験や知識を従来の方法に付け加えて新しい手法になることもしばしばあります.「従来手法の後追いをしてもしょうがないじゃないか」みたいな考え方もありますが,サーベイして歴史を知る,そしてそれを破ることで新しさが生まれる事は多いです.また,自分の失敗の繰り返しの中でも新しさは出てきます.あきらめずに挑戦・失敗・改善・失敗・改善...の繰り返しです.


2.コンピュータビジョンの基礎知識

どれだけの手法を知っているか,で研究するための引き出しの数が変わり,問題解決能力が高まると感じます.最新の論文から知識を獲得するということもありますが,スタンダードな手法になっているアルゴリズムを勉強するのが手っ取り早いと考えます.以下は,僕が今まで読んだことがあるコンピュータビジョンの本です.スタンダードな手法が主に取り上げられています.(注:全部読みきったわけではありません)

- ディジタル画像処理, CG-ARTS協会
→ディジタル画像とは何か?から始まり,単純なアルゴリズムが紹介されていて,画像処理入門者が簡単に読めるような構成になっています.最初に読む一冊.

- コンピュータビジョン最先端ガイド,アドコムメディア
→最先端のアルゴリズムがチュートリアル形式で丁寧に取り上げられています.一章毎にひとつのアルゴリズムが解説されています.シリーズ化されていて,2012年4月現在では4巻までが発行されております.

- OpenCV 2 プログラミングブック,マイナビ
→OpenCV使い方とアルゴリズムの説明があります.コンピュータビジョンのアルゴリズムとOpenCVによる実装方法が同時に勉強出来るのでお得な本です.研究にOpenCVを使う人は一読することをおすすめします.僕が勉強していたときは1.0版ですが,OpenCV2シリーズ対応の本が出ています.

- Computer Vision: Algorithms and Applications, Springer
→Microsoft ResearchのRichard Szeliskiさんが書いている本で,上記リンク"Latest Draft"からpdfが配布されています.アルゴリズムはもちろん,それが何に使えるのか?という視点でも書かれています.中を見てみると,カメラ幾何のお話が多いという印象を受けます.

こちらの書籍は訳書が2013年に「コンピュータビジョン-アルゴリズムと応用-」というタイトルで出ていて,既にご存知の方も多いと思います.日本語訳なので最初に勉強するときには読みやすいと思います.

- Multiple View Geometry in Computer Vision, Cambridge University Press
→主にカメラ幾何の話が紹介されている,比類なき書籍です.カメラ幾何を勉強するならこれ.

その他,オライリーの詳解OpenCV,佐藤淳先生のコンピュータビジョン-視覚の幾何学-,David A. Forsyth先生,Jean Ponce先生のコンピュータビジョン,などなどたくさん出てきますね.


3.論文(サーベイ)

- 有名な国際学会・論文誌から探す
まずはCVPR,ICCV,ECCVなどのトップカンファレンス,PAMI,IJCV,CVIUなどトップジャーナルから探しています.トップカンファレンスの論文はCVPapers-Computer Vision Resourceから見ることができます.このページは非常に良く見る重要な情報源です.ここに論文のリンクが無くても,著者ページにあることも多いので,目に留まった論文についてはタイトルや著者名で調べることをおすすめします.

- 読んだ論文の関連する論文を探す
トップカンファレンスに出てくる人は,ほぼサーベイを十分にしています.逆にいうとサーベイをちゃんとして,その研究の位置づけをしていないとトップカンファレンスに通らないです(僕も何度か落とされて痛感しました).なので,その研究者のサーベイ能力を借りてどんどん調べて行きましょう.しかし,全ての論文に対して関連する論文をピックアップしてしまうと,とんでもない数を読むことになります.特に関連する論文を見つけ,さらにその中でも強い関連がある論文だけにしておく必要はあると思います.

- 著者を調べる
トップ会議でよく名前を見る人は,その人の年代を追ってサーベイしてみると面白いです.こういう人はほとんど自分のページを持っているものです.研究者のページから研究に関する情報を収集しましょう.

- 分野別のサーベイ本やサーベイ論文を読む
例えば,ヒューマンセンシング分野で言うと"Visual Analysis of Humans - Looking at People",カメラ幾何分野だと前述の"Multiple View Geometry in Computer Vision"がサーベイ本にあたります.それぞれの分野についてまずはその類いの書籍がないか確認すると良いかと思います.また,それ以上にサーベイ論文はたくさんあります.PAMI(IEEE Trans. Pattern Analysis and Machine Intelligence)やCVIU(ELSEVIER Computer Vision and Image Understanding)などのジャーナルや国際会議論文でもサーベイ論文は数多く出回っています."(キーワード) Survey"などで調べると出てくることが多いです.


[論文の読み方]

読む順番と把握する情報

- アブストラクト→結論→図とその注釈→本文

- アブストラクト:全体の内容を簡単につかむ

- 結論:どのくらいの成果が出ているのかを知る

- 図と注釈:図で分かり易く,そして具体的なイメージをつかむ

- 本文:全体の流れ,実際のアルゴリズム,数式,実験結果
全体の流れは,序章の次あたりにあるはずです(無い場合もありますが).ここで,全体としてどういう流れで,どんなアルゴリズムを使っているのかを知ります.知っているアルゴリズムや,オリジナルのアルゴリズムを分類するだけで,その論文では何を重点的に調べる必要があるのかがある程度わかります.
分からない数式は,僕の場合一回書いて理解しようとします.また,理解した後もノートに書いてあると何度か見ることになるので,書くという方法を採用しています.


[研究の進め方]

1.情報の獲得
適切なタイミングで,適切に情報を得ることが重要です.上で詳解した方法を一通り試してみると,状況に応じて「何が使えそう」ということが頭に浮かぶはずです.最初は容易なことではありませんが,知識を積み重ねることによって,出来るようになってくるでしょう.

2.勉強しろ!
これは,コンピュータビジョン界の大先生から「博識になる方法」として実際に言われた言葉です.博識の人と知識が無い人も実は入ってくる情報は変わらないのではないか?と言われました.引き出しを多く持っていると,その人の中に残る情報量が違う,と解釈しました.日頃から専門分野だけでなく,多くの分野に精通させて,何にでも興味を持って知識を累積しておくことが博識になるための道だと感じました.研究には直接的に関係ないと思われる知識に関しても貪欲に蓄積していくと,あるところで繋がる事もあると感じました.複数分野に精通することでも道が拓ける可能性も広がると思います.

3.論文・読書とアイディア帳
多くの知識を入れ,アイディアとして出す.この,インプットとアウトプットの回転効率を上げることでアイディアの質を高める,ということは今,僕が大事にしていることです.論文を毎日読むとか,読書を年間数百冊読もうとかがインプットに,そしてブログや友達や周りの人に研究のことや得た知識について話すことがアウトプットとして上げられます.また,いつも研究ノートを持ち歩いて,アイディアが思い浮かんだら書くようにもしています.アイディアにノートを書くことは,発明王Thomas Edisonや,アイディアマラソンを参考にしています.

4.ミーティングを活用
他の人の知識をうまく利用して,新しい突破口とするためにも,ミーティングに限らずいろんな人と話す必要があります.自分だけでは限界と思っても,他の人の中に解決策が存在する場合があります.またはブレインストーミング的に新しいアイディアを考えたり,知識を増やすためにも人と意識して話す必要はあるでしょう.研究テーマを決めるときや何か研究の手法を拡張させようとするときに手を借りると研究が強化されます.

スポンサーサイト
 | ホーム | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。