このサイトは何?
子供と散歩をしていて「この花なに?」と聞かれたときに答えられなかったことがありました。親としてちょっと悔しいですよね。そこで、このサイトを作りました!🌼このはなあに🌻は、AI(ディープラーニング)を使って花を判別できます。
1. 教師データ
・教師データの入手
小学館のNEO POCKET 植物を参考に、身の回りや野山、高い山で見られる植物など約630種をピックアップし、それぞれの花をGoogle画像検索をWEBスクレイピングすることにより集めました。
・それぞれの花の教師データ数
各花ごとの教師データ数は花によってまちまちで、約50~150個ほど用意しました。
・教師データの正当調査
WEBスクレイピングにて得られた画像は、本来その花ものとは違うものが混ざっているときがあります。これら間違いを修正するのに一番上のお姉ちゃんにお小遣いを渡してやってもらいました(たっぷり取られました😅)。
2. コストを掛けずにディープラーニング
・Colaboratory
100万円以上するマシンを使うことはできません。そこで、Googleが提供する Colaboratory を使用し、無料でディープラーニングを行いました。しかし、Colaboratory では、メモリが14Gと貧弱で通常今回のようなサイズのデータではそもそも学習ができません。これを動的データ分割やmemmapなどの技術を使い、学習を可能にしています。また、Colaboratory は連続12時間しか利用できないのですが、うまくデータを引き継ぐことで擬似的に継続して学習させるようにしました。
・Keras backed Tensorflow
最近のディープラーニングの主流であるKeras の backend でTensorflow を使う方法で学習を行っています。
・転移学習(fine-tuning)
Xceptionという事前学習した重みを利用可能な深層学習のモデルを利用して少ない学習量で高い精度を得ることができました。具体的には通常200エポックほど必要だと予測していたものが、30エポックで収束しました。
3. 性能向上手法
・最適化手法
様々な最適化手法を比較しAdamaxを採用しています。
・ホールドアウト
訓練データとは別に評価データをホールドアウトし、教師データのみに特化した学習にならないようにしています。
・バッチ正規化層の有効化
Xceptionモデルのバッチ正規化層を学習有効化することにより、学習精度を高めています。
・性能
🌼このはなあに🌻はディープラーニングの実践の目的もありますが、それ以上に実際に有用に使えるシステムを目的しています。正答率は現在約88%となっています。このクラス数、植物限定の判別としては実用に耐えうる以上のシステムといえます。
4. 実装手法
・モデルの事前読み込み
学習済みのモデルを読み込みするのに、貧弱なサーバのため30秒以上かかります。応答速度を高めるために、事前にモデルをロードし、待機させています。
・マルチスレッド化
上記事前読み込みしたモデルを同時に複数スレッドで実行することで、同時接続を可能にしています。
・ローカルサーバ化
これらをpythonローカルサーバとし、APサーバは画像を保存し、バックエンドで保存された画像のパスを判別pythonサーバに渡し、結果をAPサーバに返します
お問い合わせ
野山の花を主としているためマツバギクなどの園芸種は含まれていませんが、将来的には含められればと考えているため追加してほしい花がありましたらお知らせください。
学習済みの花のリストは公開予定ですのでしばらくお待ち下さい。
ディープラーニングを使ったお仕事もお手伝いできるかもしれません、ご連絡ください。
ご連絡は下記@を全角から半角にして送信してください。
tak.joe.main@gmail.com