人工知能で山葡萄をなんとかする
岩手県は山葡萄生産量日本一です。 また野田村は岩手県で生産量第2位ということ、友人も山葡萄に関わっていることもあって山葡萄の諸問題を解決しようと最近流行りのAI,ディープラーニングで山葡萄をコンピュータ側からなんとかしようと思ったので記録を書いてみます。
さて、AIディープラーニングとはなんでしょうか?
ディープラーニングはAI(人工知能)の計算、学習方法の一種で、人間の神経細胞を真似したニューラルネットワークの一種ということ。 またそのニューラルネットワークを多層(深層)にすることで効果的な学習を行うこと、それにより認識精度が上がっていたため最近注目されています。
友人から山葡萄の重さをはかることができないかという事をききました。 スマホとかでぱぱっと山葡萄を写すと重さを図れるみたいなのできない?みたいなゆるい感じで、、、
いろいろ考えてみました。
ぶどうの重さは一粒の重さ X 粒の数で大体でるのではない? 粒の大きさから大体の重さはわかる気がします。 同じ大きさならだいたい同じ重さになるだろうから粒の数を数えられればなんとなくな重さがでるんじゃないかなと。 もちろんカメラでぶどうの画像をとれても裏側の見えない部分は数えることができないのですが、これもなんとなく見える部分の重さに、かける1.2とかすればなんとなく近い数字がでるのではないかなーとなんとなくな感じでいけるんじゃないかとおもいました(かなりゆるい)
というか実はディープラーニングの実験したいだけだったのですけど、、、
というわけでぶどうを認識させるAIをディープラーニングで作ってみようという企画です。
データが多ければ多いほど精度が高くなるというディープラーニングですが、山葡萄写真はなんども撮影していたのでたくさんあります。 自分でとった写真を利用することにしました。
今回の目的はぶどうの粒を認識させることです。 おそらくディープラーニングで粒を認識させる以外にも認識させる方法は他にもあるのかもしれません。 ぶどうの軸や葉っぱに隠れた部分の粒などを「粒」と認識させるにはAIさんとかが得意なんじゃないかと、AIさんが粒を粒と認識してくれたらいいなーという願望でもあります。
というわけでやってみることにしました。
まずは山葡萄写真から粒の部分を教えて上げる必要があります。
labelimgという画像にラベル付するソフトで粒をyamabudouというラベルを付けて囲んでいきます。
えんえんと・・・ かこんでかこんで・・
一つの写真に数百の粒があるのですが、これを60ファイルぐらいラベル付していきました。(入力ミスでyamabudouwwwとなってる 草)
さてディープラーニングを行うということでライブラリはgoogleのtensorflowを使うことにしました。 これはgoogleのディープラーニング用ライブラリで、比較的ネット上に解説も多いということがありました。
tensorflowはCPUで計算してもいいし、高速なGPU(グラフィック用のプロセッサ)を利用してもいいのですが、高速なGPUを利用したいのですが、自分のPCでtensorflowの環境を作るのが大変だったのでAmazon awsのディープラーニング用のGPUサーバを利用して行いました(有料)。 またその後自分のPCでもCPUにて学習もおこなってみましたがやはりGPUとCPUではだいぶ計算処理料に違いがありました。 amazon awsでは1時間$0.6ぐらいから$2ぐらいの比較的安価なもので試してみました。 学習はかなりの時間がかかります。
そして学習させてみた結果が以下です。
右側と左側は同じ画像で、緑に囲われた部分が粒となります。
右側が人間がラベル付した画像、左側がAIが認識した粒です。
なかなかいい感じに認識している気がします。
が、認識されていない部分がおおくあります。 この状態だと山葡萄画像から粒を数えるという用途にはまだ使えないという感じです。
うまく行かなった理由はまだよくわかりませんが、
1,学習時間が短い2,ラベル付した画像とラベルの数が少ない
のどちらも可能性があるのかなと思います。
1はお金と時間があれば解決しそうですが、2については、画像の数が少ないのではないかという点です。
ラベル付けや画像の用意のしかた(同じ画像を縦横回転させて学習させたりすると良いとか)とか、いろいろ学べば学ぶほどディープラーニングとtensorflowについての知識が追いつかない感じだったりします。
ちなみにgoogleが提供している学習済みモデルなどではGPUにて数万時間学習したモデルなどが無料で利用できたりもします。
とりあえずまた時間ができたらチャレンジしてみたいと思っています。 来年の山葡萄シーズンまでに何回か試してみたいと思います。
ではまた。