植物の写真から病気を判別するサイト(http://www.plant-check.jp/)を作ってみた。
サイトは2017年8月くらいに作ったのだが、そのメモがてら、やったことをまとめてみる。
使用した技術は最近の流行をふまえ、わりと本格的。バリバリのDeep Learningなので、人工知能(AI)を利用し、植物の病気判定を行った!と言っていいはず。
- 病気判定に使用してたのは(1)植物の葉かそれ以外かを判別する2値分類モデル+(2)植物の葉が病気か否かを判別する多値分類モデル。
- 2つのモデルともにDeep Learningを活用。具体的にはInception V3(ImageNet)を転移学習させる形で作成。
- ソフトウェアはPythonで作成。Deep Learning部分はkeras + tensorflow、WEB部分はnginx + uwsgi + bottleで構成。
- インフラ部分にnvidia-docker(keras + tensorflowでの学習部分)とdocker(WEB部分と判別モデル利用)を使用。サーバはsakuraのVPS(ubuntu 16.04 LTS)。
- 学習データにはa) 自分で集めたバラの葉っぱ画像(健康な葉と病気の葉をハンドラベリング)とb)SUN Database(http://groups.csail.mit.edu/vision/SUN/)を使用。
- (1)植物の葉かそれ以外かを判別するモデルにはa) + b)を利用
- (2)植物の葉が病気か否かを判別するモデルにはa)のハンドラベリング結果を利用
開発環境の準備
開発環境としてDockerを利用したコンテナを2つ+リリース用のコンテナを1つ作成した。
- GPUを用いた学習用としてtensorflow + kerasが動作するコンテナ
- ホストとなるUbuntu 16.04にnVidia公式ドライバをインストールした後、nvidia-dockerを導入して構築。
- 安定版のgcr.io/tensorflow/tensorflow:latest-gpuをベースにしてkerasを追加で入れた。
- (困ったときは公式サイトを見るのが一番だった。)
- 学習したモデルを用いたWEBアプリを開発するためのコンテナ
- ホストは1.と同じ。pipからkeras, tensorflow, bottle, uwsgiを入れた。
- 開発用なのでjupyterも導入。
- WEBアプリをリリースする環境のためのコンテナ
- 2.との違いはjupyterなど余計なソフトウェアを省いている点だけ。
データの準備
本件で作成したモデルの概要とモデル構築に利用するデータは次のとおり。
- 植物の葉かそれ以外かを判別する2値分類モデル
- バラの葉の画像データを正例、SUN Database(http://groups.csail.mit.edu/vision/SUN/)の植物以外のカテゴリを負例とする2値分類モデル。
- Imagenetで学習したInception V3(keras付属)を利用。
- 前半250層を固定。Inception V3の後に判別層を追加する形でネットワークを構成(詳細は次回記載)、学習させた。
- いわゆる転移学習とかfine tuningとか呼ばれる手法。
- 使ったデータは約16000枚。(data augmentation前)
- 植物の葉が病気か否かを判別する多値分類モデル
- バラの葉の画像データを「健康」「黒星病」「うどん粉病」「その他カビ系の病気」の4カテゴリに分類する多値分類モデル。カテゴリ分けは自分でとったバラの写真・動画(画像に一定フレームごとに画像として切り出し)をハンドラベリングした。
- 利用した学習手法は1.と同様。
- 使ったデータは約1800枚。(data augmentation前)
バラの葉の画像データは夏休みに都内の公園をめぐって自分で撮影した。モデルに投入していないデータ(バラ以外、対象病気以外)も含めて3000枚以上撮影。機械学習のコード書くより大変だった(が良い経験になった(詳しくは次回))
Read more »