Slide 1

Slide 1 text

Benetechコンペ参戦記 エラー分析によるデータ追加とアノテーションの工夫について 2023/11/8 第4回 Data-Centric AI勉強会 –コンペLT大会- @ゆめねこ

Slide 2

Slide 2 text

自己紹介 名前:ゆめねこ(@yume_neko92) 仕事:主に画像系のAIシステム開発 kaggle:kaggle歴は2年弱くらい Competitions Master ← HNの由来の親戚家のネコ

Slide 3

Slide 3 text

自己紹介 名前:ゆめねこ(@yume_neko92) 仕事:主に画像系のAIシステム開発 kaggle:kaggle歴は2年弱くらい Competitions Master ← HNの由来の親戚家のネコ 今日はこのコンペの話をします

Slide 4

Slide 4 text

コンペ概要:タスク • グラフ画像から、チャートタイプとデータ系列を予測するタスク • ざっくり言うと、グラフ版OCR • グラフ画像を入力、グラフの種類とX,Yのデータ値を出力 3

Slide 5

Slide 5 text

コンペ概要:データ • コンペデータとして約60000枚の画像が提供 • 実際の論文から抽出された抽出画像は約1000枚 • 残りの59000枚は人工的に作成した生成画像 • テストデータはすべて抽出画像で構成される • Publicは学習データと同じデータソースから収集された抽出画像 • Privateは学習データとは異なるデータソースから収集された抽出画像 • ロバスト性を保ちながら精度を上げる必要がある 4 抽出画像例 生成画像例

Slide 6

Slide 6 text

今日の話 5 • 今回はコンペ後半にやっていたデータ追加とアノテーションの話をします [Public LBの推移] ベースライン作成 初期改善案検討 モデル変更による スコア改善 エラー解析による スコア改善 学習ログ解析による スコア改善 4/15 5/4 5/28 6/14 6/19 この辺でやってたことに関する話

Slide 7

Slide 7 text

エラー解析による改善案検討 • アイデアが枯渇してきたので再度スコアが低いサンプルを実際に見てみる • スコアが低いサンプルの傾向は大きく2パターンあることを確認 6 ① 抽出画像特有の特徴を持っている ・コンペで提供されている生成画像は 質があまり良くない(かなりシンプル) ・実際の抽出画像はもっと複雑な特徴を持っている ② Scatter ・予測とGTの点の個数が一致しない (一致しない時点でスコアが0になる) ・単純に点の数が多い ・明らかなノイズに引っ張られる 予測対象外のラベル エラーバーがある ノイズや凡例を誤認識

Slide 8

Slide 8 text

エラー解析による改善案検討 • 生成画像が抽出画像の特長を十分捉えられていないことが問題と予想 • 抽出画像に近いデータを増やす方法を検討 • より抽出画像に近い合成データを自作 • 外部データセットの未アノテーションデータを活用 • これらのデータを追加して学習することでスコア向上(lb: 0.73 → 0.78) 7 ① 抽出画像特有の特徴を持っている

Slide 9

Slide 9 text

Tips1: 疑似ラベルを用いた半自動アノテーション 8 一般的な疑似ラベルアノテーション モデルの推論結果をアノテーションとして使用する X = ['18-24', '25-34’, ‘35-44’] Y = [2.7, 1.5, 0.8 ] 未アノテーションサンプル アノテーション済データ で学習したモデル 推論結果 推論結果をアノテーションとする

Slide 10

Slide 10 text

Tips1: 疑似ラベルを用いた半自動アノテーション 9 一般的な疑似ラベルアノテーション モデルの推論結果をアノテーションとして使用する X = ['18-24', '25-34’, ‘35-44’] Y = [2.7, 1.5, 0.8 ] 未アノテーションサンプル アノテーション済データ で学習したモデル 推論結果 推論結果をアノテーションとする 推論結果が間違えている可能性も当然ある → モデルの性能がそこそこ良いことが前提 多少のミスは無視される

Slide 11

Slide 11 text

Tips1: 疑似ラベルを用いた半自動アノテーション 10 一般的な疑似ラベルアノテーション モデルの推論結果をアノテーションとして使用する X = ['18-24', '25-34’, ‘35-44’] Y = [2.7, 1.5, 0.8 ] 未アノテーションサンプル アノテーション済データ で学習したモデル 推論結果 推論結果をアノテーションとする 推論結果が間違えている可能性も当然ある → モデルの性能がそこそこ良いことが前提 多少のミスは無視される スコアが低い(=モデルが苦手)なサンプルを 重点的に追加してるのに、モデルの推論結果を そのまま信用して良いの?

Slide 12

Slide 12 text

Tips1: 疑似ラベルを用いた半自動アノテーション 11 今回採用した疑似ラベルアノテーション 信頼できる部分だけモデルの予測を使用して、間違いやすい部分は人間がラベリング X = ['18-24', '25-34’, ‘35-44’] X = ['18-24', '25-34', '35-44’] Y = [2.2, 1.3, 0.8 ] モデルの推論結果 モデルが高精度で予測できる部分は そのまま使う Ex) VerticalBarのX値 モデルが間違いやすい部分は人間が手動でアノテーション 最終結果をアノテーションとする

Slide 13

Slide 13 text

まとめ • データを適切に増やすことで大きく性能改善する(こともある) • 闇雲に増やすのではなく、苦手なデータ・足りないデータを見極めて追加することが大事 • 正確にアノテーションすることが大前提 • どれだけデータを増やしてもアノテーションが悪いと効果が薄くなる • validationもアノテーションが悪いと正しく評価ができなくなる • 限られたリソースの中でアノテーションをするための工夫も大事 • 気合と根性でどうにかなる枚数には限界がある (そもそも無理すると効率は下がるし、ミスが目立ってアノテーションの質が下がる) 12

Slide 14

Slide 14 text

13 Appendix(もし時間があれば)

Slide 15

Slide 15 text

エラー解析による改善案検討 • Scatterは軸ラベルが数値であることがデータルールで保証されている • 以下の3つを認識できれば簡単な数式で解ける 1. scatter点の位置 2. X軸、Y軸の最大・最小ラベルの位置 3. X軸、Y軸の最大・最小ラベルのテキスト 14 ② Scatter

Slide 16

Slide 16 text

エラー解析による改善案検討 • 位置予測は物体検出モデルを使用すれば実現可能 • ラベル位置検出は公開Notebookモデルがあったのでそのまま利用 • Scatter点検出は公開モデルが無かったので自前で準備 • 当然アノテーションも無いので自分でラベリングする 15 ② Scatter ・コンペデータとICDARデータはひたすら Labelmeで手動アノテーション ・500枚くらいを気合で頑張る ・生成データは点、ラベルを色付けした画像を同時に出力 画像処理で半自動でラベリング ・それでも点の被りとかは間違うので怪しいデータは 目視チェック&手動修正 ・10000枚くらいを根性で頑張る

Slide 17

Slide 17 text

Tips2: 色分け画像を用いた半自動アノテーション 16 最初の構想(理想) 簡単な画像処理で 赤色領域を検出して外接矩形を求める アノテーションとする 生成画像 生成画像と対応する色分け画像 ・背景が白 ・Scatter点が赤ぬりつぶし

Slide 18

Slide 18 text

Tips2: 色分け画像を用いた半自動アノテーション 17 生成画像 生成画像と対応する色分け画像 ・背景が白 ・Scatter点が赤ぬりつぶし 点が重なっているときに分離できずアノテーションを間違う → 人間がダブルチェックする必要がある 枚数が多くてしんどい 点の数が多いと普通に見落とす どうにかもう一工夫して人間の負担を 軽減できないだろうか? 最初の構想(現実)

Slide 19

Slide 19 text

Tips2: 色分け画像を用いた半自動アノテーション 18 生成画像 生成画像と対応する色分け画像 ・背景が白 ・Scatter点が赤ぬりつぶし 外接矩形の面積の中央値を計算して 妥当なサイズ、大きすぎる(点被りの疑いあり)のサイズで 別なクラスを暫定的に割り当てる Labelmeで 手動修正 クラスごとに色が変わるので 怪しい部分が一目で分かる! アノテーションとする 今回採用したアノテーション