#1. 前回のおさらい
__機械学習__を進める上で、必要不可欠なの学習データをCGの技術を使って効率よく構築する方法を研究していこう。前回は、学習データの水増しの技術Data AugumenntにCGの合成技術を使ってみた。基本となる画像学習データから、目的の部分(今回は人のセグメンテーション)をマスクとして抜き出し、背景をインペイントして、新たに別の背景と合成する手法を説明しました。こうすることで、背景と人物の様々な組み合わせの学習データを増やすことができるのである。
今回は、増やした学習データを使ってどれくらいの効果が出ているかを実際にUnetで学習してみて検証してみよう。
+
=
<人物と背景を分離して、それぞれを入れ替えて新しい画像を構築する。>
#2. 概要
機械学習を成功させるには、数多くの学習データが必要になるが、もちろん手作業で構築するには限界があるので、それをCGの手法を使って、簡単に効率化が可能かどうかを検証していきたい。
前回のSynthesized Data Augmentで学習データを拡張したデータを使って、実際に学習して検証してみる。
検証内容は、元の学習データと同数の新たに再合成して作られた学習データとの性能の違いをチェックし、次にSynthesized Data Augmentの真骨頂である更なる学習データの拡張によって、学習結果がどのように変化してみるかを検証したい。
#3. U-netの実装
__U-net__は機械学習のモデルの中でもポピュラーで、実装も比較的楽で結果も良いので、今回のような実験的な検証には向いているといえる。
U-netの詳しい解説は省略しますが、U-netは対になった画像(人物の映った画像とそのマスク画像)の学習データを入力して、画像データから人物のマスク画像を学習することができます。今回の検証では、学習が成功すれば、新しい画像を入力すると、人物が映っているところだけをマスクを生成することができる。
今回U-netは簡単なKerasの実装を使いました。
インプットのイメージサイズは256x256ピクセルです。
まずは元のデータも合成データも同じ1000枚で100エポック学習してみた。
#4. U-netの学習結果の検証
Default Dataset
Precision_average: 0.946
Recall_average: 0.955
Fscore_average: 0.948
IoU_average: 0.905
Sythesized Dataset
Precision_average: 0.969
Recall_average: 0.912
Fscore_average: 0.939
IoU_average: 0.886
Default Dataset & Sythesized Dataset
Precision_average: 0.976
Recall_average: 0.949
Fscore_average: 0.962
IoU_average: 0.927
Default(Defaultのデータセット)、Sythesized(合成した)データセット、MIX(二つをミックスしたデータセット)で検証してみたところ、Precisionは、SythesizedとMIXがDefaultよりも精度が高いことがわかる。かわりにRecallは、Defaultの精度が良かった。総合的にFscoreやIoUを見る限り、MIXが一番良いのがわかる。
推論画像を確認してみる。
Default Dataset
Default Dataset & Sythesized Dataset
画像で比べてみても、若干だがDefaultよりもMIXの方が画像の中のノイズが少なくなっているのがわかると思う。また、Defaultのエッジ付近のピクセルがMIXの方が滑らかになっているように思える。
今回は、同じデータセットであっても、マスクで切り取って合成することで、精度を向上できる可能性があることがわかった。
こちらの論文でも同じようなことが言われています。
https://arxiv.org/abs/2012.07177