カテゴリー別アーカイブ: 習作

さよならMac

 ぼくは有山圭二。Macユーザーだ。

 MacBook AirでMacに入門し、すぐにMacBook Proへ。以降、ずっとMacを使い続けてきた。

 iOSアプリを開発する関係でMacから離れられなかったわけじゃない。ぼくの本業はAndroidアプリの開発だ。Androidアプリの開発環境はmacOSに加えて、Windows、Linuxでも動作する。実際、Macの前はUbuntuを使っていた。

 ぼくは、Macが好きだから使っている。

 いや、好きだった。

 6年間、ぼくを公私ともに支えてくれたMacと、お別れすることにした。

「さくらの高火力」でTensorFlow

このエントリは「TensorFlow Advent Calendar」の12日目の記事です。

これまで僕は、モデルの訓練には「GeForce GTX960」を積んだデスクトップマシンを使ってきました。
この「GeForce GTX960」は、GPUだけあってちゃんと使えばCPUより格段に速いのですが、最高の性能というわけではありません。

機械学習に取り組む中で、科学技術計算などを行う汎用目的(General Purpose)GPUや、複数のGPUで計算を並列化する「マルチGPU」に憧れがないと言えば嘘になります。
しかし、GPUの1枚の価格や電気代、排熱の処理を考えると現実的でないと言う結論に落ち着いていました。

今回、さくらインターネットの高火力コンピューティングが試用できたので、やってみたことをまとめます。

矩形切り出しツール「Region Cropper」を公開しました

時間を見つけてはTensorFlow関係のあれこれをちまちま続けています。

先日は「なにわTECH道」で、TensorFlowを使ったイラスト顔検出について発表しました。

データセットの作成

これまで、機械学習に使う画像(データセット)の作成にはMacの「プレビュー」を使っていました。
1枚ずつ画像を読み込んでクロッピング(トリミング)していたのですが、1枚の画像に複数の顔があるときや、あとで領域を微調整(特に領域を拡大)したいときが面倒でした。

良さそうなツールがないか、少しばかり探してみたのですが、僕の思い描くような操作性のものがありませんでした。

なければ作れば良い。

そんなわけで、自分で画像の切り出しツールツール「Region Cropper」を開発しました。
1人で使うのももったいないので、GitHubで公開します。

Region Cropper

GitHub: https://github.com/keiji/region_cropper

set_region

GUIのフレームワークに、使い慣れたSwingではなくJava FXを使いました。
そのため、Java 8のUpdate40以降でしかきちんと動きません。

以下、Region CropperのREADME.mdから。

【WIP】TensorFlowのExerciseをがんばっている

 僕はいま、Google I/O 2016参加で渡米するにあたり、時差ボケ予防のために徹夜でこの記事を書いています。

概要(忙しい人向け)

 TensorFlowのチュートリアルにある課題(エクササイズ)に挑戦した。Softmaxの適用については比較的簡単だったが、Fully connected層をLocally connected層に変える課題については難航し、解決していない。

 Locally connected層は、重み共有をしない畳み込み層である(cuda-convnet)。
そこで、チュートリアルのモデルのFully connected層をConvolution層に置き換えたところ、学習が正常に行われなくなった。

 TensorBoardを通じてモデルの状態を確認したところ、conv2層で勾配消失が起きていることがわかった。さらに調査を続けると、conv2層のweightsの初期値がcuda-convnetに記載されている値と異なっており、修正することで正常に学習できるようになった(数値の食い違いが意図的なものかは不明だが、修正をPull Requestしている)。

 「重み共有(Shared weights/Tied weights)」をしないというLocally connectedの条件をTensorFlowでどのように実現するかは現時点でわかっていない。depthwise_conv2dについて検討したが、上手くいかないと判断している(出力フィルタの枚数を減らすことができないため)。

 エクササイズについては、今後も調査を続けていく。

ABC 2016 Springで発表しました

3月12日に開催されたイベントAndroid Bazaar and Conference 2016 Spring で発表しました。

タイトルは『Google TensorFlowとAndroidが繋がる未来』です。

初めての基調講演、しかもGoogleの佐藤さんとのジョイントセッション。さらに題材が専門外のTensorFlowということで緊張しましたが、なんとかかんとかまとまって、正直、ほっとしています。

聞きに来てくださった皆様に、改めてお礼を申し上げます。

講演の内容については、スライドをご覧ください。

今回のスライド中のまんが・イラストも、根雪れいさんにお願いしました。根雪さんは、ぼくのぼんやりしたイメージを掬い上げて、素晴らしいキャラクターとしての姿を与えてくれました。いつもありがとうございます。

最後に、スライドの中でテストケースの正答率が「91%〜95%」とか得意げに書いてありますけど、次のスライドにあるとおり、現状のモデルは過学習の状態にあると考えています。

これからもっともっとたくさんのサンプルを、さらに厳密に分類して学習させたり、グラフ(ネットワーク)を改良して認識精度を高めていく試行錯誤を続けていきます。その成果発表は、またどこか機会があれば!