[実習説明:要点]

  1. 仮想化ソフトウェアVirtualboxをダウンロードしてインストールする。
  2. サリエンシー・マップ計算ソフトの入ったディスクイメージをダウンロード。
  3. ダウンロードしたディスクイメージをVirtualboxに読み込ませる。
  4. ディスクイメージを使ってLinuxを起動する。
  5. Linuxのデスクトップにあるシェルスクリプトを動作させる。
  6. サリエンシー・マップが計算されることが確認できたら終了。(ここまでは済ませておいてください。)
  7. 任意の画像を読み込んでサリエンシー・マップを計算する。(これが実習で実際に行うことになります。)
  8. 外部ファイルを読み込めるように設定する。(実習で必要になります。)
  9. (10/28更新) 実習課題1: ひとつの静止画像または動画ファイルについてさまざまな設定でサリエンシー・マップを作成して、モデルについて考察する。
  10. (10/28更新) 実習課題2: 意識と注意とに関連する錯視の画像または動画ファイルのサリエンシー・マップを作成して、注意が意識にどう影響するかを考察する。

[実習説明:詳細]

ラップトップの準備

Windows, Mac, Linuxどれでもオッケーです。やっていることは本質的には画像解析なので、CPU速度が速いものをお使いになる方がストレスが少ないです。私はMacBookPro 2007Early (Core2Duo 2.4MHz, memory 4GB)を使っていますが、とくに問題ありません。あと、仮想OSのためにHDDの領域を空けておく必要があります。10GBあればなんとかなります。

Virtualboxのインストール

フリーで配布されている仮想化ソフトウェアVirtualboxをダウンロードしてインストールする。VirtualboxはWindows, Mac, Linuxに対応しているのでお持ちのOSでダウンロードするファイルを選んでください。

サリエンシー・マップ計算ソフトの入ったディスクイメージをダウンロード

サリエンシー・マップ計算ソフトの入ったディスクイメージ(1.16GB 巨大なので注意)をダウンロードする。

ダウンロードされたファイルMandriva-2010-pwp-i586-iLab.7zは7-zipで圧縮されているので7-Zipなどのソフトで解凍する。Mandriva-2010-pwp-i586-iLab.vdiという5GBのファイルができる。

10/13バージョンで準備された方への追記:ディスクイメージとしてより新しいものを採用しました。こちらはファイルのサイズは大きいですが以下の点でより便利です。もしお時間があるようでしたらこちらの導入をお薦めします。 1) OSのバージョンが上がった(2009から2010へ)。2) ライブラリーが更新されている。(ffmpegによるmpegファイルの作成が可能) 3) ソースコードが含まれている。4) ウインドウ環境がGnomeからKDEに変更している。これは利点とは限りませんが。

ダウンロードしたディスクイメージをVirtualboxに読み込ませる

解凍したディスクイメージ(Mandriva-2010-pwp-i586-iLab)をvirtualboxに読み込ませます。

Ittiラボのサイトに手順ごとの説明があります。こちらの通りやればうまくいきます。例に挙がっているのはVirtualboxのwindows版での例ですが、基本的にMac版、Linux版でも同じです。私はMac版を使っています。

ディスクイメージを使ってLinuxを起動する

Virtualboxからディスクイメージに入っているLinuxを起動させます。ちなみにこのLinuxはMandriva Linuxというもので、Redhat系のフランス産のOS。さらにちなみにLaurent Ittiはフランス人。

とりあえず放っておけば起動します。ログインしなくてもデスクトップが見えるところまでたどり着きます。

Linuxのデスクトップにあるシェルスクリプトを動作させる

デスクトップにsaleincy-demo.shというシェルスクリプトがあるのでそれを実行します。

ファイルをダブルクリックするとウインドウが立ち上がってムービー(サッカーをしている子どもたち)に対するサリエンシーマップ(右側の"Attention Map")が表示されます。黄色い丸で表示されているのが、ボトムアップがどこを向くか計算モデルが予言している位置です。

おめでとうございます。うまく動くことが確認できました。まずはここでひとくぎりです。

任意の画像を読み込んでサリエンシー・マップを計算する。

シェルスクリプトsaleincy-demo.shの中身をエディタで開いてみてください。saleincy-demo.shを右クリックして"open with"でKWriteを選ぶとエディタで開けます。すると実行したのは以下のようなコマンドだったことがわかります。

#!/bin/sh
ezvision -K --movie --in=/home/ilab/Videos/beverly03.mpg ¥
  --out=display --ior-type=None --rescale-input=320x240 ¥
  --nodisplay-interp-maps --maxnorm-type=FancyOne --display-foa

実行ファイルの正体は "ezvision"でした。それにいろんなコマンドラインオプションが付いています。

それではターミナルを開いて(Linuxのタスクバーのいちばん左の星マークからKonsole(Terminal)を選びます。コマンドラインから以下のように入力してエンターキーを押します。

ezvision --help

ezvisionのhelpの画面に移動します。コマンドラインオプションの説明が出てきます。キーボードのqキーを押して終了させます。

コマンドラインオプションの説明は膨大すぎるので、必要な部分だけに削ったテキストファイルを作成しました:こちらからダウンロード

それでは実際にコマンドを打ってサリエンシー・マップの計算を行ってみます。Ittiラボにあるコマンドの例を読みながらいじってみます。

まず入力用のファイルを準備しましょう。このwebサイトをLinuxのブラウザ(タスクバーにFirefoxがあります)で開いてscreenshots.tar.bz2をダウンロードしてください(Firefoxのデフォルトの設定ではデスクトップのHomeのなかにあるDownloadにダウンロードされます)。screenshots.tar.bz2をHomeの中にあるPicturesに移動してください。右クリックして"Extract Archive Here"を選ぶと解凍されてframe000000.png - frame000019.png の20枚の画像ファイルができます。

それではIttiラボにあるコマンドの例を打ち込んでみましょう。(英語キーボードの設定になってますので、記号が出しにくいかと思います。わかる人はLinux上で設定してもいいです。でもこのままでなんとかなります。)

cd /home/ilab/Pictures
ezvision --in=frame000000.png -T --out=display -+

ほっとくとずっと動いているので、terminalのウインドウをアクティブにしてcontrol-Cで停止させます。

ezvision --in=frame000000.png -T --out=display --out=mpeg ¥
 --out=raster --output-frames=0-29@30Hz -+ 

これで30フレーム作動させると終了して、結果をT.mpgとして保存します。Picturesの中にできますのでダブルクリックするとムービーが動くのが確認できます。それとあとT[000000-000029].pnmという画像ファイルが30枚できます。

いままでは一枚の画像を見ているときにどう目が動くかをシミュレーションするものでした。端的にある画像のサリエンシーマップを計算するときには以下のコマンドです。

ezvision --just-initial-saliency-map --in=frame000000.png ¥
 --output-format=PNG

これでVCO000000.pngという40*30pixelのグレイスケールの画像ファイルができます。ダブルクリックするとGwenviewで見ることができます。

それぞれの属性のfeature mapも計算したいときは以下のコマンドです。

ezvision -K --in=frame000000.png --out=raster

これでT000000.pnmという画像ファイルができます。このファイルフォーマットはgimpで開くことができます。

ムービーファイルを処理したいときには、saleincy-demo.sh にあったように、--movie というオプションを使います。

ezvision -K --movie --in=/home/ilab/Videos/beverly03.mpg ¥
  --out=display

入力ファイルのフォーマットは限られているので、あらかじめムービーファイルをフレーム毎の画像にして読み込めばとりあえず処理できます。たとえばこんなかんじです:

ezvision -T --in=frame#.png --out=display

だいたいこれが概要です。あとは--in=のところで入力するファイルをいろいろ変えてみれば楽しめます。たとえばIttiラボにはサンプル画像のセットが置いてあります。これをダウンロードしてテストしてみてください。

外部ファイルを読み込めるように設定する。

実習ではさまざまな画像、映像ファイルを変換してみる予定ですが、ASCONE会場ではインターネットが使えない可能性があります。そのばあいUSBメモリーもしくはLANに繋がったNASにあるデータファイルを使います。このため、Virtualboxを外部ファイルを読み込めるように設定する必要があります。

1) 一番簡単な方法はUSBメモリを使うことです。USBメモリを指して、ホストのOSで取り外し作業をして、VirtualboxのデバイスメニューからUSBデバイスでUSBメモリを指定します。私の環境ではこけてしまいましたが、うまくいく人はこれが一番簡単です。

2) 会場でNASが使えるようでしたらブラウザからIPアドレスを指定してやるのが手っ取り早いです。でも会場に行ってみないとどうなるかわからない。

3) 上記の二つがうまくいかなかったら、Virtualboxの共有フォルダ機能を使って、ゲストOS(Mandriva Linux)とホストOSとでファイルのやりとりをできるようにします。そうすればホスト側のOSでLANでもUSBメモリでもデータの受け渡しができるようになります。ただし、ちと面倒。くわしくはvirtualboxのhelpを読む必要がありますが、手順としては、こんなかんじです:

  • 3-1) virtual boxの「デバイス」メニューから共有フォルダを選択。共有フォルダの追加を行う。「フォルダのパス」(たとえばデスクトップ)「フォルダ名」(たとえばdesktop)を設定して、「永続化する」にチェックを入れる。
  • 3-2) マウントするフォルダを作成する。suでrootになって、mkdir /mnt/share
  • 3-3) マウントする。suでrootになって、mount.vboxsf desktop mkdir /mnt/share
  • 3-4) これでマウントする。suでrootにならないとmountした共有フォルダにアクセスできない。わかる人は/etc/fstabを編集する。

共有フォルダの設定に関しては、以下の二つのサイトが参考になります。

(10/28更新) 実習課題1: ひとつの静止画像または動画ファイルについてさまざまな設定でサリエンシー・マップを作成して、モデルについて考察する。

まず静止画像を用意してください。さっきのframe000000.pngを使うとします。まずはfeature map付きのファイルを作成します。T000000.pngができます。

ezvision -K --in=frame000000.png   ¥
--out=display --out=raster --output-format=PNG

サリエンシー・マップのモデル設定にはさまざまなオプションがあります。コマンドラインオプションの説明を読んで、設定をいくつか変えてみましょう。

いままでのサリエンシー・マップではデフォルトの --vc-chans=CIOFM が使われていました。これはcolor, intensity, orientation, flicker, motionの五つのfeatureによるモデルです。これをmodifyしてみます。たとえばcolor無しのモデルだったら、--vc-chans=IOFM です。

ezvision -K --vc-chans=IOFM --in=frame000000.png ¥
--out=display --out=raster --output-format=PNG

また、featureの重みを変えることも出来ます。--vc-chans=C:5.0IOFM これでcolorの重みが5.0でほかのfeatureの重みは1.0です。

ezvision -K --vc-chans=C:5.0IOFM --in=frame000000.png ¥
 --out=display --out=raster --output-format=PNG

サリエンシーモデルの代わりにベイジアンサプライズを計算するには--vc-type=Surpと --maxnorm-type=Surprise を加えます。

ezvision -K --vc-type=Surp --maxnorm-type=Surprise  ¥
--in=frame000000.png --out=raster --output-format=PNG

一枚絵だとなにもなかったところから絵が提示されたとしてベイジアンサプライズが計算されますので、どこもかしこもサプライズだらけです。正直静止画には向いてません。ムービーファイルで試してみてください。

ezvision -K --vc-type=Surp --maxnorm-type=Surprise  ¥
--movie --in=/home/ilab/Videos/beverly03.mpg --out=display

こんなかんじで設定を変えながら、サリエンシー・マップとベイジアン・サプライズはどのくらい違うか、どのようなモデルが自分の直感とよく合うか、などを考察してみてください。画像ファイルのチョイスによってモデルの善し悪しは違うかもしれません。トップダウンとボトムアップの注意の関係も興味深い話題です。たとえばiLab Image Databasesには道路標識の画像のデータベースがあります。私たちが標識を見るときに、ごみごみした場所では標識が見つけにくいですが、それはこのモデルから議論できるかもしれません。

(10/28更新) 実習課題2: 意識と注意とに関連する錯視の画像または動画ファイルのサリエンシー・マップを作成して、注意が意識にどう影響するかを考察する。

意識と注意とに関連する錯視にはいろいろあります。たとえば、change blindness (CB)やmotion-induced blindness (MIB)。ここではMIBの刺激のサリエンシー・マップを計算してみます。元論文(Nature 2001)の著者によるサイトにgifファイルがあります。まずはThe basic effectを体験してみてください。画像の中心を見ていると黄色い点が消えますね。

このファイルをフレームごとのpngファイルにしたものを置いておきます:basic.tar.bz2 これを解凍するとbasic000.png - basic119.png という連番の120枚の画像ファイルが出来ます。これのサリエンシー・マップを計算してやります。画像ファイルのあるフォルダに移動してから、以下のコマンドを打ってみてください。

ezvision -K --in=basic#3#.png --input-frames=@15Hz ¥
--out=display  --out=raster --output-format=PNG --out=mpeg

これで注意が黄色い点に引き寄せられつつも、青い点の動きに釣られてあちこちに注意が動く様子を見ることが出来ます。出力としてはT.mpgという映像ファイルとT000000.png - T000239.pngの240枚の画像ファイルが出来ます。T.mpgのほうはフレームレートが合ってないので、私の方で画像ファイルからffmpegで映像ファイルに変換したものがout2.aviです。

そんなわけで黄色の点が見えなくなるタイミングと黄色の点から注意が離れるタイミングが同じかどうか検討してみてください。

同じアイデアでchange blindnessについても検証できます。ベイジアン・サプライズを計算してみましょう。先ほどの例にもあるように、gap画像の直後は画面全体のサプライズが高くなります。だから、たとえ大きな違いが画面の中にあったとしても、それは注意を引きつけることが出来ずに埋もれてしまうのです。

実習当日までにいくつかこのような映像、画像ファイルを用意する予定です。以上で事前の説明は終了です。それでは仙台にてお会いしましょう!