実験やめたった シマエナガ編

劇団「実験やめたった」の活動報告

FMラジオの話と、タブレット端末を録音専用機にした話

 

アブストラクト(概要)

 にわかFMラジオファンの筆者が、最近聴いている番組の中からおすすめベスト5を紹介する。また筆者がWindowsタブレット端末をネットラジオ録音専用機にする際に嵌った落とし穴について紹介する。

 

いきさつ

 最近の筆者の趣味はFMラジオの番組を聴いたり録音しまくることである。

 先の年末の頃から筆者は過労で神経系をやってしまって、筆者は神経科の先生に「何も考えない、リラックスした時間を作ってください」と言われていたのであった。そういえば筆者は実験の策を考えようと、現在のプロジェクトの今後を脳内シミュレートしていくと、どう見積もっても爆死エンドに行き着いてしまい、いつも動悸がしてきて意識がなくなるのであった。

 そんな中、せめて通勤途中は何も考えずに楽しく行こうということでFMラジオを聴き始めた所、色々な音楽が流れていて自分の音楽の知識が膨大な勢いで溜まっていくのが非常にたのしく感じられた。そしてこういう素晴らしい音楽を一曲でも多く聴きたいと思い、自宅のPCを使って気になる音楽番組を録音しまくることにした。録音にはWindowsフリーソフトのRadikoolというやつを使った。

Radikool - radiko録音ツール

 

筆者おすすめの番組ベスト5

 というわけで、にわかFMラジオファンの筆者が、最近聴いている番組の中からおすすめベスト5を紹介する。

第5位 モーニングチャージ (Zip-FM 月-金 8:50)

 朝の8時50分ごろからMCの小林たくいちろうさんが、リスナーの記念日や誕生日をお祝いしてくれるコーナーがある。そのリクエストというのが、「えろいアムロレイとマスオさんとふなっしー波動砲を発射するモノマネで誕生日を祝ってください」とか目茶振りが過ぎるのに、たくいちろうさんはそれにちゃんと応えてくれるのでたのしい。ちなみにぜんぜん関係ないが、筆者の後輩にサンシャインこばたくというボーカリストがいる。

第4位 日本の民謡系 (NHK 朝5時台とか土日の11時ごろ)

 実は筆者は民謡バンドの太鼓をやっている。民謡というのは誰かが明確な意図をもって設計した曲とは違って、自然発生的に生まれて口伝によって伝えられてきた音楽で、繰り返しの回数とか歌詞の抑揚がその土地の独自の感覚で作られているのが面白い。筆者は民謡の伝承者として、民謡系番組、ひいては民謡の素晴らしさを広めていきたいと思う。

第3位 ザ・ソウルミュージック (NHK 木 23:00)

 オダイジュンコさんのMCで、ソウルの新譜や名曲を幅広く紹介してくれる。惜しくも今年はモーリスホワイト氏、プリンス氏といったソウル界の偉人が相次いで亡くなり、彼らの追悼特集が組まれた。こうして改めて彼らの音楽を聴くと、ソウルミュージックを世界中で愛される普遍的な芸術へ昇華させた彼らの業績の偉大さに敬服せざるを得ない。

第2位 ユキ・ラインハートさんのA・O・R (JFN 月-木 20:00)

 ユキ・ラインハートさんのMCで、曜日ごとに色々な音楽が紹介される。筆者は特に月曜日の洋楽ロック特集が楽しみで、毎回とあるアーティストを取り上げ、その生い立ちから現在までの軌跡が辿られる。人生を音楽とともに生きたスターたちの光と影を知ることができ、彼らの音楽によりいっそう深い理解を与えてくれる。

第1位 音楽遊覧飛行 (NHK 月-木 9:20)

 「音楽の翼にのって、心の旅に出かけましょう」ということで、4人のMCの方々がローテーションで音楽を紹介してくださる。特にダ・カーポの榊原広子さんの回は、懐かしい歌、童謡、合唱曲、愛唱歌の特集で、榊原さんの語り口と流れてくる曲が綺麗すぎて筆者は毎回心が洗われる。またリスナーからのお手紙も、「何十年も前に聴いた思い出の曲です。ぜひ、もう一度聴きたいです。」という御年輩からのリクエストが多く、音楽を聴くという事は一期一会で本当に貴重な体験なのだなと改めて認識させられる。民族音楽が好きな方はサラーム海上さんの回もおすすめである。

 

  

 

タブレット端末を録音サーバーにしよう

 こうして筆者は自宅のPCを常時稼動させて毎日5番組くらいを録音しているのであるが、タブレットPCを使えば今より消費電力が抑えられるし、夏場に落雷でPCが死ぬ心配もなくなってさらにハッピーになれるんだろうと考えた。そこで筆者は近所のPC屋に行って、中古だけどほぼ新品のWindowsタブレットを約1万7千円で購入した。

shopap.lenovo.com

 ところが筆者はタブレットPC初心者だったので、タブレット端末特有の落とし穴にはまりまくった。

 

勝手にスリープ状態になって録音がされない

 Radikoolの「録音のX分前にスリープを解除する」という機能が効かずに録音がされない。たぶんこの機能はタブレットには対応していないのであろう。またWindowsのコントロールパネルの電源オプションで、「X分後にディスプレイの電源を切る、だけど、スリープ状態にはしない」という設定にすると、「X分後にスリープ状態にする」と勝手に解釈される(参考サイト:価格コムの掲示板)。仕方がないので筆者はスクリーンセーバーで黒い画面を出すようにしているのだが、これは黒い画面を表示させ続けているわけで、消費電力とハードウェア的には負荷である。

 

解像度が高すぎてVNCで見るとはみ出まくる

 指のタッチによる細かい操作がやりづらくてVNC経由で別のPCから操作しようとしたのだが、タブレット端末の画面の解像度が1920*1200とやたら高く、1280*800のノートPCでは画面がはみ出まくった。

 

ビットレートが1kbpsになる

 mp3のビットレートを196kbpsという設定にすると、なぜか勝手に設定が1kbpsになってしまう。仕方がないので筆者はデフォルトの128kbpsのままにしておいた。 とここで、「果たしてオリジナルの音声はどれくらいのデータサイズで配信されているのだろう?」と疑問に思ったので調べてみた。すると、HE-AACなる方式でなんと48kbpsというビットレートらしい。というわけで、原理的にデータ量は48kbpsでよい。サンプリングレートは8.2kHzの2倍で16.4kHzっぽい。(参考サイト:オーディオの科学

 

 

まとめ

 また色々設定をためしていきたい。なお、筆者は最近またあんまり家に帰っていなくて録音した番組が溜まる一方なので、遠征にいくときなどにまとめて聴きたい。

 

 

謝辞

 6月中に3回以上のfabまたはRTをしてくれたバンドサークルの後輩のみんな:ぐっさん、ちっさん、まゆかちゃん、しゅんちゃん、でってゆ君、ないとう君、おおもり君、さきちゃん、ロペス君、いつも筆者の健康状態を心配してくれてありがとう。筆者は抗不安薬を服用するのをやめたせいで日中は動悸がして意識が朦朧として一見病状が悪化しているようなのだが、でも何故か文章はすらすら書けて、薬の副作用で眠くならなくなって、夜も眠れないので、一日中業務が可能で、先週より業務の効率が上昇している。だから筆者がツイッタ等で何かを発言している限り、ちゃんと物理学は進歩している。是非安心してほしい。芦田くんは就職決まっておめでとう。

某バンドサークルのコンピアルバムにOBからのコメント

 

いきさつ

 筆者が活動していたバンドサークルの後輩の皆さんが、オリジナル曲を作って集めてコンピレーションアルバムを作った。今回のアルバムは去年に引き続き2作目であり、筆者は第1作目の出来が良かったので今年のアルバムの出来を楽しみにしていた。というわけで筆者は先週の土曜に集会に顔を出してそのCDを手に入れた。取り計らってくれたおおもりくん、サークル長のかいせいくんに感謝したい。

  筆者はこのアルバムを大学への道中の車内で流しているが、なかなかの出来栄えで後輩のみなさんの努力が感じられた。各バンドのメンバー、そして編集に携わったkzくん、おおもりくん、ないとうくん、たいへんお疲れさまでした。

 

 この記事では、OBである筆者が、このアルバムを聞いた感想やコメントを述べる。

 

なぜオリジナル曲を作るのか

 音楽制作にはかなり多くの苦労をともなうものの、それらを経て完成した作品というのは一生の思い出に残る。その時々で自分の持つ技術を総動員して作った作品は、後から振り返ったときに自分の音楽家としてのステップアップの記録となる。また一緒に苦労して製作したメンバーは必ずこの先も長い付き合いになる。筆者も過去に何枚かオリジナルアルバムを作っているが、筆者が学部生の頃に作ったアルバムの製作メンバーとは今も交流があり、いまだにいつも「あれほどのものをよく作ったなぁ」という話になる。

http://sound.jp/himo/top.html

 

 また自分で音楽を作るという道のりを経ることで、音楽を楽しむ観点が増える。我々バンドで楽器をやっている人間は、音楽の中で様々なパートが音楽の全体を構成していることを知っている。それと同じく、作曲、編曲、レコーディング、ミキシングの経験を実際にやると、市販されている音楽が実は職人の技術によって製作されていることがわかる。音楽を聴いていて「ここはなんでこのメロディなんだろう?」「なんでこの歌詞で、コード進行で、この表現なんだろう?」と思ったとしても、考えた結果「やはりこれがベストだ」と納得させられてしまい、これがプロの技なのだと感服する。こうした曲の魅力がわかるのは音楽家の特権である。

 

 というわけで、ちょっとでも「曲をつくりたいな」と思っている若手のみなさんは、是非オリジナル曲の製作に挑戦してもらいたい。重要なのは羞恥心を取り払い、一発でも曲を形にして人目に晒すことである。表現したいものがなかなか決まらないという場合は「おっぱい揉みたい」でも「教授○ね」でも適当に決めればいい。まず何でもいいから何かデモ音源を作って、何人かで何かやっていると何かができてくる。音楽理論などを勉強するのはそういった曲を数曲作ったその後でいい。

 

筆者がコメントを公開する理由

 筆者がこうしてコメントをするのは、テンション的にコメントをしたくてしょうがなくなっている為であるが、わざわざネット上で見える形で公開するのは、実際に曲を仕上げた後輩のみなさんのステップアップを願ってのこと、また筆者が言ってることがおかしかったら遠慮なく反論とか指摘を頂きたいという理由である。音楽とはコミュニケーションであり、曲を聴いた人からのコメント、フィードバックが不可欠である。音楽家としての成長とは、こうした意見を取捨選択して、最善の表現を追究することでなされていくものだと思う。筆者はつねづね「自分の音楽には何かが物足りない」という「何かとは何だ」と問いかけを持ちつづけ、様々な実験を重ねて音楽の理解を得てきたつもりである。筆者は今回、極力コメントの内容を具体的にしたつもりで、この意見が後輩の皆さんの何かしらの助けになればと思う。これは若手の意欲を削ぐかもしれないリスキーな事であるが、これも(最近ほとんど楽器を触っていないけど)筆者の音感の鍛錬、音楽活動の一環だと思ってやる

 

 以下、各曲に対するコメントである

 

ラボ

 もうこれはすばらしい完成度である。曲の雰囲気もしばくんのボーカルと相まって爽快な感じが良い。アルバムの1曲目として最適である。各パート全部すばらしいが筆者はドラマーなので特にドラムを褒めたい。イントロから古賀くんのアクセントの効いたタムがよく鳴って曲がシャキっとする。ドラムの一つ一つの音がクリアでリズムが正確に叩けているのがよくわかる。サビのコード進行が洒落ていて、ともすれば和音が微妙に変な感じになってしまうところが、音作りと音符の積み上げ方がしっかりしているので良くまとまっている。

 ただ、Bメロ(♪1,2,3で飛び出して)、サビ(♪見たことも無い)が良いフレーズなのに曲の中で一回しか登場していなくてもっとききたいなという気分になる。曲の長さをまだ長くしても良さそうなのでもうちょっと繰り返しがあってもいい。そして筆者はかなたむが卒業してしまったので非常に悲しい。しゅんちゃんは博士課程がんばれ。

 

カルネ

  このバンドは男女ツインボーカルという構成で歌のメロディーもかっこよく、バンドとしての特徴が出せていると思う。しかしイントロの和音がちょっと難解すぎないかなと思う。この曲は冒頭からしばらく聴いていてAメロの最初のコードのFmが聴こえたところでやっと曲の調がファを主音とするへ短調であることがわかる。なぜイントロの調性が分かりにくくなっているかというと、曲の一番最初の音がファ#(ファに対して短2度)で、さらに2番目の音がシ(増4度、トライトーン)で、いきなり要取扱注意の音から始まるからである。というわけで少なくとも最初の音をファにする。そしギターの音色をクリーントーンからディストーションをかけて音の厚みを増し、ファ→シ→シb→ラbの動きを明確にするのがよいのではないかと思う。

 

きつね

 インスト曲でこれだけフレーズを多彩に展開していけているのはさすがである。またまたドラムを褒めると、いとけんくんのドラムが細かいフレーズであってもちゃんと叩けていてすばらしい。もし可能なら、曲が盛り上がって来たところでバスドラムがサンバキックになると、多分筆者は感激のあまりしぬ。

 注文をつけるならば、0:35くらいからのピアノがモチーフを弾くところは1オクターブ高くてもよくて、またギターメインの場所は、初めはこのモチーフを基本にしたフレーズにして、徐々にアレンジを加えて発展していくと主題がはっきりすると思う。

 この曲のようにギターとピアノが共存する曲は特にギターの音作りが難しい。ギターの音色をフレーズ単位で細かく調整して、そのときどきで音が細くならないよう、出しゃばりすぎないように気をつけたい。

 

Boars

 もはや貫禄すら感じられる演奏である。演奏のテンポ的な意味でも、表現したい事の方向性が去年からぶれてないという意味でも安定している。ちょっとだけ注文をすると、もっとボーカルを前に出すためにリバーブをややひかえて音量を上げてもいいとおもう。

 

アイス

 筆者はこういうノリは大好きである。アイス好きが度を越して人としての枠をはみ出ている感じがいい。ただ名曲としてのポテンシャルが素晴らしく高いだけにいくつかコメントがある。

 Bメロのコード進行にやや不自然さが感じられる。サビの2小節前、「♪この思いだけは」の所にトニックコードであるCが配置されていて、サビへの盛り上がりが停滞する印象を受ける。ここは例えばBメロコード進行を

 F... G... Em... Am...

 Dm7... G... C... C7... (20160501修正)

 F... G... Em... Am...

 F... FonF# ... Gsus4... G...

 というにして、「♪僕の名前を」をラの音から始めるのはどうだろうか。となるとBメロの頭のFにつなぐために、Aメロのラップの部分の最後はC…C7…とする。また、「♪僕のー名前をー呼ぶ」の箇所に曲中最高音のラの音が登場していて、サビが登場する前にピークを迎えてしまっている。ここでさらに「♪僕の名前を」をラの音から始めてしまうと、その問題が余計増強されてしまう。となると、せっかくサビがチャッチーなので、サビを冒頭にもってくるという編曲もあるとおもう。

 この曲はパーティ会場でみんながぴょんぴょんしながら楽しむ曲だとおもうので、最近の流行りの音作りを参考にして、跳ねずにはいられないような演出を追究してほしい。なお筆者はシンセの音はもっと矩形波っぽい高周波を含んだ音のほうが好みである。

 

ののトリオ

 もう3人とも音がすばらしい。完成度が高くて聴かせる曲になっている。メッセージもストレートで良い曲である。 ここまで技術的に色々できるとバンドとしてのキャラ作りもかなり自由にできる。苦労を多く経験した先輩が、生き急ぐ後輩に対して「Take it easy」と言っているような一面や、大学生として「自分らしく生きよう」と決意をあらわにしている一面など、色々な意味を含んだ表現にできる。演奏が上手いので歌詞に説得力が出るのである。

 この曲は冒頭が英語で始まるが、英語の歌詞を歌うときには「t」や「s」など子音の発音を大げさ目に発音すること、またマイクでこれを録音するときには音量のレベルに注意することを気をつけてほしい。この際、DeEsser というコンプ系のエフェクタがあるので適当に必要に応じて使ってほしい。

 

castella

 編曲、各パートの動き、音作りはすごく良い。間奏のバリエーション豊かで工夫が感じられた。ただボーカルの音域が一番歌いやすい高さよりやや低めなのではないかと思うのと、またサビの音域は曲中で一番高くなるようにすることを考えてメロディを設計してほしい。サビの出だしにシンコペーションを使っているが、これが唐突な印象を与えてしまっているので、小節の中でどの拍にアクセントを置くかも全体を見据えて設計してほしい。イントロのギターはタイミング、休符の入れ方をもっと厳密にするといいと思う。

 

2年同期

 この曲は「これまでネガティブな生き方をしてきたが、開き直って変わっていく」という決意をあらわにした曲である。だから、リスナーとの間に交わされるコミュニケーションは「共感した。自分も変わりたい。」や「その決意、しかと見届けた。」とあるべきである。歌詞の内容は過去の自分を強烈に曝け出したものであり、その覚悟が相当なものであると見受けた。今後もその決意で精力的にやってもらいたい。

 編曲はとても良いとおもう。ギターの動きは基本ができていてリフも良いので、もう少し前に出してもっとコード感が出せるといいと思う。ボーカルの音域が せっかく最高ラの音まで出せるので(2:15のあたり)、全体的にメロディをもっと高めに設定できる。ベースは基本に忠実に音を選んでいっているが、もう少し動いてもいいとおもう。ここでさらに「俺は殻を破ろうとしていま限界ギリギリで生きている!」ということがよく分かるような表現がもっと盛り込まれていたら、リスナーの「自分もこうありたいという共感」、「その覚悟は技術的にも裏打ちされているなという安心感」が得られると思う。(20160429加筆)

 

マカロニ

 この曲のサビはマクド○ルドのポテトのCMにそのまま使えそうなキャッチーな曲である。この「CMに使えそうか」、「テレビの歌番組でサビの1フレーズだけ流れてきただけで記憶に残るか」という観点は重要である。是非よさそうなフレーズを思いついたらこうした想像をしてみて、曲のポテンシャルを評価してほしい。

 ミキシングに関して、実は男女の声を共存させるのは難しくて、この曲の場合声の中音域(1kHzくらい)をもっと出して女声が自然な感じになるとよかった。また、ないとうくんはこの曲の中で語りを入れているが、その技はBoarsでも使っていて、もう少し別の歌い方をしたら技の多彩っぷりを印象付けるのに一役買ったのではないかという点で惜しい。

 

SD

 この曲は演奏の技術面が高いだけに、繰り返しが少なくてなおかつ変化が激しいので曲が難解になってしまっているのが惜しい。例えばほぼ同じ構成で歌詞の2番をつくり、シンプルに繰り返すだけで、だいぶん曲が記憶に定着しやすくなるのではないかとおもう。

 

温スト

 まさに王道をいく曲作りで、テーマの選び方、各パートの動きも基本をしっかり押さえている。どんどんこの調子で作曲、楽器の練習をやっていってもらいたいとおもう。

 この曲のAメロのコード進行は

A....... ........   A....... ........ 

A... C#m... D... A... D... E... A.......

で、パンクロック的にシンプルなコードでいくというのならこれで全くOKだと思う。ただ蛇足かもしれないが他にもコード進行はありえて、例えば

A... Bm... C#m... D...     A... E... D... Dm...

A... C#m... F#m7... F#m...   D... E... A... A7...

ともできそうなので、いくつか考えてみてほしい。(20160430コードの表記が間違ってたので修正)

 

ボーカルの会

 春らしいさわやかな景色が思い浮かぶ曲である。ゆったりしたテンポと着実なリズムの刻みは、これまで歩いてきた道、未来へ続く道を一歩一歩を踏みしめるような表現でいいと思う。何人もの声が重なったサビは迫力がある。しかしこの曲もイントロで曲の調性(変ロ長調)がすぐわかるような和音の構成だったらもっとよかったとおもう。

  

 

 

ちなみに

 以下は去年のコンピアルバムに収録されたとある1曲(ねぇねぇネオン)を、筆者がハワイ風にアレンジしたものである。筆者は自称ウクレレ奏者で、このアルバムの他の曲もハワイアレンジのカバーを作りたいのであるが、なにせ本職の実験がアレなので手が出せずにもどかしい思いでいる。また今後いくつか作ってみようと思う。

 

soundcloud.com

 

 

いっぽう筆者の若いころは・・・

 筆者の若いころ(学部3年、2004年)に作った曲を載せておく。

 

曲名:尿検査再診のお知らせ

作詞:エーちゃん(ドラム、筆者らの代のサークル長)

作曲:tyuiop(昔の筆者)

収録アルバムのタイトル:内部がナイーブ(筆者プロデュース、5曲で15分くらい。)

ジャケ絵:からあげ師匠(現在もお世話になっております)

 

soundcloud.com

OpenCV3.1のcv::dnnを使ってCaffeModelを使った画像分類をWindows上でやる

 

アブストラクト(概要)

Windows7 + Visual Studio 2013 Community + OpenCV3.1 + cv::dnn の環境を作りました。

・CaffeNet、GoogLeNetによる画像分類が動きました。

・自作学習データを使うにはどうしたらいいかという記述がネット上にありませんでしたので、苦労しましたが、がんばって調べた結果、一応動くようにはなりました。

・しかし、挙動がまだ完全に理解できていないので、 cv::dnnのユーザーが増えて誰か筆者にそこのところを教えてくれないかなあと思っています。

 

はじめに:いきさつ

 筆者はつねづねDeep Learningの定番ライブラリ:Caffeの画像分類を、Windows + OpenCVでもやりたいと思っておりました。筆者の職場の計算機はほぼすべてWindowsで、これまでは、(1)OpenCVで作った物体抽出器で画像中の候補箇所をトリミングし、(2)その画像をLinuxに転送してCaffeで画像分類・・・というまわりくどいことをしていました。もしCaffeの画像分類がOpenCVの枠組みで実現できるとしたら、工程が減るので使い勝手がよいわけです。そんな状況のなか苦戦の末、OpenCVのcv::dnn(ディープ・ニューラル・ネットワーク)モジュールの使い方がわかったので、その方法を紹介します。

 

OpenCV3.1+opencv_contribを自前でビルド

Q.えー、ビルドとかやったことないですー。いつもここからダウンロードしたものを展開して使っているのですが・・・。

A.いまのところ、プレビルト版にはdnnモジュールは入っていません。dnnモジュールを使いたかったらこれを含めた版を自前でビルドする必要があります。(探せば誰かがビルドしてくれたバイナリ版もなくはないですが、CPUとかライブラリの構成を最適にするには自前で設定してビルドするのが良いと思います。:20160412加筆)

 

というわけで若干ハードルが高いですがやってみましょう。なお、ビルドに関して筆者が参考にしたサイトはこちらです。

OpenCV3.1のビルド - AkiWiki

OpenCV 3.0がリリースされたので導入してみた - Qiita

OpenCV: Build opencv_contrib with dnn module

 

まずインストールすべきもの

・CMake。ビルドに関する諸設定をして、ビルドのためのVisual Studioのファイル(ソリューションと言う)を生成する。

Visual StudioVisual Studio Communityという版は個人用利用だったらフリーで使用できる。ちなみに筆者は2013を使った。

 

ビルドの手順の概要

Githubから、opencv本体、opencv_contribのソースコードをダウンロードし、適当な場所に配置。

・CMakeでビルドの設定をし、Visual Studioソリューションファイルを生成。

Visual Studioでビルド。

・できたバイナリファイル(*.libファイルなど)やincludeファイルなどを、適当なフォルダに配備してPATHを設定する。

 

うごかしてみよう

 こちら↓に詳しい解説の記事があります。実際に動かしてみたとき、caffenetがねこの識別結果を出してきたら成功です。ただし落とし穴があって、「"caffe.LayerParameter" has no field named "input_param"」というエラーが出てきた時はprototxtの記述が対応していないので変更する必要があります。

 

qiita.com

 

prototxtの記述の変更の方法:

OpenCVでニューラルネットワークのcaffeモデル読み込み | MOGINOメモ

 

こちらは公式のチュートリアルです。GoogLeNetスペースシャトルの識別結果を出してきたら成功です。

OpenCV: Load Caffe framework models

 入力画像を指定する際にnet.setBlob(".data", inputBlob)と記述します。このdataの前のドットは何を意味するのかが不思議だったのですが、このチュートリアルに書いてありました。この引数では"name_of_layer.name_of_layer_output"と記述します。ここで、最初レイヤーには名前がないので".data"とするそうです。

 

自作学習データで動かしてみよう

 筆者の手元にDIGITSで生成したAlexNetの学習データがあります。これを利用するには、cv::dnn::createCaffeImporter() の箇所やその他特定のファイル名を、自作学習データのファイル名に変えてやります。しかしまたここにも落とし穴があって、平均画像(mean.binaryproto)を差し引く処理を自分でやらないといけないようです。(本家Caffeだったらprototxtの中で、layer.transform_param.mean_file: "mean.binaryproto"・・・と指定できるのだが、現在は多分対応していない。)

 以下が筆者の書いた画像を差し引く処理です。このときMatの輝度値が負の値になることがあるので、データの型はCV_16S(符号付16bit整数)としています。(20160411一部修正)

 

 

 こうして一応はそれらしい識別結果が出るようになりました。しかし検証のためにこの結果とDIGITS経由で識別させた結果を比較してみると、softmaxの出す確率の値が違っています(要するにまだ完全に挙動が理解できていない。)。何が原因なのか、どなたか詳しい方、筆者に教えてやってください。筆者もひきつづき調査をすすめていきたいとおもいます。

 

DIGITS経由の識別の結果(A,B,T,Vの4カテゴリー)

00001.png Predictions
    81.77% A
    17.22% V
    0.93% T
    0.08% B

 

同じファイル、学習データをcv::dnnで識別させた結果

00001.png
V : 53.5173 %
A : 23.9567 %
T : 22.1351 %
B : 0.390848 %

_人人人人人人_
> なんか違う!<
 ̄Y^Y^Y^Y^Y^Y^ ̄

 

謝辞

 kibo35さん、いつも筆者の研究を応援してくださりありがとうございます。最近筆者はPETやSPECTなど、物理学が人々の健康に役立っているのを見ると物理屋としての誇りを感じます。DeepMindのハサビス氏は「人工知能技術を素粒子物理の分野などで科学をより発展させるのに使いたい」とコメントしておりますが、筆者も同感で、この技術を(AVの次に)物理学に生かすことが出来たら、と思っております。

www.theverge.com

タイ文字について

 今日の話題はタイ文字についてです。筆者は素粒子原子核宇宙物理実験系のポスドクなのですが、先月にタイに行ってきてからというもの、タイ文字を読めるようになるために修行をしているのであります。というわけでタイ文字について知ったことをまとめます。書いてある事が間違ってたらすいません。ちなみに基本的に情報源はWikipediaです。

 

子音字をおぼえよう

 タイの言葉はタイ文字という表音文字の文字体系で書かれています。タイ文字には44個の子音字と、いくつかの母音を表す字と、その他もろもろがあります。(44個のうち現在では2字は廃止で42個とも言う)タイ文字を習う初歩の初歩として子音字を覚えましょう。

 

youtu.be

 

 タイ文字の特徴は色んなところにループとか丸いのがあることです。あと細かいパーツが色々なところで使いまわされているので似た文字がいくつもあります。

 

 さてこれら子音字には日本語でいうところの「あかさたな」のように順番がつけられているようです。最初の文字は「」で、なんか鶏の頭のような形をしています。アルファベットでいうと「k」と「g」の中間的な発音です。この文字は「鶏」をあらわす名詞の「ガイ」に使われているため「ゴー・ガイ(鶏のゴー)」と呼びます。日本語に例えるなら「あひるのあ、いんぽのい、うんこのう」的なものでしょうか。

 

 こうして子音字を一つ一つ順に覚えていくのですが、この文字体系を見ているとツッコミどころが満載でなんでこんな仕様にしたのかと問い詰めたくなってきます。例えば「ฎ:ドー・チャダー」と「ฏ:トー・パタッ」という2つの文字があります。その違いは右下のところの付け根に折れがあるかどうかという微妙なものです。はっきりいって見分けがつきません。絶望します。

 しかし日本語を引き合いに出して考えてみると「まぁ日本語のひらがなよりかは覚えることが少ないからいいよね」という気分になってきます。日本語には「わ」と「れ」とか「ぬ」と「め」とか識別のしづらい文字がありますが、そんな文字がひしめく「ねるねるねるね」とか「ぬめぬめのわれめ」とかいう文字列を我々はちゃんと読めているわけで、「まぁそういうものだからあとは慣れだよね」と考えるのがよいのではないかと思います。

 

タイ文字のフォントについて

f:id:jikkenyametatta:20150813223157j:plain


 あとタイ文字がややこしいのはフォントデザインが色々ある事です。こちらは筆者が持ち帰ってきたタイの「いろはす」のラベルですが、このフォントは丸いやつを省略してしかも敢えてアルファベットに似せてあり、一見してどこの言語かよくわかりません。

 

 またこちらは飴の「Halls」です。どうみても「aaaa」です。

Amazon.co.jp: Halls Fruitti Tropical Candy 90 Grams by Thailand [並行輸入品]: 食品・飲料・お酒 通販

 

 

f:id:jikkenyametatta:20150813223200j:plain


 あとこちらはお土産に買った乾燥ドリアンのパッケージです。こちらはファイヤーになっていてやはり何が書いてあるのかわかりません。余談ですが、タイの人々はこういう炎みたいなデザインが好きなようで、例えばタイ物理学会のロゴもファイヤー感がよく出ていて、ゲームのタイトルロゴみたいでかっこいいです。

http://www.thps.org/


 またタイの大学の学章は仏塔とか法輪みたいなデザインが多いです。Google検索で「タイ 大学」で調べてみてください。日本の大学はだいたい「大學」という文字をメインに据えていますがそれとデザインの哲学が全く違います。各国の大学の学章のデザインについては色々比較が楽しそうだと思いますので、また別の記事で詳しくやろうとおもいます。

 

 というわけで、タイ文字はフォントによって読み難いものが多々あるので、できるだけ色々な媒体の色々なフォントを見て慣れておくというのが重要だと思います。

 

近隣諸国の文字との比較

 タイ文字と近隣諸国の文字について比較していきたいと思います。

 ところでみなさんは「タイのあるあのへんの国々」について正確に位置関係を把握していらっしゃるでしょうか?ちなみに筆者の母に関しては「タイと台湾は別の国なのか?」という絶望的な解像度でした。ここでいまいちど、あのへんの国々の位置関係について確認しましょう。

 タイがあるのはインドシナ半島という大きな半島です。この半島を西から東へ横切っていくと、ミャンマー、タイ、ラオスカンボジアベトナムという国があります。これらの北には巨大な中国が位置しています。さらに西へ行くと、インドとバングラデシュがあります。

 このうちミャンマービルマ文字)、タイ(タイ文字)、ラオス(ラーオ文字)、カンボジア(クメール文字)は文字体系としては似ていて、これらはインドのブラーフミー文字から派生した「ブラーフミー系文字」と呼ばれるようです。

 

 これらの文字の相関については仏教が深く関係しています。インドシナ半島の国々は古くから仏教が盛んです。仏教の経典はサンスクリット(日本語でいうと梵語)やプラークリット(サンスクリットに対して俗語的な言語。具体的にはパーリ語など)で記述されており、これらの国の文字体系はこうした経典の言語にも対応できるよう作られてきたとのことです。

 

http://www.asiafinest.com/forum/index.php?showtopic=267085

 こちらのページにある図は、

  • テーヴァナーガリー文字。サンスクリットプラークリットで使われ、現代でもインド諸語のヒンディー語、マラーティー語、ネパール語などで使われている。
  • タイ文字。
  • ビルマ文字。現在もミャンマーで使われている。丸っこいのが特徴。昔は文字を葉っぱに書いており、字を書いたときに葉っぱが繊維に沿って裂けないように丸っこい字になったらしい。
  • Khün文字。タイとミャンマーの国境あたりの民族が使う文字らしい。
  • ラーンナー文字。かつてタイ王国北部を中心に栄えたラーンナー王国で使用された。現在は公的には使われていない。
  • クメール文字。現在もカンボジアで使われている。

 を対応する子音を軸にして並べたものです。それぞれの文字が相互に対応し、縦に並んだ文字同士が似ていることが分かります。

 

 いっぽうベトナム語は例外的で、中国の影響を強く受け漢字を使っていたとのことです。現在はクォック・グー(國語)と言って、アルファベットを基にした文字体系でベトナム語を表記しているそうです。

 

系譜を図示しよう

  ブラーフミー系文字の系譜を図にしていきましょう。ブラーフミー系文字というのは古今東西さまざまな文字体系があります。これらを一望できる見通しのよい1枚の図をつくりたいのです。

 

 文字体系の親子関係を繋げていって系譜の図の全体を作っていきます。Wikipediaの文字体系に関するページを見ると、右端のテンプレートの部分に「親の文字体系」「子の文字体系」「姉妹関係にある文字体系」という項目があります。「Thai alphabet」の場合、親の文字体系が「Khmer」となっています。姉妹と子は書かれていません。さらに「Khmer alphabet」のページでは親が「Pallava」、子が「ThaiとLao」とあります。ここで姉妹関係が「MonとOld Kawi」とありますが、ひとまず親子関係のみに注目することにします。

 

 このようにして親子関係をひろっていき、 DOTというグラフを記述する言語で書いていきます(写経)。さらにDOTをGraphVizというソフトで絵にします。ここではErdosといって、オンラインでGraphVizが動くサイトを使いました。

Erdos - Online Graphviz Viewer

 

 こうして親子関係で繋がった全ての文字体系を図示したのがこちらです。

f:id:jikkenyametatta:20150814000137p:plain

 

 こうして一応は図ができたのですが、ミャンマービルマ文字が登場してません。ここから先の、究極的には「ザ・系譜図」を作るにはさらにWikipediaの本文をがんばって解読するか、別の資料を読んで整理していくことになるでしょう。

 

 とここで、「The Fontpad」というサイトの「南ブラーフミー系文字の系統」と題するブログ記事を見つけました。この記事を見ると、素晴らしいことに筆者が作りたかった図がすでに出来上がっております。参考文献が色々挙げられていることから、作者の方はかなりよくこのへんのことを調べている人なのだなと思います。多いに参考にさせていただきます。

http://www.fontpad.co.uk/genealogy-of-southern-brahmic-scripts/

 

 さて今後ですが、筆者はこのへんの言語の専門でもなんでもないのでこれ以上ディープな図を公開するのはやめておこうと思います。Wikipediaという誰もが見える資料からさらにディープな資料に手を出すと、筆者のまとめに対して第三者が正しさを検証できなくなってくるためです。すみません。正直なところ修行不足の筆者にとってはこの世界はまだディープすぎるのです。

 

 ところで、言語の関連を図示した例としてこんなサイトを見つけました。こちらはヨーロッパの言語の語彙の類似度を表した図です。筆者としてはこういう統計的情報も含めた図をつくりたいのです。生物の進化の系譜をDNAの類似度でもって再構築したときに新たな知見が得られたように、新たなグラフからは何かしらの展望や発見があるのではないかと期待してやみません。こういう試みもまたいずれできたらやりたいです。

ヨーロッパのそれぞれの言語はどれぐらい似ているのか、の図 | 秋元@サイボウズラボ・プログラマー・ブログ

https://elms.wordpress.com/2008/03/04/lexical-distance-among-languages-of-europe/

 

 

プログラミング言語の場合

 こうしてブラーフミー系文字の関連を調べていると、プログラミング言語系譜はどうなんだろうという気分になってきます。プログラミング言語というのはバグを生まないようにするため日夜進化していますが、新しい言語というのは、過去のコード資産を生かすことや新たな学習コストをできるだけ小さくすることが大事ですので、たいていどの言語にも親と呼ぶべき言語があるのです。ブラーフミー系文字も仏典という過去の資産を土台にして派生していったというわけでなんか似たものを感じます。先ほどの図示の試みをプログラミング言語についてもやってみましょう。

 

  ちなみに全然関係ない話なのですが、パーリ語の略称が「pl」でPerl拡張子と同じです。いまから12年ほど前は今のようにブログという便利なものは存在せず、各人はhtmlを手打ちして日記をつけ(もしくはホームページビルダー)、Perlを使ってアクセスカウンターやBBSなるものを自作していたのです。なつかしいですね。

 

 Perlを起点として影響を受けた/与えた言語を整理していきます。

Perl - Wikipedia

影響を受けた言語 : AWKBASIC-PLUS、C、C++LISPPascalsed, シェルスクリプト


影響を与えた言語:JavaScriptPHPPythonRubyPowerShell

 

 さらにCとC++PHPまでを見たのが下図です。すでにかなりディープなことになっています。この要領で言語間の関係を追加していけば言語の系譜ができあがる・・・はずです。これについても、今日はこのあたりでやめておきます。

f:id:jikkenyametatta:20150813231848p:plain

 

 

まとめ

 タイ文字が読めるようになるように勉強しています。またインドシナ半島の各国の文字体系について調べています。

 この地域の言語は仏典を基盤として密接に関わりあっています。我々日本人の目から見たらどれもうにょうにょした字で違いが分かりにくいのですが、筆者は是非そこを見分けられる能力をつけたいと思っています。

 言語同士の関連を図示することは文字体系の大枠を理解するのに有益な作業かと思います。現在Wikipediaの情報を整理して図を作成しています。DOTのコードはこちらです。

https://gist.github.com/jikkenyametatta/32509b4643647be698b8

 

謝辞

 インドシナ半島各国の物理屋のみなさん:ミャンマーのミインチョーソーさん、タイのナッタポンくん、ベトナムのシェムさん、筆者に物理の話題のみならず言語の話題についても色々おしえていただきありがとうございます。ところで筆者は最近論文を書いていないのでクビになりそうです。がんばって論文かきます。

広告を非表示にする

Alpaca社のLabellioをさっそく試した

 本日、なにやらまたまた新しいDeep Learningのツールが登場しました。「最も簡単なWebプラットフォーム」を名乗る「Labellio(ラベリオ)」です。しかしこうも次から次へ新しいものが出てくるとはもはや異常事態です。というわけでLabellioが本当に最も簡単なプラットフォームなのか、早速試してまいりたいと思います。

https://www.labell.io/ja/

 

AWSGPUを搭載したマシンの上でCaffeが動いているようです。手順は以下のとおりです。

・GoogleIDまたはGitHubIDでログインする

・自分で用意したテスト画像をアップロードする

・学習を始める。ネットワークモデルはCaffeNetで、自分で設定をいじるようなことはしない。

・学習の経過はグラフを見てモニタできる。

・学習結果がダウンロードできる。サイズが200MBくらいあるが、caffemodel.binaryprotoがほとんどを占めている。

 

 ここで筆者が使った画像データは、先日と同じ64*64pixグレースケールの「cno」です。なお、画像データのアップロードの際、負荷が高かったせいか何度も処理が落ちました。この試用の際はまず様子をみるために、認識の精度は度外視して画像を1000枚*3種(データサイズ3.8MB)に減らしてやりました。本来は512MBまでいけるそうです。

 

中の人は大丈夫なのか?大丈夫なのか?

"現状では未だ発見されていない様々な用途に対する画像認識技術にトライしてもらうべく、現段階におきましては無料にてLabellioをリリースします。"

"フィードバックや質問をお気軽にお寄せください。小さなチームですが、1時間以内の返答を目指しております"

 

まとめ

 使ってみた感想ですが「むつかしい話はおいといてとにかくみなさんつかってみてね」というメッセージを感じました。というわけで結論ですが、Labellioは現時点でDeep Learningの最も簡単なWebプラットフォームといえるでしょう。(筆者しらべ)

 

謝辞

 からあげ師匠、izmさん、いつも筆者の活動を応援してくださりありがとうございます。話は変わりますが、今年度はじめの4月1日からかぞえて、筆者が研究室泊+出張のために家で寝なかった回数は累計 66泊 / 91日 となりました。

 

 

NVIDIA社DIGITSでDeep Learningをいじくる

アブストラクト(概要)

 Deep Learningのツール「Caffe」を、NVIDIA社の「DIGITS」を使って動かします。DIGITSは比較的インストールが簡単でなおかつ使いやすいので、Deep Learningの理解を深めるのに役立つと思います。記事の前半では、基礎的な用語などについて簡単に説明します。後半では、DIGITSをインストールして動かす方法を説明します。

 

はじめに:いきさつ

 筆者は素粒子原子核宇宙物理系のポスドクで、画像処理をやっています。

 2014年ごろから画像分類の技術として「Deep Learning」というのをよく目にするようになりました。筆者はこの技術をなんとか使いこなしたいと思い、2014年の夏から機械学習について、2015年の正月ごろから実際に動かす方法について色々と調べてきました。そして先週(2015年の6月中旬)、NVIDIA社の開発したDIGITSという開発ツールがあることを知りました。これをインストールしてみたところこれまでの苦労はなんだったのかというくらい操作が楽でした。色々サンプルを動かすうちにDeep Learningとは何かということが分かってきて楽しくなってきたわけで、脳内情報の整理のために記事を書こうと思います。なおこの記事は適宜加筆修正しますのでもし参考にされる方いらしたらご注意ください。内容がまちがっていたらご指摘ください。

 

基礎知識

Deep Learningとは

 Deep Learningとは人工ニューラルネットワーク(ANN, Artificial Neural Network)の発展形です。

人工ニューラルネットワーク(ANN)とは

 名前の由来はさておき、まずANNの使い道について解説します。ANNをつかう簡単な例として次のような問題を挙げます。

・x-y平面上に2種類の点が分布している。これらを区別するための境界線を決めたい。

 

f:id:jikkenyametatta:20150627203436p:plain

 

 ANNを使ってこの境界線を決めます。ANNはこのような状況を与えられると、x-y平面に適当な線をひいてはその妥当性を評価し、また修正した線を引いては妥当性を評価し、試行錯誤を繰り返して、2種類の点たちを一番良く分ける境界線を決めます。つまり「与えられた正解」と「線引きの結果」の食い違いが最小になるように、適当なアルゴリズムに基づいて線の傾きと切片の組み合わせを探索するわけです。

 この線引き問題に具体的なストーリーをつけてみましょう。x軸、y軸をある日の温度と湿度。オレンジ、青の2種類の点をその日の天気が晴れか雨か、としましょう。さきほど求めた境界線というのは、温度&湿度のデータをもとに晴れor雨を分類(未知のデータに関しては推測)するのに対応します。この仕組みはれっきとした「人工知能」と言えます。ここに温度と湿度のデータから晴れか雨を判断する人がいて、「こんな仕事は誰かにやってほしいなあ」と思っているとします。そういう状況においては、この線引きの仕組みは「何かしらのデータに基づいて人間に役立つ判断を勝手にやってくれるモノ=人工知能」と言うことができるでしょう。

数学的には

 この問題を解くのに、f(x,y) = y - (a*x  + b)という関数を考えます。ある点(x,y)が線の上側にあるか下側にあるか、この関数の正負でもって判定をします。「上側にある状態を+1と定義する。下側にある状態を-1と定義する。f(x,y)の結果を見て、正の数だったら+1、負の数だったら-1」というわけです。なおこの関数f(x,y)は、見方を変えると、2つのベクトル:(x,y,1)と(-a,1,-b)の内積を表現しているともいえます。

 この関数をかわいく描いたものが「人工(じんこう)ニューロン」です。

f:id:jikkenyametatta:20150627203443p:plain

 数値は左から右へ流れていきます。一番左側にあるのが数値の入り口です。入ってきた数値は線を通ってくる間に適当な係数が掛けられます。それぞれの数値が合計され、場合によっては何かしら処理をしたのち最終的に右に出てきます。

 ここまでは境界線の式の形を直線:y=ax+bとして話を進めてきました。ところが状況によっては、1本の直線ではデータを分けることができなくて、境界線を折れ線にしたい場面が出てきます。そういう場合は人工ニューロン複数用意し、さらに多段に連結することで折れ線が表現できます。こうして人工ニューロンが繋がったものがANNです。ネットワークの段数を増やすと、より複雑な境界線を表すことができ、識別の表現力を上げることができます。

 

学習

 ANNが最適値を探索する経過は、脳の神経回路が最適化されていくことに似せて「学習」、「訓練」と呼ばれています。「与えられた正解のデータ」は、学習の方向性を与えてくれることに対応させて「教師データ」と呼ばれます。各ニューロンのパラメータを最適値に収束させるのに、Back propagationというアルゴリズムが使われます。

 

ANNと画像認識

 ANNを画像認識に使うことが可能です。詳しくは「テンプレートマッチング」、「コンボリューション、たたみ込み演算」、「たたみ込みニューラルネットワーク」で調べてみてください。Nピクセルの画像はN次元のベクトルです。2つの画像の類似度は、ベクトルの内積によって表現できます。そういう認識を持つと、さきほど紹介した線引き問題が画像分類問題の基本形であると理解していただけると思います。

 

Deepであるということ

 ANNの段数を増やし、識別の表現力を増したのがDeep Learningです。ANNの段数をむやみに増やしても学習がうまくいかなくなるのですが、以下にあげるようないくつかの技術によって実用化され、さらには従来の識別手法の性能を凌駕するまでになったとのことです。

・pre-trainingで適当な基底関数を用意する。Autoencoders。Restricted Boltzmann Machines。

・activation functionとしてReLUなど。

過学習を抑制するDropoutというテクニック。

 

GPUとの相性

 先述の畳み込み演算はまさにGPUが得意とするタイプの演算で、GPUの利用によって高速化が見込めます。もともとGPUは3Dゲームのリアルな映像を表現するために作られた演算装置です。比較的単純な演算を一気に大量のデータに実施するのに特化されています。近年、GPUは3Dゲームのみならず、科学技術計算のためにも使われるようになってきました。

 GPUメーカーの大手であるNVIDIA社は、画像認識、Deep LearningをGPUの応用の柱の一つとして位置づけているようで、ソフト、ハード両面からDeep Learning人口を増やすべく色々製品を出してきています。

NVIDIA® DIGITS™ DevBox

 NVIDIA社によれば、CaffeというDeep LearningのツールGPUを使うと、CPUの約8~9倍の高速化、さらにcuDNNというライブラリの利用で約16~17倍の高速化ができたとのことです。学習や認識の計算時間が短くなればなるほど開発の試行錯誤を早く繰り返すことができ、実際の応用の幅も広がるので、計算速度はきわめて重要です。

cuDNN v2: Higher Performance for Deep Learning on GPUs | Parallel Forall

 

python

 ネットワークの検証や自作のプログラムへの組み込みにはpythonが良く使われます。pythonを覚えましょう。

 

Deep Learningのツール

 有名どころではCaffe, Pylearn2, Cuda-convnet2, Torch7などが挙げられます。

現在のところ一番はじめやすいのはChainerだと思います(筆者しらべ)。筆者のメインのマシンはWindows7で、WindowsというのはDeep Learningをやるのに向いていない環境のようですが、Chainerはpythonのインストールの枠組み(pip)を使うことで簡単にインストールできます。

 

chainer.org

 しかし、ChainerでGPUを使った演算をしようとするとうまくいきませんでした。pycudaというライブラリのインストールがうまくいきません。しかしこれはインストーラが改良されればクリアできる問題だと思いますので、筆者は今後もひきつづきChainerを注目していきたいと思っています。

DIGITS

 こうして色々ツールを試していくなかで筆者が一番楽だと思ったのはCaffe+DIGITSです。Caffeはthe Berkeley Vision and Learning Centerが開発したもので、GitHubのDeep Learningのカテゴリの中で一番人気があると見えます。NVIDIA社もCaffeのことをなんだか贔屓にしているように見えます。そしてNVIDIA社が作ったCaffeの開発ツールがDIGITSです。

 

DIGITSを動かすまで

環境

 筆者の環境は以下のとおりです。

 OS:Ubuntu 14.04 LTS

 CPU:Corei7-4790@3.60GHz*8

 MEM:8GB

 GPUGeForce GTX 750

 DIGITS:1.1 (Downloaded:2015.06.21)

インストール方法

 本家サイトからファイル一式をダウンロードします。このファイル一式の中にはcudaやcuDNNの.soファイルがすでに入っています。ただしダウンロードするにはNVIDIAのDeveloper Programsに登録する必要があったと思います。上級者はGitHubから最新版をダウンロードしてきて自分で設定しても良いです。

developer.nvidia.com

 

GitHubのページにインストール方法が載っています。

NVIDIA/DIGITS · GitHub

install.shを実行するとpythonの環境とMNISTのデータがインストールされます。runme.shを実行するとhttpサーバーが起動します。ウェブブラウザでlocalhostを指定し、表示されるページがDIGITSの操作画面です。

チュートリアルの実行

  チュートリアルのMNISTのデータをいじってみましょう。MNISTとは手書き数字の画像データを大量に用意したものです。これを使ってLeCun(ルカン)先生の設計したLeNetを学習させます。

DIGITS/GettingStarted.md at master · NVIDIA/DIGITS · GitHub

 筆者のマシンではMNIST10kでLeNetを学習させるのに2分40秒程度でした。validationデータのaccuracyは99.07%と出ています。

 いっぽうAlexNetやGoogLeNetというもっとDeepなネットワークモデルも選択可能ですが、筆者のマシンで学習を実行したところ、cudaのout of memoryエラーが出て処理が落ちました。Batch sizeというパラメータを最低値の1に設定しても処理が落ちます。どうやら筆者のGPUではメモリが足りないようで、動かすにはもっと大きなメモリをつんだ高級GPUを買ってくれということのようです。

DIGITSのここが便利

・データセット、ネットワークモデルの管理が楽。

・学習の様子がリアルタイムでモニターできる。

・ジョブを連投できる。前のジョブが終わったら勝手に次のジョブが始まる。

・識別の際、ネットワークの各レイヤーで何が起こっているのかをすぐ可視化できる。チューニングにかなり役立つ。

 

自作データで学習させる

 自作のデータで学習をさせてみましょう。ここでは例として抽象的なデータを生成します。画像の生成にはOpenCV2.4を、乱数発生にはnumpyを使っています。

gista89b3f29fc41189ba270

 

これを実行すると64*64pixのサイズの以下のような3種類の画像が、それぞれ個別のフォルダの中に生成されます。生成する数は10個としています。この後紹介する実験ではこの数字を1万に増やし、計3万枚の画像を使って学習&検証をしています。

f:id:jikkenyametatta:20150627192951p:plainラベル「n」。もやもやした背景+点というノイズを表現した画像

f:id:jikkenyametatta:20150627192946p:plainラベル「c」。中央付近に黒い直線がある。

f:id:jikkenyametatta:20150627192958p:plainラベル「o」。中央付近に黒い丸がある。

 

 これら3つのフォルダを持つ親フォルダを、DIGITSの画面でTraining Imagesのfolderとして指定します。この「n」「c」「o」というフォルダ名がそのまま教師データのラベルになります。フォルダ構造が深い場合は、親フォルダ直下のフォルダ名がラベルになります。デフォルトでは、この中からランダムに選んだ25%ぶんが検証用データになります。

 これを使ってLeNetを学習させます。

 LeNetはIntended image sizeが28x28(gray)と書いてありますが、チャンネル数(カラーか白黒か)と画像のサイズはこれと一致していなくても動きます。これらのパラメータはデータセットに応じて勝手に調整されます。

 ただし画像認識の観点からいうと、設計値とかなり違うサイズの画像を持ってきた場合は良いパフォーマンスが得られないことがあると思います。LeNetは5*5pixコンボリューション→2*2pixプーリング→5*5pixコンボリューション→2*2pixプーリングをしており、この領域に対してあまりに巨大な構造物は認識できません。その場合はコンボリューションのカーネルサイズやプーリングの大きさや層の深さを変更するか、はじめから画像のサイズを小さくしておいたほうがいいです。ネットワークの構造を変更したい場合は「Custom Network」の編集欄で編集しましょう。

 学習を始めると学習経過をあらわすグラフが表示され、随時更新されていきます。筆者のマシンでは学習の所要時間は9分50秒、accuracy=99.8%、loss=5.8*10^-3でした。

f:id:jikkenyametatta:20150627195533p:plain

 

 学習済みのモデルを使って、適当な画像の識別をさせることができます。このとき「Show visualizations and statistics」をオンにすると、中身でどのような計算が行われているのかを覗くことができます。また

・学習の途中の状態(エポック毎のスナップショット)で識別を試せる

複数の画像をテキストファイルで指定して一気に識別させる

という機能もあります。

 

さいごに

 筆者がポスドクの任期が切れて無職になったら、AV業界に転職して、この技術をアダルト動画のモザイク処理に応用したいと思います。

 

謝辞

 機械学習系の情報やUbuntuの設定のしかたを色々おしえてくれる後輩のよこやまくんに御礼もうしあげます。

 

参考文献

オーム社「わかりやすいパターン認識

丸善PRML

 

加筆修正の履歴

 (2015/06/29.21時)アブストをつけました。筆者が「パーセプトロン」だと思っていたのは、実は「人工ニューロン」と言うのが適切でした。文章の表現を推敲しました。Custom Networkの話を書き足しました。NVIDIA社、GitHubの大文字小文字を正しい表記に修正しました。字をおおきくしました。

きじ

きじは日本の鳥です

広告を非表示にする