いう、未経験者が3か月で機械学習、ディープラーニング、データ分析、AIアプリ開発まで最先端技術を幅広く学べるオンライン学習サービスで勉強しています。AIアプリ開発コースにおいて、成果物として画像認識アプリの自主制作に取り組んでいます。私が製作しているアプリは、『嵐のメンバーでいうと誰似?』というアプリです。顔画像をアップロードすると、嵐のメンバーで最も似ているメンバーを教えてくれるというアプリです。〜げ完成品は、Herokuで公開しています(http://arashiapp.herokuapp.com/)読み込みに時間かかります。製作の大きな流れはこんな感じ。今回は、Aidemyの成果物として製作した『嵐のメンバーでいうと誰似?』のアプリ製作の流れを紹介します。〜げ初心者がはじめて作ったものなので、改善すべきところはたくさんあることをご了承ください。私と同じような初心者の参考になればと思います。※書いているうちに誰に向けて書いているのかわからなくなっていきました。読みづらいでしょうがお我慢を!いつかリライトします。)の顔画像を収集します。方法としては以下2つ。Azureに登録して使います。v7】学習用の画像を収集してみた!)にまとめています。メンバー1人につき750枚くらいの画像を取得できます。すべての画像が顔画像ではないので、実質350枚くらいです。APIだけでは、十分な数ではないので、嵐のYoutube動画からスクリーンショットで350枚ほど取得します。CMのメイキング動画が、画質も良く、正面の顔も多くて、スクリーンショットしやすいのでおすすめです。嵐のような国民的スターは各メンバー単体でCMに出演しているので動画はたくさんありました。350枚ほど取得しました。学習用の画像を収集しましたが、顔部分以外も写っている画像もあるので、顔部分だけの画像にしてやる必要があります。このように全身の画像を、顔部分の画像にする処理を行います。OpenCVというライブラリを使って顔検出をして、顔部分だけの画像を生成します。64にリサイズします。その方法についてはこちらの記事(関連記事:OpenCVのカスケード分類器で顔検出をしてみた!)にまとめました。こんな感じで顔部分だけの画像にできました。うまく顔検出できなかった画像もあり、結果として、各メンバーに付き、600枚ほどの顔画像となりました。画像の水増し学習用の画像は、各メンバーに付き1000枚はほしいと思っていたので、600枚では足りません。画像の左右反転をして水増しを行いました。print(num)水増しをした結果、以下の画像数を得ました。1000枚を超えたのでOKとしましょう。水増しについては、こちらのサイト(参考サイト:機械学習のデータセット画像枚数を増やす方法)が参考になりそうです。今度水増しするときはこのサイトの方法を参考にしてみようかと思います。学習モデル作成では、嵐のメンバー5人の5分類のモデルを作成します。VGG16モデルを使って転移学習します。VGG以降のモデルは256層の全結合モデルと結合します。modelの16層目までをVGGモデルとします。Flaskのアプリで使うため、モデルの保存もします。ColaboratoryのGPU環境で行いました。Notebookをベースとした、Googleの仮想マシン上で動くPython実行環境です。無料で、Googleアカウントさえあれば、すぐにコードを実行することができます。Driveに保存して、Driveをマウントして読み込みます。Colaboratoryを使用には、これらサイトを参考にしました。ColaboratoryのGPU環境は、めっちゃはやいです!学習には絶対使うべきだと思います。ls='-')plt.ylabel('accuracy')plt.xlabel('epoch')plt.legend(loc='best')plt.show()学習結果こちらが、トレインデータ(acc)の正解率、テストデータ(val_acc)の正解率の学習経過です。epochは50です。正解率は以下値くらいに収束しています。:0.99テストデータ(val_acc)の正解率:0.92今回は、アプリ作成までの一連の流れを完成させることが目的だったため、テストデータの正解率が80%を越えればOKくらいの気持ちでした。テストデータ(val_acc)の正解率:0.92は思ったり良い値でした。正解率を高くするには、トレインデータをより多くしてモデルをより汎化するべきかと思います。画像の水増しをもう少ししてみるといいでしょう。VGG以外の転移学習も試してみるとか。〜げ後日、分類に失敗した画像についてなぜ失敗したのかを考えてみました。こちらの記事(【Aidemy成果物】画像分類モデルの分類失敗の原因とは?)で紹介しています。Flaskでアプリ作成では、学習結果を使って、Flaskでアプリという形にしていきます。以下のようなディレクトリ構造でファイルを用意します。arashi_flask.pyhaarcascade_frontalface_alt.xml(カスケードファイル)model.h5(保存した学習モデル)フォルダ:staticstylesheet.cssフォルダ:templatesindex.htmlまず、arashi_flask.pyのコードは以下。アップロードした画像を顔部分画像にして、学習済みモデルを適用しています。"顔を検出できませんでした。他の画像を送信してください。"顔を検出できませんでした。他の画像を送信してください。"__main__":app.run()index.htmlは以下。–></body></html>stylesheet.cssは以下。*/見た目はこんな感じです。デザインなど改良の余地はめちゃくちゃありますが、とりあえず、今回は最低限のレベルということでOKとします。〜げ後日、デザインを修正しました。アプリへアプリを使ってみる嵐メンバーでは、アプリを使ってみましょう。『ファイル選択』から画像を選択して、『submit』します。似です」と表示されます。model.predictの結果は、以下。1.0000000e+00]本人なので、大野君の値が1となっていて圧倒的に大野君になっています。顔検出が出来なかった場合、以下のように表示されます。次に、嵐のメンバーに似ていると言われている芸能人で試してみます。こちらのサイト(【嵐】似ている芸能人のまとめ【ももクロZ】)を参考にしました。これら芸能人画像をアプリに適用した結果は以下。0.31310448]全体的には、似ていると言われる芸能人とアプリの結果はあまり一致しませんでした。相葉君に似ていると言われる酒井学と城みちるは、アプリの結果と一致します。mode.predictの結果もほぼ1という結果でした。相葉君って、嵐のメンバーの中では少し特徴的な顔立ちなので、認識しやすいのかなと思います。〜げちなみに、私の顔は、大野智似でした。最後に、未経験の私がどのような道のりで、このアプリを完成させたかを簡単に紹介しときます。機械学習などのカリキュラムを68時間ほど受講した後に、画像認識アプリの製作に取り掛かりました。アプリ製作にかかった時間は、47.5時間です。