64bit Windowsでのgnumexの設定
最近,Matlab上でC/C++プログラムを走らせるためにmexをよく使っているのですが,Windows7/8(64bit)環境での設定に手間取ったので,メモメモ。
Linuxは全く苦労しなかったんだけどなぁ…
ちなみにmexで使用するコンパイラはMinGWのgccを選択します。
Linux上でmex用に書いていたプログラムを使いたかったので。
1. 64bit用のMinGWのインストール
参考サイトに書いてあるそのままの手順で設定。もちろんパスも適当に追加。
2. gnumexによるmexコンパイラの設定
ここで,32bitのwindowsであればgnumexを実行し,guiに従って設定できる。しかし,64bitのwindowsの場合,以下に書くようにプログラムの変更や再コンパイルが必要。。。
再コンパイル
ダウンロードしたプログラムに含まれているmexgcc.exe, shortpath74.mexw32, uigetpath74.mexw32は32bit windows上でコンパイルされているものであるため,64bit Windows用に再コンパイルする必要あり。
これらの元ファイルはフォルダ: srcに入っている。
mexgcc.cはコマンドプロンプト上でgccを使ってコンパイル。
gcc -o mexgcc.exe mexgcc.c
uigetpath.cはmatlab上でmexコンパイル。ここで使うコンパイラはWindows環境で使えるものなら何でも。
mex uigetpath.c
shortpath.cはコメントアウトがうまくできておらずシンタックスエラーになる…ので,インクルードファイル行の前でコメントアウトをする。
shortpath.c 4〜8行目でコメントアウトできてない…↓↓ ----------------------------------------------- 1: /* shortpath */ 2: /* return short form path name for long form */ 3: /* second arg is a long form path name */ 4: /* to compile with lcc: 5: to make sure lcc is used delete mexopts.bat in the prefdir folder 6: (>> delete ([prefdir '\mexopts.bat'])). Then do: 7: >> mex shortpath.c 8: 9: #include <windows.h>
そしてmexコンパイル
mex shortpath.c
いろいろと変更
- 再コンパイルしたプログラムをgnumexフォルダにあるものと入れ替える。shortpath.mexw64とuigetpath.mexw64はそれぞれshortpath74.mex64, uigetpath74.mexw64とファイル名を変更しておく。
- gnumex.mを編集する。変えなければいけないのはライブラリのディレクトリパス,mexコンパイルしなおしたプログラムのファイル名。
ディレクトリパスの変更は
770: libdir = [matlabroot '\extern\lib\win32\lcc\'];
から
770: libdir = [matlabroot '\extern\lib\win64\microsoft\'];
プログラムのファイル名は
687: outvs = [outvs; fdwarn(ps.gnumexpath, 'uigetpath74.mexw32')]; 688: outvs = [outvs; fdwarn(ps.gnumexpath, 'shortpath74.mexw32')];
から
687: outvs = [outvs; fdwarn(ps.gnumexpath, 'uigetpath74.mexw64')]; 688: outvs = [outvs; fdwarn(ps.gnumexpath, 'shortpath74.mexw64')];
以上の変更をしてからgnumexを実行すると,設定完了なはず。
PBRTをインストールするときに詰まりまくったからメモしておく
CGレンダラであるPBRT(Physically Based Ray Tracing)をインストールするのに詰まりまくって半日潰してしまいました。。。ちなみにOSはUbuntu12.04。とりあえず,備忘録として乱文だけどメモしておきます。
基本はStanford Univ.の講義ページのまま。
インストールするもの
- libtiff
- zlib (参照ページにはないが,openexrかilmbaseをインストールするときに必要になる
- ilmbase
- openexr
- pbrt
インストールの流れ
1. libtiff
cd (フォルダ展開先)/tiff-3.8.2 CXX=g++-3.4 export CXX ./configure make sudo make install
しかし,makeの途中で以下のエラーが発生
/usr/local/lib/libz.a: could not read symbols: Bad value collect2: ld returned 1 exit status libtool: install: error: relink `libtiffxx.la' with the above command before installing it make[2]: *** [install-libLTLIBRARIES] エラー 1 make[2]: ディレクトリ `/usr/local/src/tiff-3.8.2/libtiff' から出ます make[1]: *** [install-am] エラー 2 make[1]: ディレクトリ `/usr/local/src/tiff-3.8.2/libtiff' から出ます make: *** [install-recursive] エラー 1
コンパイラを再インストールしても治らなかったので,libtiff/Makefileの以下の行をコメントアウトし,再びmakeをすると通りました。
68: am__append_2 = libtiffxx.la
及び
458: libtiffxx.la: $(libtiffxx_la_OBJECTS) $(libtiffxx_la_DEPENDENCIES) 459: $(CXXLINK) $(am_libtiffxx_la_rpath) $(libtiffxx_la_LDFLAGS) $(libtiffxx_la_OBJECTS) $(libtiffxx_la_LIBADD) $(LIBS)
2. zlib
-
- 特に詰まることがなく終了
cd (フォルダ展開先)/zlib-1.2.7 ./configure make sudo make install
3. ilmbase
-
- g++コンパイラを4系に戻す必要有り
cd (フォルダ展開先)/ilmbase-1.0.2 CXX=g++ export CXX ./configure make sudo make install
4. openexr
cd (フォルダ展開先)/openexr-1.7.0 ./configure make sudo make install
しかし,makeの途中でmemsetとかmemcpyが宣言されてない!旨のエラーが発生。該当するファイルには以下を追加し,再びmakeをすると通りました。
#include <string.h>
5. pbrt
cd (フォルダ展開先)/pbrt-v2/src HAVE_LIBtIFF=1 make
以上で,インストール完了。
英語で文章を書くということ
英語で文章を書くことについて,色々と記事を読んだのでまとめ。
English Composition: Some Cross-cultural Considerations
日本語と英語のライティングに関する文化の違いについての記事。
- 日本語は読み手が行間を読んで内容を理解する=Reader responsibility。
- 英語は書き手が明確に内容を伝える=Writer responsibility。
- 英語を使う時はこの違いを意識しておかないと。
A Comparison of Cohesion Techniques in Japanese and English
日本語を英語に訳する時は,単語の慣用性を意識しないと,文法的に正しい文章でも,違和感がある文章(まとまりのない文章)になってしまうよという記事。
- 文章における一貫性には構造・文法・語彙の3つの視点が存在
英語メモ
w.r.t.
- with regard to: 〜に関しては
- with respect to: 〜について,〜に対して
whole gamut
- ありとあらゆるもの
- wholeもgamutも全体を包括するような意味合いを持っている気がする…
Subsurface Scatteringのモデルについてのメモ
Diffusion近似
- Diffusionにおいては,光は一様にランダムにかつある特定の方向に優位に散乱する
は光の進行方向
は方向性を持たない光の強さ
は特定の方向に向かう光の強さ
Dipoleモデル
Transport theory
- 領域内で起きている散乱を大域的に捉え,光の密度分布変化を考察する分野
Fast translucent
- A rapid hierarchical rendering technique for translucent materials [SIGGRAPH2002]
- 半透明な質感を持つ物体のsubsurface scatteringはmultiple scatteringのみで近似できるとし,計算の効率化を図る
- サンプル点のイラディアンスに階層構造を持たせ,レンダリングに用いるサンプル点を効率的に選択
Multipoleモデル
- Light diffusion in multi-layered translucent materials [SIGGRAPH2005]
- マルチレイヤー構造を持った物体内部のsubsurface scatteringを表現
- 媒体各層における境界条件を満たすように点光源を配置
- 各層における透過を上手く表現できるようになる
- 直感的なパラメータで透明度などを制御できるようにすることが課題
英語のオンラインクラスで学ぶコンピュータビジョン
こんにちは,Computer Vision Advent Calendar 2012の12/15の記事を担当する@progranateです。ネタや実装系*1ではなく,コンピュータビジョンに関する英語のオンラインクラスの紹介をします。
なお,この記事で対象とするのは,コンピュータビジョン(CV)に関する基礎的な知識を身につけたいけど何から手をつければ良いのかわからない,あとついでにと言っちゃなんだが英語の勉強もしたい!という方々です。なので,自分で勉強できるし,英語もある程度使えるよ!という方はどんどん文献を読んで研究を進めるなり,お仕事で使うなり,趣味で没頭するなりしてこの記事は聞き流して頂ければと思います。
そもそもオンラインクラスって?
この記事で扱うオンラインクラスとは,インターネットを利用して学習コンテンツを提供する授業のことを指します。
かつてのオンラインクラスはMIT OPEN COURSEWAREやYoutube EDUなどのように,毎週または講義期間毎ににアップロードされる動画,スライド,時にはスキャンされた手書きのノート等を参照して自習する形でした。
しかし,現在はCourseraやedX,Udacityのような,動画やスライドはさることながら,
- 小テストやコーディング,はたまた小論文などの課題が課せられ,点数が付けられる(授業期間中は締切有)
- 掲示板を通じて,講義や課題で分からない部分の議論を他の受講者と行える
- 無事,授業期間中に修了した場合には修了証がもらえる
などなど,学習を促すコンテンツを持つサービスが登場しています。もはや大学で講義を受けているのと同じ感覚ですね!また,ここで挙げているサービスでは世界有名大学*2の講師陣によるクラスが扱われており,レベルもある程度高いものです。もちろん,講義は全て英語で行われるので,英語も身につけられますよ*3。まさに一石二鳥ですね!
現在提供されているコンピュータビジョン関連のオンラインクラス
ここでは,Couseraにて提供されているコンピュータビジョンに関連すると思われるクラスをいくつか紹介します。*4
すでに開講されたもの
ここで紹介するのは私が実際に受講したものになります。
- Computer Vision: The Fundamental
- 講師: Jitendra Malik (UC Berkeley)
- CVPRでのLonguet-Higgins Prize*5を2回も受賞している研究者で,この方の研究室からはnormalized cutやshape context,anisotropic diffusionなど現在は当たり前に使われるアルゴリズムが提案されています。google scholarによるとcitationは1000を超えるとか…
- 講義レベル: 大学学部生くらい
- その他コメント
- 内容としては3次元のシーンがカメラを通じてどのように撮像されるかの話に始まり,カメラ・シーンの座標系の話,ステレオ視,画像処理,物体認識など,大学の講義でCV扱うならこうなるよねーという流れになっています。CVの勉強をすでにしている方は知っている話が大半ですが,ざっと復習するには良いコンテンツなのでは。
あと,今はもう無いようですが,4月から講義が始まったのに,途中から2ヶ月近く更新がなされなかった挙げ句「実際の業務が忙しくて更新できなかった。この講義ボランティアでやってるし,オンラインクラスって難しいよね。」という趣旨の謝罪文が掲載されるというエピソードがありました。大学の先生は忙しいですよね…
- 内容としては3次元のシーンがカメラを通じてどのように撮像されるかの話に始まり,カメラ・シーンの座標系の話,ステレオ視,画像処理,物体認識など,大学の講義でCV扱うならこうなるよねーという流れになっています。CVの勉強をすでにしている方は知っている話が大半ですが,ざっと復習するには良いコンテンツなのでは。
- 講師: Jitendra Malik (UC Berkeley)
- Machine Learning
- 講師: Andrew Ng (Stanford University)
- CourseraのCo-CEOかつCo-founderの一人。2008年にStanford大学初となるFree online classを始めた方で,教育に力を注いでいるのがよくわかります。もちろん機械学習の研究分野においても数々の成果を残しており,最近話題のDeep Learningについても研究されています。記憶に新しいのはGoogleの猫認識の話ですね。
- 講義レベル: 大学学部生くらい
- その他コメント
- 講師: Andrew Ng (Stanford University)
- Probabilistic Graphical Models
- 講師: Daphne Koller (Stanford University)
- グラフモデルの勉強したいなーとつぶやくと大体おすすめされるProbabilistic Graphical Modelsの著者の一人。 有名な国際会議でkeynote talkをすること10回以上という恐ろしい世界にいる方です。
- 講義レベル: 大学院生くらい
- その他コメント
- 講師: Daphne Koller (Stanford University)
今後開講するもの
今後は以下の講義が開講される予定になっています。それぞれ著名な方が講師陣として君臨しています。詳細は各タイトルからのリンク先を参照ください。 他にも純粋な数学の統計の話とか,アルゴリズムの話とか様々な講義があるので気になる方はチェックしてみてはいかがでしょうか。
- Image and video processing: From Mars to Hollywood with a stop at the hospital
- 講師: Guillermo Sapiro (Duke University)
- Computer Vision: From 3D Reconstruction to Visual Recognition
- 講師その1: Silvio Savarese (University of Michigan)
- 講師その2: Fei-Fei Li (Stanford University)
- Computational Photography
- 講師: Irfan Essa (Georgia Institute of Technology)
- Machine Learning
- 講師: Pedro Domingos (University of Wasington)
最後に
今回はコンピュータビジョンの勉強x英語の勉強と思いまして,オンラインクラスの紹介をしました。英語を聞くのに慣れてきたら,次はCVPR/ICCV/ECCVのオーラルセッションのビデオだったり,TEDのプレゼンなどなど,自らいろんなネタにアクセスして,どんどん高みを目指していけたら良いなーと思う次第です。ではでは,ここまで読んで頂きありがとうございました。