今までAndroid上で動く画像分類アプリを作ろうと試行錯誤していましたが、就活が忙しくなってきたこと、完成の目処が立たないことからお蔵入りになりそうです。せっかく頑張ったのに陽の目を見ないのも悲しいのでせめて開発の過程で何を行い、何を学んだかをここに記したいと思います。
やろうとしていたこと
1.Android端末内の画像をサーバにアップロード
2.「Caffe」にて画像分類
※Caffe:機械学習で画像分類を行うツール。大量に用意した画像データをもとに機械学習を行うことで分類器を作成でき、この分類器に画像を投げると何が写っているのかを教えてくれる。
3.結果を端末で表示
たったこれだけ 超シンプル
辞める理由
1.精度が出ない
とりあえずこちらのデータセットを拝借し猫の品種を判別する分類器を作成してみたのですがどんな画像を投げても同じような値が出力されてまともに分類できませんでした。仕組みを理解せずブラックボックスのままツールを使用していたため改善策も思いつかず途方に暮れています。
2.学習にお金がかかる
分類器作成の際には膨大な量の処理を行うためハイスペックなマシンが必要です。AWSで無料で借りられるマシンではスペックが足りずスケールアップをする必要があるのですが、$0.23/時間の料金のマシンで12時間ほどかかります。また、学習終了時に外出していたり就寝していたりするとスケールダウンをするのが遅れるため余分に料金がかかってしまいます。大きな額ではないのですが貧乏学生には手痛い出費です。上手く行けば学習は一回だけで済むのですが、今回失敗した以上次成功するとも限らないためどの程度の費用がかかるか見通しもつきません。
3.意義を見出せない
先日公開された「Google Cloud Vision」のベータ版を使うと自分で分類器を用意しなくても簡単に画像分離ができてしまいます。Googleが提供しているAPIだけあって精度もべらぼうに高いです。こいつの存在を知った時モチベーションが崩れ落ちました。
やったこと
AWS
- EC2でサーバを借りた(OSはUbuntu)
- XAMPPのインストール
- 固定IPアドレスの割り振り
- Route53でドメインの取得
Android
- ギャラリーを呼び出して端末内の画像選択
- OK HTTPを用いた画像データのPOST
- プログレスダイアログの表示
- 画像分類ツール「Caffe」のインストール&学習 (これが一番辛かった)
- PHPでコードの記述(echo、shell_exec、$_FILES)
おわりに
スーパープレゼンテーションというテレビ番組で機械学習による画像分類の存在を知ってすぐに「試してみたい!」と思いました。しかしネットを探しても素人が簡単に試す方法は見つからず、ツールのインストールから画像の用意、学習までを自分で行わなければいけませんでした。この面白い技術を誰でも手軽に使って遊べるようになればと思い今回のアプリ開発に着手したのですが、Cloud Visionがまさに私がやりたかったことを実現しており、わざわざ自作する必要もないのかなと思い開発を断念しました。完成させられなかったのは残念ですが勉強にはなったので良しとします。
Cloud Visionは従量課金制であること、サンプルを動かすにもある程度の知識を要することから誰もが使えるというわけではありませんが、今までよりもハードルはぐっと下がったように思います。時間ができたらCloud Visionを使ってブラウザ上で誰でも画像分類を試せるようにしたいなぁ(APIキーの秘匿とリクエストの制限がめんどくさそう)