[Python][画像認識]麺類の分類をしてみた
こんにちは。僕はらーめんが好きでよく食べ歩きをしているのですが、そもそも麺類が好きだなと思い、画像認識で麺類の分類をしてみることにしました。
手順
①学習用の画像の収集
②画像の水増し
③麺類の学習
④Flaskにてアプリ作成
①学習用の画像の収集
今回はFlickrのAPIを利用して画像収集することにしました。画像の枚数が多ければ多いほど学習の精度もあがるので、根気強く収集していきたいと思います!
収集する麺類は以下の5種類です。300枚ずつ収集していきます。
・らーめん
・うどん
・パスタ
・そば
・そうめん(この時点では収集していましたが、そうめんの画像が少なすぎてまともに学習できなかったので、学習の際には除外してます)
画像をダウンロードしていきます。
それぞれ300枚ずつ取得できたのですが、麺類とは関係ない画像も混じっていたのでここは泥臭く手作業で精査し、麺類の画像のみに絞っていきます。
②画像の水増し
手作業で絞った結果、それぞれ100枚くらいまで減ってしまいました。100枚だと学習精度もあがりにくいと思うので、水増ししていきます。
それぞれ画像を左右反転させ3枚ずつ増やしました。
③麺類の学習
画像は揃ったのでここからはそれぞれの麺類を学習させていきたいと思います。それぞれの集めた画像を読み取り、ndarry配列に格納していきます。
学習データとテストデータに分割していきます。
データの前処理が完了したので、ここから学習していきます。今回は少ないデータ量でも学習できるようvgg16にて転移学習をしていきます。(転移学習:ある領域で学習したことを別の領域に役立たせ、効率的に学習させる方法)
結果として、スコアが約0.96と高い結果となりました。(結果出力するまで半日以上かかるので、過去の記憶から書いてます。。今度時間あったら結果添付いたします!)なので0.96の割合で、麺類の分類を行うという事になります。
④Flaskにてアプリ作成
作成したアプリにて画像を分類していきます。前回学習したモデルを「model.h5」に保存しているので、ここでモデルを呼び出し画像を認識していきます。
今回はPythonで画像認識ができる事に主軸を置いていたので、デザインのしょぼさについてはご了承くださいませ。。ちなみにアプリのオープン画面はこちらです。
なかなかひどいですね。。今度改善しようと思います。ではこのアプリにらーめんの画像を認識していただきます。
結果は、、、
という事で認識できました。ちなみに10回ほど実行してみると半分ほど間違いがありました。精度は高い値になっていますが、結果としては0.5くらいになりました。おそらくらーめんの中にもみそや塩、とんこつなど数種類分かれているので大括りに分類している事が原因かと思われます。なので今実装するとしたら、らーめんの種類で分割していこうと思います。
この記事が気に入ったらサポートをしてみませんか?