第7回:自作データで機械学習の予測モデル自作!! (1)全体の流れ

しょくぶつ(^ ^)です。

第2回 : キャプチャー画像を機械学習で判別、声でお知らせ
とか、
第6回:androidスマホで機械学習を使おう! (4) 機械学習予測モデルの実行
とかの機械学習予測モデル、お使いになっていかがでしょうか?
思いのほか正しくブキを言い当てていると思っています。
人の目だと見逃しがちな、チャージャー系とスコープ系の違いも、きっちり見分けています。
ただ、公開当初はミス判定が多かったんですよ。
   スパッタリー を デュアルスイーパー とミス判定
   シャープマーカー を プライムシューター とミス判定
   スペシャル発動前で光っていると、でたらめ判定
でも
①学習データを増やす (’24/6月時点では10倍)
②CNN(畳み込みニューラルネットワーク)のパラメーターを最適化
したんで、もうミス判定はありません。
そう、たったこれだけです。
難しい画像処理やアルゴリズムの改良はしていません。
「もっともっと精度を上げたい」
「他のゲームでも使いたい」
「我が社の仕事でも応用できそうじゃ」
「とにかくいろいろやってみたい」
とかで①②の方法もっと詳しく知りたい!! って思いますよね?
・・・
・・・
えっ!?
・・・
そうかー、知りたくなりましたね !! ならば、よし !!

Python未経験でもちゃんと理解できるように書いてみますんで、本ブログに興味を持たれた方は是非お付き合いください !

ただし、このような記事はずっとずっと分かり易いものがネット上にいくらでも公開されています。
たとえば・・・
【初心者】ネコでも分かる「簡単な分類AI」の作り方【Python】 (zenn.dev)
そちらもぜひご参考ください。
詳しいこと、難しいこと、それは よそ様にお任せ して、こちらはできるだけ気楽に進めたいと思います。

さてさて、前置きが長くなりました。

Pythonコードは次回からとして、まずは全体の流れのお話しです。

まずは、イメージの図だけ示します。
今は、この図のように、
ブキの画像を入力したら、
予測モデルを通って、
ブキの名前が出力される
ということだけ理解できれば十分です。
300x137

このモデルの中はかなり複雑で、一部を切り出したのが下の図です。
いまは、すごい数のパラメーターの設定が必要ということが分かれば十分です。

300x142

[1]畳み込みニューラルネットワークの代表的なモデル - KIKAGAKU
[2] kerasのConv2D(2次元畳み込み層)について調べてみた #Python - Qiita
[3] https://ni4muraano.hatenablog.com/entry/2017/02/02/195505

この膨大な数のパラメーターを設定する、つまり、予測モデルを作るのはどうやったらよいのでしょうか?
それには「学習データの用意」と「モデルの訓練」が必要です。

  • 学習データの用意

    • 画像の収集
      ブキ1種類あたり5枚は欲しいです (100種類だったら100[種類]×5[枚/種類]=500枚) 。
      そうしないと精度低いです。
      キャプチャー画像から切り出して集めます。
      Pythonを使って楽に進めましょう。
      (図  画像を集めた例 を掲載予定)

    • 収集した画像を分類
      収集した画像を分類の分類ですが、ブキは現在143種類あるので、これも大変です。
      フォルダを143個も作るだけでも大変ですし、しかもパッと見ただけで正確に分類できるでしょうか?
      これもPythonを使うとすこし楽です。
      (図  フォルダ一覧 を掲載予定)

    • データの水増し (データ拡張, Data Augmentationとも呼びます。)
      これは、用意した画像を使って、少しだけ拡大縮小・上下左右移動した画像も作成することです。
      目的は、学習画像の数を増やすことと、 過学習(※)を抑えることです。
      これもPythonで行います。

      • ※ “過学習”
        例えば、画像のある部分の1ピクセルだけに注目して「赤」「青」だけで機械学習が画像を分類しちゃうとか、そんなことです。
        でも、たまたま、集めた学習データがそんな画像だけだった、ということもありますよね?
        そんな “過学習” が起きてしまうと、注目した1ピクセルにノイズが入ったら、すぐ予測ミスするといったトラブルに弱い予測モデルとなってしまいます。
         
    • ブキとスペシャルの対応表の作成
       これは手作業で作成するのですが、このブログ紹介済みの表を使えばOKです。

  • モデルの訓練

    • 予測モデルを作成
      CNN(畳み込みニューラルネットワーク)を使って学習し、予測モデルを作成します。
      Pythonでコードを作るのはちょっと大変なのですが、頑張りましょう。
      また、コードを実行して学習させるのにも時間がかかります。
      ハイパーパラメーターの値を大いと1日かかってしまいますが、古いノートPCでもなんとかなります。
      が !
      GPUがあるPCだと「GPUコンピューティング」で数十倍速く学習できます。

    • CNN(畳み込みニューラルネットワーク)のパラメーターを最適化
      上記の予測モデルの作成に際、私は最初はよそ様のモデルを見よう見まねでパラメーターを与えていました。
      でもそうではなく、ちゃんと最適化して決める方法があります。
      そうすると性能も上がります。
      必須の作業ではありませんが、「どうやってこのパラメーター決めたんだろ」という疑問を解消したいですよね。
      ちゃんと方法を知っていれば、見よう見まねのためにネットを探しまくるより早いですよ。
      意外とネットを見ても、このあたりの記述はぼやかしている記事ばかりなので、ここは必見ですよ。
      本ブログの記事: Optunaのハイパーパラメーターチューニングが途中エラーで止まる問題

特に最後の方で、みなさんの興味をそそる、いまをときめくキーワード、

  • 機械学習
  • Python
  • CNN(畳み込みニューラルネットワーク)

がそろって出てきましたね。
この流れをマスターすれば、ちょっとした業界人ですよ~

プロフィール
この記事を書いた人
しょくぶつ (^ ^)

機械系の技術者です。学会発表13、論文掲載6(和・英)。プログラミング歴40年(つまり8bit世代ですね)。ゲーム歴40年(ファミコン世代ですね)。
お問い合わせは下記のメールアドレスにお寄せください。
plantsmilehatena@gmail.com

しょくぶつ (^ ^)をフォローする
pythonスプラトゥーン3
しょくぶつ (^ ^)をフォローする
タイトルとURLをコピーしました