Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kaggle Benetechコンペ振り返り

tatematsu
August 03, 2023
580

Kaggle Benetechコンペ振り返り

社内の技術共有会での発表資料です。
Kaggleの"Benetech - Making Graphs Accessible"コンペティションにて、参加したチームが4位でした。
コンペ概要や上位陣の解法、我々の解法などご紹介します。

tatematsu

August 03, 2023
Tweet

Transcript

  1. AI 3 3 3 自己紹介 • 氏名 ◦ 立松 郁也

    • 経歴 ◦ 2017年3月 大学院入学 ▪ ナーススケジューリング問題の研究 ◦ 2019年4月 電機メーカー入社 ▪ 需要予測モデル開発 ▪ 最適在庫の分析 ◦ 2021年3月 GO株式会社入社(旧:株式会社Mobility Technologies) ▪ 次世代AIドラレコサービス『DRIVE CHART』の分析業務 • SNS ◦ twitter : https://twitter.com/monnu0621 ◦ Kaggle : https://www.kaggle.com/fuumin621
  2. AI 7 7 7 コンペ概要| タスク さまざまな種類のグラフ画像から、グラフの種類と値を読み取るタスク • グラフ画像を入力とし、グラフの種類およびx,yの値を出力する •

    グラフの種類は「Scatter」、「VBar」、「HBar」、「Line」、「Dot」の5つ input output https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data
  3. AI 9 9 9 コンペ概要| コンペデータ trainデータは大量の合成画像とわずかな自然画像。一方でtestデータは全て自然画像 data type source

    chart type # of images train generated(合成画像) v, l, d, s ~60000 train extracted(自然画像) v, h, l, s 1118 test extracted(自然画像) ? ~4000 extracted例 generated例 コンペデータ一覧 https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data
  4. AI 10 10 10 コンペ概要| 難しいポイント① 評価指標観点 • データ点の個数に過不足が1つでもあると,その画像はスコア 0

    ◦ 各画像に対しx,yの各点の値を予測するが、点の数は完全一致しか許されない ◦ 画像によっては、値の読み取り以前に、点の個数の予測だけでも困難 ◦ 特にscatterはデータ点の個数が多くなりがちで難しい このscatterは196個の点がある 1つでも過不足するとスコア 0 https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data
  5. AI 11 11 11 コンペ概要| 難しいポイント② データ観点 • lineにて軸上に値がない部分は出力してはいけない •

    「$」、「%」などの記号を数値と間違う • 提供される自然画像データがわずか ◦ 提供データは60,000件程度あるが、うち自然画像は1,000件程度と少ない ◦ 一方、評価データは全て自然画像なので、自然画像で精度上げることが重要 2500は出力してはダメ 「$」などの記号は数 値と間違いやすい https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data
  6. AI 13 13 13 自チームの解法 | サマリ chart typeをefficientnetで分類した後、scatterとそれ以外で異なるロジックを採用 Chart-type

    Classification scatter others Plot-area Detection Scatter point detection Axis min/max label reading End to End plot to text translation efficientnet b0 YOLOX YOLOX MatCha DePlot predictions
  7. AI 14 14 14 自チームの解法 | サマリ データは提供データに加えて外部データ(ICDAR)やmatplotlibによる自作データを利用 no. name

    chart type # of images 1 competition dataset (generated) v, l, d, s ~60000 2 competition dataset (extracted) v, h, l, s 1118 3 ICDAR dataset v, h, l, s ~4700 4 brendanartley's public 500k dataset v, h, l, d, s 500000 5 original synthetic dataset v, h, l 120000 6 original synthetic dataset (histogram) v 10000 v : vertical bar, h : horizontal bar, l : line, d : dot, s : scatter
  8. AI 自チームの解法 | Chart-type classification chart type分類は単純な画像分類モデルを採用。正解率はほぼ100% 15 15 15

    15 Training Model : efficientnet b0 Data : generated + extracted + original (1000 images from each chart-type) Image size : (512, 512) Epochs : 20 Learning rate : 1e-3 Batch size : 16 Validation ICDAR datasets acc : 0.996 Error case lineかscatterかで判別が難しい ケースでわずかに誤検知 label : line pred : scatter https://www.dropbox.com/s/85yfkigo5916xk1/ICPR2022_CHARTINFO_UB_PMC_TRAIN_v1.0.zip?dl=0
  9. AI 自チームの解法 | Bar, Line and Dot plot グラフ画像の読み取りに事前学習されたDePlotというモデルでE2Eに予測 16

    16 16 16 DePlotとは? • googleによるimage to textのtransformerモデル • グラフ画像からのデータ抽出タスクで事前学習されている • finetuneなしでも、画像によってはコンペデータにて高精度に予測可能 finetuneなしでもあ る程度予測可能 https://www.kaggle.com/code/gomaki/deplot-trying-out
  10. AI 自チームの解法 | Bar, Line and Dot plot 17 17

    17 17 Training configuration Model : DePlot epochs: 50 learning rate: 2e-4 scheduler: cosine annealing batch (accumulation): 64 出力形式: x1 | y1<0x0A> x2 | y2<0x0A> x3 | y3</s> Postprocess 数値データになるべき値は文字列を削除する処理 Data selection データソースに応じてepoch毎にダウンサンプル 自然画像はweight高、生成画像はweight低でサンプル グラフ画像の読み取りに事前学習されたDePlotというモデルでE2Eに予測
  11. AI 自チームの解法 | Bar, Line and Dot plot 18 18

    18 追加データパターン ・lineの軸上に値がない画像 ・JPGの圧縮率調整による低画質画像 ・数値と間違いやすい記号 ($ % , .) ・非常に小さい数値 (like < 0.0001) etc.. エラー原因分析の結果をもとに、間違いやすいケースのデータをmatplotlibで生成し改善
  12. AI 自チームの解法 | scatter plot-area detection 19 19 19 scatterはstep1として、まずplot-areaをyoloxによる物体検出で予測

    Model : YOLOX (size x) Image size : (640 x 640) Data : generated + extracted Epochs : 30 19 annotation prediction training https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data
  13. AI 自チームの解法 | scatter point detection 20 20 20 step2として、scatterのplot点を同じくyoloxで物体検出する

    最終的なモデルではplot点が数十ある画像でも過不足なく検出できた 20 Model : YOLOX (size x) Image size : (960 x 960) Epochs : 50 20 training annotation preprocess : cropped by plot-bb box size : 5 x 5 train : generated + 3/4 extracted + ICDAR valid : 1/4 extracted prediction OK NG https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data
  14. AI 自チームの解法 | scatter axis min-max detection 21 21 21

    step3で、MatCha(DePlotの類似モデル)を使って軸ラベルの最大、最小値を求める plot-areaの座標、scatter pointの座標、軸の最大最小をもとに最終的な解を算出 21 21 Training Model : MatCha (https://huggingface.co/google/matcha-base) Data : generated + extracted Epochs : 15 scheduler: cosine annealing Learning rate : 1e-5 Batch size : 4 GT example : <0x0A>x_label_min | y_label_min<0x0A>x_label_max | y_label_max</s> https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data
  15. AI その他 22 22 22 その他改善 • 複数系列グラフの追加 • コンペデータは全て単系列グラフだったが、外部データは複数系列も存在

    • 学習時には複数系列も加えて学習することでデータ数が増え精度向上 ◦ 複数系列の場合、Ground Truthは1系列目の値のみを採用 うまくいかなかったこと • scatterにて軸の最大、最小ではなくplot areaの端の座標の予測 ◦ 予測できるなら当然その方が望ましいが、予測精度悪かった • scatterにて、detr,deta等のViT系モデルによる物体検出 ◦ yoloxの方がかなり高精度だった(チューニング不足かも) • 複数モデルのアンサンブル ◦ 同一要素数かつ数値データの場合、ブレンドすることを試したが改善せず 22 22
  16. AI 1st place 24 24 24 • 大まかなパイプラインは弊チームと同じ ◦ scatterを物体検出、それ以外はDePlotでE2Eに予測

    • DePlotにて全データで学習した後、chart type毎にfinetune • ICDARは未アノテーションデータもpseudo-label + 目視でラベル付与して学習に追加 24 24 https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418786
  17. AI 2nd place 25 25 25 25 25 • こちらはscatterもDePlotで解いているのが特徴的

    • 合成データでpretrainした後、自然画像でscatterとそれ以外を別々でfinetune • 外部データはICDARに加えて、wikipediaのテーブルによる合成データも利用 https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418430
  18. AI 反省・感想 26 26 26 • 基本ではあるが、エラー原因の分析がスコア向上に貢献した ◦ 間違いやすいパターンを見つけ、データに追加するサイクルが効いた ▪

    「$」、「%」の記号ミス、lineの軸上に値がない場合のミス等 ◦ 外部データのアノテーション仕様の差分も発見でき、対策により改善した ▪ 「80%」→ 0.8 ? or 80 ?等 • scatterでのYOLOXがかなり高精度だった ◦ 特に画像サイズを上げると精度が大きく向上した ◦ 数十点あるscatter pointを過不足なく予測できたのには驚いた • LB probingは可能だったのにできなかった ◦ probingした他の参加者によると、privateは6割程度がscatterだったらしい ▪ trainはscatter2割弱だったので分布にかなり差がある ▪ chart type分類モデルをうまく使えば調査できるとのこと ◦ 戦略に大きく関わるので、上位狙うならやるべきだった 26 26