GUITAR AI / HARD CASES / COMPUTER VISION
AIが失敗する場面ばかり集めて学習させたら、かなり改善した
モデルを変える前に、モデルが何を間違えているのかを集め直した。

ギターを切り抜くAIを作り始めたころ、精度が足りなければ、もっと良いモデルを試せばいいと思っていました。
実際、モデル側でもいろいろ試しています。でも実際の演奏映像を見続けていると、別のことが気になってきました。
失敗する場面が、毎回だいたい同じなのでは?
手がネックに重なる。腕がボディの前を通る。長袖とギターが接触する。背景や人だけのフレームをギターだと誤認する。 きれいに写っているギターではなく、境界が曖昧になる場面で繰り返し崩れていました。
そこで今回は、平均的な画像をさらに増やすのではなく、AIが苦手な条件そのものを集めて学習データへ追加することにしました。
最初のReal Dataは633枚だった
実写の演奏環境から作った最初の学習データは633枚でした。 自分のギターを実際に持った状態を学習できるので、Synthetic Dataだけより現実の条件に近づけます。
ただし、633枚の中にすべての難しい条件が十分入っているわけではありません。 普通に写っているフレームが多ければ、モデルは普通の場面では上手くなります。 それでも、実際に使いたい動画の中で数秒おきに現れる難しい境界が弱いまま残ります。
ここで重要なのは、単に633枚を1,868枚へ増やしたことではありません。追加した1,235枚を、これまで失敗していた条件に寄せたことです。
「難しい画像」を先に決めるのではなく、失敗から探した
Hard Caseと言っても、「暗い画像」「ぼけた画像」のような一般的な難易度だけを決めて集めたわけではありません。 実際の推論結果を見て、モデルが崩れる条件を拾っていきました。
指や手のひらがネックへ重なり、ギター境界が途中で消える。
腕がボディ前面を横切り、肌とギターの境界が近づく。
長袖とギターが接触し、色や形だけでは分離しにくくなる。
人だけ・背景だけの場面でFalse Positiveが出る条件も確認する。
このやり方だと、Datasetを作る基準が「いろいろな写真を集める」から、「現在のモデルが間違える分布を埋める」へ変わります。
1枚ずつMaskをゼロから塗るのは重い
実写データを増やすには、画像だけでなく正解Maskも必要です。 1,000枚以上を毎回ゼロから手で塗るのは、個人開発ではかなり重い作業になります。
そこで、Mask作成にはSAM3を補助として使いました。 SAM3に候補Maskを作らせ、その結果を人が確認し、必要なところを修正してGround Truthにします。

この方法で追加したHard-case画像は全体で1,918枚です。 そのうち1,235枚を学習用へ入れ、683枚をHard-case validationとして分けました。
Real633へ追加し、Real1868を作る。
学習には入れず、難しい条件での比較に使う。
Real 633 → 1,868で、Hard Case性能が大きく変わった
同じHard Val 683枚で比較すると、Real633で学習した条件と、Hard Caseを加えたReal1868ではかなり差が出ました。

IoUだけでなくBF1@2も大きく上がっているので、 ギター領域を大まかに見つけるだけでなく、難しい条件での境界も改善しています。
この結果だけから「Hard Exampleを増やせばどんなSegmentationでも必ず改善する」とは言えません。 また、追加した各条件のうちどれが何ポイント効いたのかも、この比較だけでは分かりません。
ただ、今回のGuitar AIでは、現在の失敗条件を観察し、その条件を狙ってDatasetへ戻すというループがかなり有効でした。
モデルを複雑にする前に、Datasetを疑う価値があった
AI開発をしていると、精度が伸びないときに新しいArchitectureやLossへ目が向きます。 もちろんモデル側の改善も必要です。
でも今回のように、失敗が特定の条件へ偏っているなら、 その条件が学習データに十分存在しているかを見る方が先かもしれません。
Datasetを一度作って固定するのではなく、モデルの失敗を次のデータ収集指示に使うという考え方に変わったのが、今回いちばん大きな変化でした。
それでも、長袖はまだ難しい
Hard Caseを増やしても、すべて解決したわけではありません。 現在も特に難しいのが、長袖、腕、手、ギターが密着する境界です。

ここは今後も、失敗条件を分けながらReal Dataを追加していく必要があります。
次は、RealとSyntheticを混ぜる
第二号ではSynthetic Dataを5,000枚作り、今回はReal DataのHard Caseを増やしました。 次に試したのは、この2つをどう組み合わせるかです。
Real1868へSynthetic positive 623枚を追加した条件をSYN25と呼んでいます。 Hard Val 683では、さらにIoU 0.6249、BF1@2 0.6127まで伸びました。
ただし、Syntheticを大量に入れればいいわけではありません。 RealとSyntheticをどういう比率・役割で混ぜるかは別の問題でした。