かれこれ2年前ほど前になりますが、機械学習のCNN(畳込みニューラルネットワーク)を使って、魚種を判別するためのWebサイトを作った時の内容を記載します。
これを作ったきっかけは、機械学習が騒がれだし、自分でも一度何かものを作ってみて、どういうところが優れているのか、どういうところが難しいのかを体感するためです。
そのため、このサイトの実用性はないですが、機械学習とはこういう流れで、こういうことをやるんだというのが学べたのでそのあたりにフォーカスして、記事を書いていきます。
ソースコードは、GitHubにアップロードしています。
どういうサイトを作ったのか
以下のサイトを作りました。
ブラウザ上から、ローカルの魚の画像を選択して、「判定する」ボタンを押下すると、魚の種類がハゼなのかカサゴなのかキスなのか、どの魚の可能性が高いのかを判定するサイトになっています。
魚種は多く増やしたいところですが、画像をスクレイピングするのも大変ですし、学習する時間がかかるため、簡易的に3種類としました。
アプリケーションの概要
先ほど説明した内容と重複するところがありますが、以下の流れで判別をしています。
そして、使っているフレームワーク等は、以下の通りです。
Webサイトを作る全体の流れは以下となります。
スクレイピング→ディープラーニング→Web開発の順で行いました。
スクレイピングでは、BingのImage Search APIで教師用データおよび、テストデータの取得を行っています。
また、取得できる画像の枚数に限りがあるので、色合いを変えたりして画像の水増し(オーギュメンテーション)を行っています。
ディープラーニングでは、教師データをもとに、Keras + TensorFlowでディープラーニングをして、学習済みモデルを作成します。
Web開発では、ディープラーニングで作成した学習済みモデルを使って、判定した結果を返す簡単なWebサイトを作成しました。
つくってみて感じたこと
データ収集の困難さに関しては、作るものに大きく依存すると思いますが、学習に効果的なデータを数多く取得すること、これが一番の難関・時間がかかる部分だと感じました。
また、GPUが載っていないマシンでやると、ものすごい学習に時間がかかります。
そして、ディープラーニングで求めている精度が上がらなかったときのアプローチはどういうものがあるのか気になりました。全体的にデータが足りていないのか、特定のデータが取れてなくて精度が出ていないのか、そもそもディープラーニングのモデルが悪いのか、このあたりを分析していくのはなかなか骨が折れそうだなと感じました。
コメント