前回で画像認識ができるようになりましたので、今回は、3種類のナッツの画像を識別してみたいと思います。
ヘーゼルナッツ、アーモンド、くるみの3種類のナッツの画像をそれぞれ54枚 iPhoneで撮影して用意しました。 54枚中の50枚を訓練用の画像にして、4枚をテスト用の画像にします。 iPhoneからMacへの転送はAirDropを使いました。
こちらはテスト用の画像ですが、HEICという形式になっていますので、jpg形式に変換しないといけません。 iOS11から画像のファイル形式がHEIC形式になっているようです。高画質のままjgp形式の半分くらいのサイズとなるようです。
変換にはこちらのサイトを利用させていただきました。
変換できたら、VirtualBoxのUbuntuにコピーするのは、GuestAdditionsを入れて設定していますので、ドラッグ&ドロップでできます。
~/AI/image_retraining/nuts ディレクトリを作成し、その中にtrain, test ディレクトリを作成します。
そして、train ディレクトリの中に、almond, hazel, kurumi ディレクトリを作成し、それぞれのディレクトリの中にjpgファイルを入れました。
それから、testディレクトリの中にはテスト用の画像を入れました。
ここまで出来たら訓練用の画像の準備は完了ですので、下のコマンドで訓練します。
cd ~/AI/hub/examples/image_retraining
python3 retrain.py --image_dir=${HOME}/AI/image_retraining/nuts/train
10分くらいで、訓練完了しました。
/tmp ディレクトリに幾つかのファイルが生成されています。
下のコマンドでtestディレクトリに保存した画像の認識処理を実行します。
cd ~/AI/tensorflow
bazel-bin/tensorflow/examples/label_image/label_image \ --image=${HOME}/AI/image_retraining/nuts/test/IMG_0638.jpg \ --input_layer=Placeholder \ --output_layer=final_result \ --graph=/tmp/output_graph.pb \ --labels=/tmp/output_labels.txt
99%の確率でくるみと判定されましたので、認識成功です。
他の画像もインプットして試してみます。
ヘーゼルナッツも認識できました。
アーモンドも99%で認識成功です。
訓練用の画像とテスト用の画像が似てるからか、思ったより上手く認識できましたので、/tmp ディレクトリに生成されたファイル群は ~/AI/image_retraining/nuts/checkpoint ディレクトリにコピーしておきます。
このくるみの画像は91%でくるみと判定されました。 アーモンドの確率7.6%となっています。確かに形がくるみの割にアーモンド型になっていますね。 testディレクトリにある12枚の画像のうちこの画像だけが91%での判定となり、残り11枚は全て99%の確率で正しく認識できていました。
何かに応用できそうな技術ですね。
今回はここまでです。