GUITAR AI / SYNTHETIC DATA / COMPUTER VISION
Synthetic Dataを25%だけ混ぜたら、実写のギター切り抜きがさらに良くなった
Syntheticだけでは足りなかった。でも、Realが強くなった後なら補助データとして効くかもしれない。

第二号では、自分のギターからSynthetic Dataを5,000枚作りました。 でも、Syntheticだけで実際の演奏映像を完全にカバーするのは難しかった。
手がネックに重なる。腕がボディを横切る。袖がギターへ触れる。 こうした実写特有の条件は、背景合成だけでは十分に再現できません。
そこで第三号では、モデルが失敗するHard Caseを狙ってReal Dataを追加し、633枚から1,868枚まで増やしました。
Realが十分に強くなった状態なら、Syntheticは「代わり」ではなく「補助」として使えるのでは?
今回は、その考えを試した条件SYN25についてまとめます。
5,000枚全部は入れなかった
手元にはSynthetic Datasetが5,000枚あります。 ただし今回のSYN25では、その全量を学習へ追加したわけではありません。
基準となるReal Dataは1,868枚。 そこへSyntheticのPositive Sampleを623枚だけ追加しました。
623 ÷ 2,491 ≈ 25.0%なので、学習データ全体の約25%がSyntheticになる条件です。 そのため、この条件をSYN25と呼んでいます。
RealとSyntheticに、同じ役割を期待しない
この構成では、RealとSyntheticを同じ種類のデータとして考えていません。 設計上は、役割を少し分けて考えています。
手、腕、袖、ギターとの接触境界など、実際の演奏で起こる複雑な条件を持つ。
背景、位置、角度、姿勢、スケールなどを増やしやすい。
SyntheticだけでRealを置き換えるのではなく、Realで実写の難しさを押さえた上で、Syntheticでギター側の変化を補うという考え方です。

Hard Valでは、さらに伸びた
まず、第三号と同じHard-case validation 683枚で比較します。
Real1868だけでも、Real633と比べればかなり改善していました。 そこへSyntheticを補助的に加えたSYN25では、Hard ValのIoUと境界指標BF1@2がさらに上がりました。
少なくとも今回の条件では、Hard Caseを集めたReal DataとSynthetic Dataは競合せず、追加した条件でさらに性能が伸びました。
難しいデータだけでなく、実際の演奏でも確認する
Hard Valだけで良くても、最終的に使いたい演奏映像で悪化してしまえば意味がありません。 そこで、正式なFinal Playing corrected180でもReal-onlyとSYN25を比較しました。

IoU、Dice、Recall、BF1@2はいずれも改善しました。 一方でPrecisionは0.8959 → 0.8960とほぼ変わっていません。
少なくともこのcorrected180では、False Positiveを大きく増やさず、取りこぼしを減らした方向の改善が見えます。 Recallが0.8677から0.9219へ上がったことが、その傾向をよく表しています。
「Syntheticは駄目」ではなく、使う順番の問題だった
Synthetic Dataを最初に作ったときは、実写とのDomain Gapがかなり気になりました。 人がギターを持つ、手が重なる、服が触れる、といった条件は背景合成だけでは足りません。
そのため、Syntheticを増やせばそれだけで実演奏が解ける、という見方はしなくなりました。
今回うまくいったのは、まずReal側で実写特有の問題を学習させ、その後にSyntheticを補助として混ぜた構成です。
これは「Synthetic Dataを作った5,000枚が無駄ではなかった」という意味でもありました。 最初の主役にはなれなくても、Real Dataが整った後に別の役割で使える可能性があります。
まだ残っている失敗はある
SYN25でもすべてのフレームを完全に切り抜けるわけではありません。 長袖、手、腕、ギターが密着する境界は引き続き難しい条件です。

ここから先は、さらにReal Dataを増やすのか、モデル側を変えるのか、 あるいは両方をどう組み合わせるかを切り分けていく必要があります。
ここまでで、Datasetの作り方が一周した
最初は「データが足りないからSyntheticを大量に作る」から始まりました。 その後、実写で失敗し、Hard Caseを集め、最後にSyntheticを補助として戻しました。
Datasetは、一度作って終わるものではありませんでした。 実際の失敗を見ながら、RealとSyntheticの役割を変えていく。 今回の一連の実験で、そこがかなりはっきりしました。