ゲレの工房

ゲーム好きの中の人が、自分が作りたいアプリを作る記録です

FF14雑記:言語を超える力に合わせて、TensorFlowの学習データをdata augmentationで増やす話

今回の記事もほぼ備忘録です。
前回の記事はこちら

blog.gelehrte.com

簡単に言うと、「Object Detection API」の物体検知を使って、FF14というゲームのスクリーンショットからゲーム特有の文字エオルゼア文字を英数字にクラス分けしたいという話です。

今回の参考記事

2つあります。

【Tensorflow2】Object DetectionでDeep写輪眼

qiita.com

こちらの記事はdata augmentationを使って実際にノイズを増やした学習データを入れた話です。どういうノイズを入れるか。入れたときにどういう挙動を示すか。どういう挙動を示したら怪しいかなどの参考になりました。

Tensorflow/modelsのdata augmentationの動きを確認する

blog.imind.jp

こちらの記事はTensorFlowでノイズを入れた学習データが、実際にどのような画像が生成されるかの説明が画像でされていました。とても参考になり、こういうオプションがあるんだなと勉強になりました。

「efficientdet_d0_coco17_tpu-32.config」の編集

前回に引き続き、こちらの記事で紹介してある「Object Detection Tools」を用い、その中のコンフィグファイルを編集しました。
qiita.com

このあたりを編集

元々「efficientdet_d0_coco17_tpu-32.config」には以下の記述が書いてありました。

  data_augmentation_options {
    random_horizontal_flip {
    }
  }
  data_augmentation_options {
    random_scale_crop_and_pad_to_square {
      output_size: 512
      scale_min: 0.10000000149011612
      scale_max: 2.0
    }
  }


この部分を修正。私の「言語を超える力」では上下左右反転すると文字の意味が変わるので「random_horizontal_flip」は削除。それ以外でも、「random_distort_color」「random_black_patches」は学習が発散したので除外。「random_absolute_pad_image」は今回の文字判定には即していないので入れませんでした。ということで以下のように編集しました。

  data_augmentation_options {
    random_rgb_to_gray {
    }
  }
  data_augmentation_options {
    random_adjust_brightness {
    }
  }
  data_augmentation_options {
    random_adjust_contrast {
    }
  }
  data_augmentation_options {
    random_adjust_hue {
    }
  }
  data_augmentation_options {
    random_adjust_saturation {
    }
  }
  data_augmentation_options {
    random_jitter_boxes {
    }
  }
  data_augmentation_options {
    random_scale_crop_and_pad_to_square {
      output_size: 512
      scale_min: 0.10000000149011612
      scale_max: 2.0
    }
  }

多分細かい設定をもう少し加えた方が良いのかと思いますが、まだ不勉強な部分もあるのでデフォルト値を採用しています。

結果

入力

こちらの画像が

編集前

こちらぐらいまでしか判定できなかったのが

編集後

これぐらい判定できるようになりました!

実際にはまだ誤りがあり、学習データの偏りもあり、まだまだ判定が怪しいですがかなり精度が上がってきました。

終わりに

ほぼ日々勉強及びテストです。こういう知識をたくさん増やし、試してみたいですね。


広告