Slide 1

Slide 1 text

AI 2023.07.28 CV輪講 立松 郁也 株式会社ディー・エヌ・エー + GO株式会社 Kaggle Benetechコンペ振り返り

Slide 2

Slide 2 text

AI 2 はじめに

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

AI 4 4 本日の内容 KaggleのBenetech - Making Graphs Accessibleコンペにチームで参加し4thでした 本日はコンペの概要や解法について共有したいと思います https://www.kaggle.com/competitions/benetech-making-graphs-accessible/leaderboard

Slide 5

Slide 5 text

AI 5 項目 01|コンペ概要 02|自チームの解法 03|上位陣の解法

Slide 6

Slide 6 text

AI 6 01 コンペ概要

Slide 7

Slide 7 text

AI 7 7 7 コンペ概要| タスク さまざまな種類のグラフ画像から、グラフの種類と値を読み取るタスク ● グラフ画像を入力とし、グラフの種類およびx,yの値を出力する ● グラフの種類は「Scatter」、「VBar」、「HBar」、「Line」、「Dot」の5つ input output https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data

Slide 8

Slide 8 text

AI 8 8 8 コンペ概要| タスク さまざまな種類のグラフ画像から、グラフの種類と値を読み取るタスク scatter vertical bar horizontal bar dot line https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

AI 11 11 11 コンペ概要| 難しいポイント② データ観点 ● lineにて軸上に値がない部分は出力してはいけない ● 「$」、「%」などの記号を数値と間違う ● 提供される自然画像データがわずか ○ 提供データは60,000件程度あるが、うち自然画像は1,000件程度と少ない ○ 一方、評価データは全て自然画像なので、自然画像で精度上げることが重要 2500は出力してはダメ 「$」などの記号は数 値と間違いやすい https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data

Slide 12

Slide 12 text

AI 12 02 自チームの解法

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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 Postprocess 数値データになるべき値は文字列を削除する処理 Data selection データソースに応じてepoch毎にダウンサンプル 自然画像はweight高、生成画像はweight低でサンプル グラフ画像の読み取りに事前学習されたDePlotというモデルでE2Eに予測

Slide 18

Slide 18 text

AI 自チームの解法 | Bar, Line and Dot plot 18 18 18 追加データパターン ・lineの軸上に値がない画像 ・JPGの圧縮率調整による低画質画像 ・数値と間違いやすい記号 ($ % , .) ・非常に小さい数値 (like < 0.0001) etc.. エラー原因分析の結果をもとに、間違いやすいケースのデータをmatplotlibで生成し改善

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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 https://www.kaggle.com/competitions/benetech-making-graphs-accessible/data

Slide 22

Slide 22 text

AI その他 22 22 22 その他改善 ● 複数系列グラフの追加 ● コンペデータは全て単系列グラフだったが、外部データは複数系列も存在 ● 学習時には複数系列も加えて学習することでデータ数が増え精度向上 ○ 複数系列の場合、Ground Truthは1系列目の値のみを採用 うまくいかなかったこと ● scatterにて軸の最大、最小ではなくplot areaの端の座標の予測 ○ 予測できるなら当然その方が望ましいが、予測精度悪かった ● scatterにて、detr,deta等のViT系モデルによる物体検出 ○ yoloxの方がかなり高精度だった(チューニング不足かも) ● 複数モデルのアンサンブル ○ 同一要素数かつ数値データの場合、ブレンドすることを試したが改善せず 22 22

Slide 23

Slide 23 text

AI 23 03 上位陣の解法

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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