64bit Windowsでのgnumexの設定

最近,Matlab上でC/C++プログラムを走らせるためにmexをよく使っているのですが,Windows7/8(64bit)環境での設定に手間取ったので,メモメモ。
Linuxは全く苦労しなかったんだけどなぁ…

ちなみにmexで使用するコンパイラMinGWgccを選択します。
Linux上でmex用に書いていたプログラムを使いたかったので。

基本的な設定の流れ

1. 64bit用のMinGWのインストール
2. gnumexによるmexコンパイラの設定

1. 64bit用のMinGWのインストール

参考サイトに書いてあるそのままの手順で設定。もちろんパスも適当に追加。

2. gnumexによるmexコンパイラの設定

  1. gnumexからプログラム群をダウンロード,適当なフォルダ(ここではc:\gnumexとしておく)に展開。
  2. Matlabを起動し,展開したフォルダ(c:\gnumex)にカレントディレクトリを変更。

ここで,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

いろいろと変更

  1. コンパイルしたプログラムをgnumexフォルダにあるものと入れ替える。shortpath.mexw64とuigetpath.mexw64はそれぞれshortpath74.mex64, uigetpath74.mexw64とファイル名を変更しておく。
  2. 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

    • gccコンパイラは4系でも大丈夫だったが,g++コンパイラは3系でないと動かず…というわけで,CXXを書き換えてインストールの流れ。
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

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つの視点が存在

Subsurface Scatteringのモデルについてのメモ

Diffusion近似

  • Diffusionにおいては,光は一様にランダムにかつある特定の方向に優位に散乱する

 L_d(x, \omega) := \frac{1}{4 \pi}\phi (x) + \frac{3}{4 \pi} \omega . E(x)

  •  \omegaは光の進行方向
  •  \phiは方向性を持たない光の強さ
  •  E(x)は特定の方向に向かう光の強さ

Dipoleモデル

  • A practical model for subsurface light transport [SIGGRAPH2001]
  • subsurface scatteringが起こる領域を半無限領域と仮定する
  • イデア
    • Single scattering: ボリュームレンダリング方程式より
    • Multiple scattering: Diffusion方程式より
    • 正と負の2つの仮想的な点光源によりDiffusion方程式の近似解を得る
  • 入射点と出射点の距離,吸収係数,散乱係数のみでパラメタライズされる
  • 前方散乱の強い媒体ほど誤差が小さくなる

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 COURSEWAREYoutube EDUなどのように,毎週または講義期間毎ににアップロードされる動画,スライド,時にはスキャンされた手書きのノート等を参照して自習する形でした。
しかし,現在はCourseraedX,Udacityのような,動画やスライドはさることながら,

  • 小テストやコーディング,はたまた小論文などの課題が課せられ,点数が付けられる(授業期間中は締切有)
  • 掲示板を通じて,講義や課題で分からない部分の議論を他の受講者と行える
  • 無事,授業期間中に修了した場合には修了証がもらえる

などなど,学習を促すコンテンツを持つサービスが登場しています。もはや大学で講義を受けているのと同じ感覚ですね!また,ここで挙げているサービスでは世界有名大学*2の講師陣によるクラスが扱われており,レベルもある程度高いものです。もちろん,講義は全て英語で行われるので,英語も身につけられますよ*3。まさに一石二鳥ですね!

現在提供されているコンピュータビジョン関連のオンラインクラス

ここでは,Couseraにて提供されているコンピュータビジョンに関連すると思われるクラスをいくつか紹介します。*4

すでに開講されたもの

ここで紹介するのは私が実際に受講したものになります。

  1. 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ヶ月近く更新がなされなかった挙げ句「実際の業務が忙しくて更新できなかった。この講義ボランティアでやってるし,オンラインクラスって難しいよね。」という趣旨の謝罪文が掲載されるというエピソードがありました。大学の先生は忙しいですよね…
  2. Machine Learning
    • 講師: Andrew Ng (Stanford University)
      • CourseraのCo-CEOかつCo-founderの一人。2008年にStanford大学初となるFree online classを始めた方で,教育に力を注いでいるのがよくわかります。もちろん機械学習の研究分野においても数々の成果を残しており,最近話題のDeep Learningについても研究されています。記憶に新しいのはGoogleの猫認識の話ですね。
    • 講義レベル: 大学学部生くらい
    • その他コメント
      • 線形回帰,ロジスティック回帰,ニューラルネットワーク(今みたいに深い階層ではなく,せいぜい3階層)など,機械学習の基本中の基本が学べます。アルゴリズムだけではなく,パラメータをチューニングするための指針とか,学習させる特徴ベクトルをどのように構成すれば良いのかの指針も講義で触れてくれます。こちらは,毎週小テストに加えてプログラミング課題がありました。使う言語(?)はOctaveまたはMatlabという親切設計です。(Cとかで書けと言われてたらどうなってただろうか…) 機械学習に関して右も左もわからない状態の人に特にお勧めします。
  3. Probabilistic Graphical Models
    • 講師: Daphne Koller (Stanford University)
      • グラフモデルの勉強したいなーとつぶやくと大体おすすめされるProbabilistic Graphical Modelsの著者の一人。 有名な国際会議でkeynote talkをすること10回以上という恐ろしい世界にいる方です。
    • 講義レベル: 大学院生くらい
    • その他コメント
      • 前提知識無しで受講するのはなかなか無謀です。著書を読むのと並行して講義を受けないと,右も左もわからない人は置いていかれます*6。それくらいのパワーを要する内容。でも,身につくものは多いはず。こちらも毎週の小テストに加えてプログラミング課題があります。言語はOctaveまたはMatlab。あとSAMIAMというグラフをeditするソフトウェアも使います。毎週これに力を注ぐのは難しいので,サインインだけしておいて,自分の学習ペースに合わせてコンテンツを活用すれば良いのでは。
今後開講するもの

今後は以下の講義が開講される予定になっています。それぞれ著名な方が講師陣として君臨しています。詳細は各タイトルからのリンク先を参照ください。 他にも純粋な数学の統計の話とか,アルゴリズムの話とか様々な講義があるので気になる方はチェックしてみてはいかがでしょうか。

  1. Image and video processing: From Mars to Hollywood with a stop at the hospital
    • 講師: Guillermo Sapiro (Duke University)
  2. Computer Vision: From 3D Reconstruction to Visual Recognition
    • 講師その1: Silvio Savarese (University of Michigan)
    • 講師その2: Fei-Fei Li (Stanford University)
  3. Computational Photography
    • 講師: Irfan Essa (Georgia Institute of Technology)
  4. Machine Learning
    • 講師: Pedro Domingos (University of Wasington)

最後に

今回はコンピュータビジョンの勉強x英語の勉強と思いまして,オンラインクラスの紹介をしました。英語を聞くのに慣れてきたら,次はCVPR/ICCV/ECCVのオーラルセッションのビデオだったり,TEDのプレゼンなどなど,自らいろんなネタにアクセスして,どんどん高みを目指していけたら良いなーと思う次第です。ではでは,ここまで読んで頂きありがとうございました。

*1:一応,イケメン識別器とか,インスタントなアハ体験などを考えていました。実装はいつになることやら…

*2:スタンフォード大学トロント大学,カリフォルニア工科大,MITとか…

*3:大体のクラスで英語のスクリプトを表示する機能があるので,聞き取れないのでは…と心配する必要はありません

*4:edX, Udacityにおいては今のところコンピュータ・グラフィックスのクラスしか開講されていません…

*5:2005年から始まった,開催年毎に10年前に発表された文献から,現在の研究分野に貢献してきたものを称える賞のこと

*6:本来はそれが大学における講義というものなんでしょうけど