Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[第4回 Data-Centric AI勉強会] Benetechコンペ エラー分析によるデー...
Search
YumeNeko
November 07, 2023
0
420
[第4回 Data-Centric AI勉強会] Benetechコンペ エラー分析によるデータ追加とアノテーションの工夫について
第4回 Data-Centric AI勉強会でのLT資料です。
YumeNeko
November 07, 2023
Tweet
Share
More Decks by YumeNeko
See All by YumeNeko
第2回関東kaggler会 LT コンペ振り返りのすすめ
yumeneko
2
1.8k
Benetechコンペ参戦記
yumeneko
1
2.9k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
88
5.7k
The Cost Of JavaScript in 2023
addyosmani
46
7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
910
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Statistics for Hackers
jakevdp
796
220k
Producing Creativity
orderedlist
PRO
342
39k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Visualization
eitanlees
146
15k
GitHub's CSS Performance
jonrohan
1031
460k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Transcript
Benetechコンペ参戦記 エラー分析によるデータ追加とアノテーションの工夫について 2023/11/8 第4回 Data-Centric AI勉強会 –コンペLT大会- @ゆめねこ
自己紹介 名前:ゆめねこ(@yume_neko92) 仕事:主に画像系のAIシステム開発 kaggle:kaggle歴は2年弱くらい Competitions Master ← HNの由来の親戚家のネコ
自己紹介 名前:ゆめねこ(@yume_neko92) 仕事:主に画像系のAIシステム開発 kaggle:kaggle歴は2年弱くらい Competitions Master ← HNの由来の親戚家のネコ 今日はこのコンペの話をします
コンペ概要:タスク • グラフ画像から、チャートタイプとデータ系列を予測するタスク • ざっくり言うと、グラフ版OCR • グラフ画像を入力、グラフの種類とX,Yのデータ値を出力 3
コンペ概要:データ • コンペデータとして約60000枚の画像が提供 • 実際の論文から抽出された抽出画像は約1000枚 • 残りの59000枚は人工的に作成した生成画像 • テストデータはすべて抽出画像で構成される •
Publicは学習データと同じデータソースから収集された抽出画像 • Privateは学習データとは異なるデータソースから収集された抽出画像 • ロバスト性を保ちながら精度を上げる必要がある 4 抽出画像例 生成画像例
今日の話 5 • 今回はコンペ後半にやっていたデータ追加とアノテーションの話をします [Public LBの推移] ベースライン作成 初期改善案検討 モデル変更による スコア改善
エラー解析による スコア改善 学習ログ解析による スコア改善 4/15 5/4 5/28 6/14 6/19 この辺でやってたことに関する話
エラー解析による改善案検討 • アイデアが枯渇してきたので再度スコアが低いサンプルを実際に見てみる • スコアが低いサンプルの傾向は大きく2パターンあることを確認 6 ① 抽出画像特有の特徴を持っている ・コンペで提供されている生成画像は 質があまり良くない(かなりシンプル)
・実際の抽出画像はもっと複雑な特徴を持っている ② Scatter ・予測とGTの点の個数が一致しない (一致しない時点でスコアが0になる) ・単純に点の数が多い ・明らかなノイズに引っ張られる 予測対象外のラベル エラーバーがある ノイズや凡例を誤認識
エラー解析による改善案検討 • 生成画像が抽出画像の特長を十分捉えられていないことが問題と予想 • 抽出画像に近いデータを増やす方法を検討 • より抽出画像に近い合成データを自作 • 外部データセットの未アノテーションデータを活用 •
これらのデータを追加して学習することでスコア向上(lb: 0.73 → 0.78) 7 ① 抽出画像特有の特徴を持っている
Tips1: 疑似ラベルを用いた半自動アノテーション 8 一般的な疑似ラベルアノテーション モデルの推論結果をアノテーションとして使用する X = ['18-24', '25-34’, ‘35-44’]
Y = [2.7, 1.5, 0.8 ] 未アノテーションサンプル アノテーション済データ で学習したモデル 推論結果 推論結果をアノテーションとする
Tips1: 疑似ラベルを用いた半自動アノテーション 9 一般的な疑似ラベルアノテーション モデルの推論結果をアノテーションとして使用する X = ['18-24', '25-34’, ‘35-44’]
Y = [2.7, 1.5, 0.8 ] 未アノテーションサンプル アノテーション済データ で学習したモデル 推論結果 推論結果をアノテーションとする 推論結果が間違えている可能性も当然ある → モデルの性能がそこそこ良いことが前提 多少のミスは無視される
Tips1: 疑似ラベルを用いた半自動アノテーション 10 一般的な疑似ラベルアノテーション モデルの推論結果をアノテーションとして使用する X = ['18-24', '25-34’, ‘35-44’]
Y = [2.7, 1.5, 0.8 ] 未アノテーションサンプル アノテーション済データ で学習したモデル 推論結果 推論結果をアノテーションとする 推論結果が間違えている可能性も当然ある → モデルの性能がそこそこ良いことが前提 多少のミスは無視される スコアが低い(=モデルが苦手)なサンプルを 重点的に追加してるのに、モデルの推論結果を そのまま信用して良いの?
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値 モデルが間違いやすい部分は人間が手動でアノテーション 最終結果をアノテーションとする
まとめ • データを適切に増やすことで大きく性能改善する(こともある) • 闇雲に増やすのではなく、苦手なデータ・足りないデータを見極めて追加することが大事 • 正確にアノテーションすることが大前提 • どれだけデータを増やしてもアノテーションが悪いと効果が薄くなる •
validationもアノテーションが悪いと正しく評価ができなくなる • 限られたリソースの中でアノテーションをするための工夫も大事 • 気合と根性でどうにかなる枚数には限界がある (そもそも無理すると効率は下がるし、ミスが目立ってアノテーションの質が下がる) 12
13 Appendix(もし時間があれば)
エラー解析による改善案検討 • Scatterは軸ラベルが数値であることがデータルールで保証されている • 以下の3つを認識できれば簡単な数式で解ける 1. scatter点の位置 2. X軸、Y軸の最大・最小ラベルの位置 3.
X軸、Y軸の最大・最小ラベルのテキスト 14 ② Scatter
エラー解析による改善案検討 • 位置予測は物体検出モデルを使用すれば実現可能 • ラベル位置検出は公開Notebookモデルがあったのでそのまま利用 • Scatter点検出は公開モデルが無かったので自前で準備 • 当然アノテーションも無いので自分でラベリングする 15
② Scatter ・コンペデータとICDARデータはひたすら Labelmeで手動アノテーション ・500枚くらいを気合で頑張る ・生成データは点、ラベルを色付けした画像を同時に出力 画像処理で半自動でラベリング ・それでも点の被りとかは間違うので怪しいデータは 目視チェック&手動修正 ・10000枚くらいを根性で頑張る
Tips2: 色分け画像を用いた半自動アノテーション 16 最初の構想(理想) 簡単な画像処理で 赤色領域を検出して外接矩形を求める アノテーションとする 生成画像 生成画像と対応する色分け画像 ・背景が白
・Scatter点が赤ぬりつぶし
Tips2: 色分け画像を用いた半自動アノテーション 17 生成画像 生成画像と対応する色分け画像 ・背景が白 ・Scatter点が赤ぬりつぶし 点が重なっているときに分離できずアノテーションを間違う → 人間がダブルチェックする必要がある
枚数が多くてしんどい 点の数が多いと普通に見落とす どうにかもう一工夫して人間の負担を 軽減できないだろうか? 最初の構想(現実)
Tips2: 色分け画像を用いた半自動アノテーション 18 生成画像 生成画像と対応する色分け画像 ・背景が白 ・Scatter点が赤ぬりつぶし 外接矩形の面積の中央値を計算して 妥当なサイズ、大きすぎる(点被りの疑いあり)のサイズで 別なクラスを暫定的に割り当てる
Labelmeで 手動修正 クラスごとに色が変わるので 怪しい部分が一目で分かる! アノテーションとする 今回採用したアノテーション