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

Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編/Kaggle_fixstars_corporation_20230509

 Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編/Kaggle_fixstars_corporation_20230509

2023年5月9日に開催した、「Kaggle スコアアップセミナー DFL Bundesliga Data Shootout 編」の当日資料です。

More Decks by 株式会社フィックスターズ

Other Decks in Technology

Transcript

  1. Copyright© Fixstars Group 本セミナーの位置づけ • Kaggle コンペで金メダルの獲得、Kaggle Competition Master の称号獲得

    • もともと機械学習の専門家の少なかったエンジニアチームによる、 継続的な Kaggle への取り組み • Kaggle スコアアップセミナー ⚫ 参加したコンペの概要と解法の紹介や、Kaggleに参加してみたい方向けに 複数回の情報発信を企画中 • 今回のセミナー • 画像系コンペティション「DFL – Budesliga Data Shootout」の概要と解法と、 ブログでは書ききれなかった理由と具体的な手段についての解説 • 対象者 • 画像処理と機械学習・深層学習を扱っている方 • 今後 Kaggle に挑戦し、スコアを上げていきたいと考えている方 2
  2. Copyright© Fixstars Group 発表・資料作成者紹介 冨田 明彦 (発表) ソリューションカンパニー 営業企画 2008年に入社。金融、医療業界に

    おいて、ソフトウェア高速化業務に 携わる。その後、新規事業企画、 半導体業界の事業を担当し、現職。 3 飯塚 康太 (発表) ソリューション第二事業部 シニアエンジニア 2019年入社。車載向けの深層学習 アプリケーション、特に物体検出・ トラッキングの開発を担当している。 Kaggle Competitions Master 水野 孝祐 (資料作成) ソリューション第二事業部 リードエンジニア 2016年に入社。ディープラーニング を用いた自動車向けの画像認識 アルゴリズム開発に携わる。 Kaggle Competitions Master
  3. Copyright© Fixstars Group フィックスターズの強み コンピュータの性能を最大限に引き出す、ソフトウェア高速化のエキスパート集団 ハードウェアの知見 アルゴリズム実装力 各産業・研究分野の知見 6 目的の製品に最適なハードウェアを見抜き、

    その性能をフル活用するソフトウェアを開 発します。 ハードウェアの特徴と製品要求仕様に合わ せて、アルゴリズムを改良して高速化を実 現します。 開発したい製品に使える技術を見抜き、実 際に動作する実装までトータルにサポート します。
  4. Copyright© Fixstars Group サービス概要 お客様専任のエンジニアが直接ヒアリングを行い、高速化を実現するために乗り越えるべき 課題や問題を明確にしていきます。 高速化のワークフロー コンサルティング 先行技術調査 性能評価・ボトルネックの特定

    高速化 アルゴリズムの改良・開発 ハードウェアへの最適化 レポート作成 サポート レポートやコードへのQ&A 実製品への組込み支援 7 高速化したコード オリジナルソースコードのご提供 お客様
  5. Copyright© Fixstars Group サービス提供分野 8 半導体 自動車 産業機器 生命科学 金融

    • NAND型フラッシュメモリ向け ファームウェア開発 • 次世代AIチップの開発環境基盤 • 自動運転の高性能化、実用化 • 次世代パーソナルモビリティの 研究開発 • Smart Factory実現への支援 • マシンビジョンシステムの高速化 • ゲノム解析の高速化 • 医用画像処理の高速化 • AI画像診断システムの研究開発 • デリバティブシステムの高速化 • HFT(アルゴリズムトレード)の高速化
  6. Copyright© Fixstars Group サービス領域 様々な領域でソフトウェア高速化サービスを提供しています。大量データの高速処理は、 お客様の製品競争力の源泉となっています。 9 組込み高速化 画像処理・ アルゴリズム開発

    分散並列システム開発 GPU向け高速化 FPGAを活用した システム開発 量子コンピューティング AI・深層学習 自動車向け ソフトウェア開発 フラッシュメモリ向け ファームウェア開発
  7. Copyright© Fixstars Group AI・深層学習向け技術支援 AIを使うためのハードウェア選定や、高速な計算を実現する ソフトウェア開発技術で、お客様の製品開発を支援します。 お客様の課題 推論精度を維持したまま計算時間を 短縮したい 組込みデバイス向けにAIモデルを

    軽量化したい ご支援内容 AIモデル設計 データの前処理・後処理 推論精度の改善 分散処理による学習高速化 モデル圧縮・推論の高速化 学習計算を高速化して研究開発を 効率化したい 精度と計算時間を両立するAIモデルを 開発したい 10
  8. Copyright© Fixstars Group AIを用いた乳房超音波検査リアルタイム解析システム 慶應義塾大学医学部外科学(一般・消化器)教室様 11 1 超音波検査装置が描出する動画を リアルタイム処理できる高速なAIを開発 2

    検査しながらAIによる診断補助が実現 できる 3 見落としを減らし、早期の乳がんの発見と 治療が可能になる 高確率でがん 生命科学 分野 サービス領域 AI・深層学習向け技術支援 高確率で良性腫瘍 子会社のSmart Opinion社で、乳がんの超音波 画像に対し、精密検査の要否を高速かつ高精度に 判別するAIを開発(現在認可申請中)
  9. Copyright© Fixstars Group DFLコンペ6位解法紹介 • 本発表では弊社チームで参加したKaggleコンペ DFL - Bundesliga Data

    Shootout の6位解 法を紹介します • 弊社techブログやKaggle discussionにも解法を投稿していますが、単なる手法の説明だけ でなく各手法を採用するに至った背景や理由についても合わせて解説します ◦ tech blog: https://proc-cpuinfo.fixstars.com/2023/02/kaggle-dfl2022/ ◦ Kaggle discussion: https://www.kaggle.com/competitions/dfl-bundesliga-data-shootout/discussion/360872 13
  10. Copyright© Fixstars Group コンペ概要 • DFL - Bundesliga Data Shootout

    ◦ URL: https://www.kaggle.com/competitions/dfl-bundesliga-data-shootout • タスク ◦ サッカーの試合を撮影した動画が与えられ、その中から特定のアクションが発生したタイミ ングおよび種別(プレイ、スローイン、チャレンジの3種類のいずれか)を識別 • タイムライン (日本時間) ◦ 2022/06/30: コンペ開始 ◦ 2022/10/14: 提出締め切り (最終スコア算出用に2022シーズンのデータ収集&教示開始) ◦ 2022/12/21: コンペ終了 (新しいデータでの最終スコア算出およびLB更新完了) 16
  11. Copyright© Fixstars Group 識別対象 • アクションが発生したタイミング ◦ 動画の先頭を基準とした秒数 • アクションの種別

    ◦ プレイ ▪ パスまたはクロス(フリーキックやコーナーキックも含む)等、チーム内でボールをやり 取りするアクション ◦ スローイン ▪ ボールがゲームエリア外に出た後に手でボールを投げてプレイを再開するアクション ◦ チャレンジ ▪ 両チームのプレイヤーがボールを自分の制御下に置こうとする(ボールに対する競り合 い、ファウル等)アクション 17
  12. Copyright© Fixstars Group データセット • 与えられたデータセット ◦ train ▪ フルゲーム4試合分の8動画

    (1動画約60分, 25fps, 1920x1080) ▪ ハーフゲーム4試合分の4動画 (1動画約60分, 25fps, 1920x1080) ◦ test ▪ 提出動作確認用の32動画 (1動画30秒, 25fps, 1920x1080) ◦ clips ▪ 10試合から短い区間を抽出された200動画 (1動画30秒, 25fps, 1920x1080) ◦ train.csv ▪ train動画に対応するアノテーションデータ • Leaderboard用データセット ◦ Public ▪ フルゲーム1試合分の2動画 ▪ ハーフゲーム4試合分の4動画 (trainのハーフゲームとペアになる動画) ◦ Private ▪ Publicと同等規模の動画 (詳細不明) 18 train.csvの内容例
  13. Copyright© Fixstars Group 評価方法 • Kaggleのサーバ上でPrivateデータセットに対して推論を実行 ◦ 推論は9時間以内に完了させる必要がある ◦ テストデータは6

    [動画] x 60 [分/動画] x 60 [秒/分] 25 [fps] = 540,000フレームなので、 540,000 / (9 x 60 x 60) = 16.67 fps以上で推論を実行できる必要がある • 精度評価指標 ◦ Average Precisionベースの指標 ▪ ①: アクション毎に閾値毎のAPを計算 ▪ ②: ①の各閾値での結果を平均 ▪ ③: ②の各アクションでの結果を平均 19
  14. Copyright© Fixstars Group ベースライン手法 • 多クラスの画像識別問題として解く方法 (titoさんの手法) ◦ 入力動画の各フレームをそれぞれ4クラス(背景+ターゲット3クラス)のいずれかに識別 するタスクとして学習・推論を実行

    ◦ 推論時の後処理で時間方向にNMSを適用し、一定期間内の予測を1つに抑制 ◦ モデルはEfficientNet B5を使用 ◦ 学習・推論フレームワークとしてPyTorchおよびtimmを使用 21 t-2 t-1 t t+1 t+2 入力フレーム 参考Notebook https://www.kaggle.com/code/its7171/dfl-benchmark-training https://www.kaggle.com/code/its7171/dfl-benchmark-inference 識別結果 bg bg play bg bg NMS結果 各フレームの識別 時間方向にNMS適用 bg play play play bg
  15. Copyright© Fixstars Group 弊社チームの6位解法 • 時系列方向の情報を加味して多クラスの画像識別問題として解く方法 ◦ 基本的な学習・推論パイプラインはベースライン手法と同様 ◦ 時系列情報を活用するために時間方向に隣接するフレームを結合して処理させる2.5次

    元CNNアプローチを採用 ◦ 画像コンペでよく利用される一般的な精度改善トリックを適用 (詳細後述) 22 Kaggle Discussionへの投稿 https://www.kaggle.com/competitions/dfl-bundesliga-data- shootout/discussion/360872 t-2 t-1 t t+1 t+2 2.5次元フレーム 識別結果 bg bg play bg bg NMS結果 各2.5次元フレームの識別 時間方向にNMS適用 bg play play play bg t-2 t-1 t t+1 t+2 入力フレーム 各フレームをグレイスケール変換& 前後フレームを結合
  16. Copyright© Fixstars Group Validation戦略 • ① フルゲーム1試合分をvalデータとして抽出し、残りをtrainデータとする ◦ trainに含む試合のバリエーションを増やしたい (ハーフゲームは可能な限りtrainに含

    めたい) ◦ trainとvalそれぞれに同じ試合を含めない ◦ データがあまり多くない場合、train:valの比率は4:1 or 5:1ぐらいが経験的に良い ▪ 今回の分割方法ではtrain:val=5:1になる • ② Cross validationを実施する場合は①の要領で各foldを生成する ◦ 今回のデータにはフルゲーム4試合分が存在したので4 foldまで生成可能 • ③ Local ValスコアとPublic LBスコアの相関が無ければ分割方法を見直す 23
  17. Copyright© Fixstars Group 0 0.1 0.2 0.3 0.4 0.5 0.6

    0.7 0.8 0.9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 実験ID スコアの推移 Val AP Public LB Private LB Gold line Silver line Bronze line 実験毎のスコア推移 • Local ValスコアとPublic LBスコアがほぼほぼ相関していたので分割方法を 見直す必要はありませんでした 24 Hold-out validation Cross validation
  18. Copyright© Fixstars Group 改善手法の詳細 • ここからは今回のコンペで適用した各改善手法の詳細について説明していき ます • 基本的にはコンペ開催中に試した時系列順に説明しますが、必ずしもこの順 番で試すのがベストというわけではございませんので、もしご参考いただけ

    る場合は各自のコンペに応じて調整してください • また紹介する手法は最終的に採用されたものに絞って説明します。これ以外 にも様々な実験を実施していますが詳細は割愛させていただきます 26
  19. Copyright© Fixstars Group 改善手法の全体像 • 今回の最終解法に採用された手法および各実験結果は以下の通りです 27 実験ID description model

    Val AP Public LB Private LB 1titoさんのベースラインモデル b5_ap 0.215 0.249 0.243753 2+ Test time augmentation b5_ap 0.228 0.255 0.247892 3+ ラベルエラーの修正 b5_ap 0.242 0.283 0.296506 4+ 前後1フレーム飛ばしの2.5次元画像を使用 b5_ap 0.312 0.425 0.452767 5+ 入力画像の解像度を960×540に変更、2フレームごとに推論 b5_ap 0.554 0.563 0.619431 6+ loss関数を4クラスBinary cross entropy lossに変更 b5_ap 0.609 0.618 0.664371 7+ カスタムデータローダー b5_ap 0.625 0.634 0.674229 8+ データ拡張の追加 b5_ap 0.7 0.703 0.725812 9+ b5モデルをb0モデルに軽量化、4-foldのモデルアンサンブル b0_ap (4-fold) 0.669 0.72 0.744911 10+ 2フレームごとに推論した際に飛ばしたフレームの予測を線形補間で生成 b0_ap (4-fold) 0.686 0.74 0.755787 11+ 入力画像の解像度を1280×720に変更、3-foldのモデルアンサンブル b0_ap (3-fold) 0.722 0.772 0.798407 12+ Mixupデータ拡張追加 b0_ap (3-fold) 0.747 0.761 0.799769 13+ 3つのb0モデルの内、1つをb1モデルに置き換え b0_ap (2-fold), b1_ap (1-fold) 0.751 0.768 0.802568 14 + 3つのフル学習b0モデル (各モデルは前後1フレーム、2フレーム、3フレーム飛ばしの2.5次元画像を使用) b0_ap (full-fit, time_stride=1, 2, 3) 0.753 0.782 0.803753
  20. Copyright© Fixstars Group ID1: titoさんのベースラインモデル • 既に説明した通り、今回はtitoさんの手法をベースラインとして採用しました ◦ 特に理由が無ければ評価の高い公開Notebookから始めるのが確実です ◦

    もし自分でベースラインを作成する場合にはそのタスクで実績のあるシンプルなモデ ルから始めるのがオススメです • スコア ◦ val: 0.215 (baseline) ◦ Public LB: 0.249 (baseline) • 参考Notebook ◦ https://www.kaggle.com/code/its7171/dfl-benchmark-training ◦ https://www.kaggle.com/code/its7171/dfl-benchmark-inference 28
  21. Copyright© Fixstars Group ID2: Test time augmentation • 左右flipを適用 ◦

    画像系コンペではmulti-scaleやクロップの拡張もよく適用されますが、処理時間の関 係でバリエーションを増やせないため今回は適用していません ◦ 推論時間が増えてしまうため本来はコンペの最終盤で適用すればよいと思います。た だしTTAは必ず入れたい処理のため、TTAを入れた場合に処理時間制約を満たせること を都度確認しておくことが重要です • スコア ◦ val: 0.215 (baseline) → 0.228 ◦ Public LB: 0.249 (baseline) → 0.255 29
  22. Copyright© Fixstars Group ID3: ラベルエラーの修正 • 与えられた正解データから学習用のラベルを生成する際に意図しない変換が 行われていたため修正しました ◦ たとえKaggle

    Grandmasterが作成したNotebookであっても間違いは起こり得るので、 内容を鵜呑みにせず実際に自分の頭で処理内容を理解することが重要です • スコア ◦ val: 0.228 → 0.242 ◦ Public LB: 0.255 → 0.283 • 修正の詳細は以下参照 ◦ https://www.kaggle.com/code/kmizunoster/dfl-benchmark-training-fix-label-error 30
  23. Copyright© Fixstars Group ID4: 時系列情報の活用 • 時系列情報を活用するために時間方向に隣接するフレームを結合して処理させる2.5次元 CNNアプローチを採用 ◦ ベースラインモデルで学習する中でtrainデータに対しても十分に学習出来ていない傾向(つまり未学

    習の状態)が見えたため、入力するデータに工夫をする必要性を感じました ◦ 時系列方向の情報を加える方法はいくつか考えられますが、学習・パイプラインをそのまま活用可 能かつシンプルな本手法をまずは採用しました • スコア ◦ val: 0.242 → 0.312 ◦ Public LB: 0.283 → 0.425 31
  24. Copyright© Fixstars Group ID5: 入力画像の高解像度化 (1回目) • ベースラインが456 x 456のところ、960

    x 540に上げました ◦ これまでの経験上、許容される範囲内で可能な限り解像度を上げると良い結果が得ら れることが多いです • 解像度を上げたことで推論時間が間に合わなくなったため、1フレーム飛ば して推論する変更も同時に適用しています • スコア ◦ val: 0.312 → 0.554 ◦ Public LB: 0.425 → 0.563 32
  25. Copyright© Fixstars Group ID6: loss関数の修正 • ベースラインではSoftmax cross entropyを使用していましたが、4クラス のbinary

    cross entropyに変更しました ◦ loss関数は解きたい問題や評価指標に応じて適切なものを選択することで精度が大きく 変わります ◦ 今回の評価指標では、最初に各クラス独立にスコアを算出した上で最後に平均を取っ ているため、クラス間でスコアを調整するSoftmaxは合っていないと考えました ◦ 今回は4クラスのままにしましたが、背景クラスは前景クラスが全て0である場合と等 価なので、3クラスにすることも可能です • スコア ◦ val: 0.554 → 0.609 ◦ Public LB: 0.609 → 0.618 33
  26. Copyright© Fixstars Group ID7: カスタムデータローダの実装 • 推論時間が足りなくなってきたため、 CPUでの前処理とGPUでの推論処理を パイプラインで処理させることで高速化を実施しました ◦

    Kaggle上のGPU NotebookではCPUを2コアまで使用可能 • 本作業の目的は高速化でしたが精度にもプラスの影響がありました。従来の 推論処理では動画から静止画に切り出す際に画質が劣化していましたが、フ ァイルに吐き出さずに処理できるようにしたため精度劣化を抑制できました • スコア ◦ val: 0.609 → 0.625 ◦ Public LB: 0.618 → 0.634 34 改善前 前処理 推論 前処理 推論 前処理 推論 前処理 前処理 前処理 推論 推論 改善後 コア0 コア0 コア1
  27. Copyright© Fixstars Group ID8: データ拡張の改善 • ベースラインはImageNet用のデータ拡張を流用していたため、今回のデータセットに応じ た調整を行いました ◦ 修正前:

    RandomResizedCropAndInterpolation, RandomHorizontalFlip, ColorJitter(brightness, contrast) ▪ スケールのrangeが広すぎるため、拡張後の画像にボールの領域が入らないことがありました ◦ 修正後: RandomAffine or RandomPerspective, RandomHorizontalFlip, ColorJitter(brightness, contrast) ▪ スケール以外の画像変形の要素を加えるため、RandomAffineとRandomPerspectiveに変更 ▪ 拡張後の画像を見ながらちょうど良いスケールを設定 • スコア ◦ val: 0.625 → 0.7 ◦ Public LB: 0.634 → 0.703 35
  28. Copyright© Fixstars Group ID9: モデルの軽量化 + モデルアンサンブル • ベースラインのEfficientNet-b5からb0に変更しました ◦

    これまでの学習で過学習の傾向も見えていたため、モデルの表現力を落として過学習 を抑制したいという目的もありました • 変更した結果、処理時間に余裕が生まれたためfold-wiseのアンサンブル処理 を追加しています • スコア ◦ val (4-fold): 0.669 ◦ Public LB: 0.703 → 0.72 36 EfficientNet-b0 (fold 0) 入力画像 EfficientNet-b0 (fold 1) EfficientNet-b0 (fold 2) EfficientNet-b0 (fold 3) 平均 予測
  29. Copyright© Fixstars Group ID11: 入力画像の高解像度化 (2回目) • さらに精度を上げるため解像度を960 x 540から1280

    x 720に変更 • 4-foldのアンサンブルでは推論時間が間に合わなかったため、3-foldのアン サンブルに変更 • スコア ◦ val (3-fold): 0.722 ◦ Public LB: 0.74 → 0.772 38
  30. Copyright© Fixstars Group ID12: Mixupの追加 • Mixupを追加しました ◦ timmであればオプションで簡単にON/OFF可能 •

    これまでの改善と異なり、valは向上した一方でPublic LBは劣化しましたが、 localのスコアを信頼してMixupを最終解法でも採用しています • スコア ◦ val (3-fold): 0.722 → 0.747 ◦ Public LB: 0.772 → 0.761 39
  31. Copyright© Fixstars Group ID14: 全学習データを用いて再学習 • これまでのbestの設定で全データ学習を行いました • 全データを使用して学習することでfold-wiseのアンサンブルが出来なくなったた め、時系列方向のtime_strideを変更した3モデルを用意しアンサンブルを実行し

    ています ◦ time_strideを大きくすることで長期的な 特徴を獲得し、challenge等の難しい アクションの精度向上が狙い • スコア ◦ val (3-fold): 0.751 → 0.753 ◦ 各time_strideで3-foldで学習した モデルを使用して算出 ◦ Public LB: 0.768 → 0.782 41 t-2 t-1 t t+1 t+2 time_stride=1 t-2 t-1 t t+1 t+2 入力フレーム t-2 t-1 t t+1 t+2 time_stride=2 t-2 t-1 t t+1 t+2 入力フレーム t-2 t-1 t t+1 t+2 time_stride=3 t-2 t-1 t t+1 t+2 入力フレーム
  32. Copyright© Fixstars Group 改善毎のスコア推移まとめ • val APの高い2モデルを最終提出 42 実験ID description

    model Val AP Public LB Private LB 1titoさんのベースラインモデル b5_ap 0.215 0.249 0.243753 2+ Test time augmentation b5_ap 0.228 0.255 0.247892 3+ ラベルエラーの修正 b5_ap 0.242 0.283 0.296506 4+ 前後1フレーム飛ばしの2.5次元画像を使用 b5_ap 0.312 0.425 0.452767 5+ 入力画像の解像度を960×540に変更、2フレームごとに推論 b5_ap 0.554 0.563 0.619431 6+ loss関数を4クラスBinary cross entropy lossに変更 b5_ap 0.609 0.618 0.664371 7+ カスタムデータローダー b5_ap 0.625 0.634 0.674229 8+ データ拡張の追加 b5_ap 0.7 0.703 0.725812 9+ b5モデルをb0モデルに軽量化、4-foldのモデルアンサンブル b0_ap (4-fold) 0.669 0.72 0.744911 10+ 2フレームごとに推論した際に飛ばしたフレームの予測を線形補間で生成 b0_ap (4-fold) 0.686 0.74 0.755787 11+ 入力画像の解像度を1280×720に変更、3-foldのモデルアンサンブル b0_ap (3-fold) 0.722 0.772 0.798407 12+ Mixupデータ拡張追加 b0_ap (3-fold) 0.747 0.761 0.799769 13+ 3つのb0モデルの内、1つをb1モデルに置き換え b0_ap (2-fold), b1_ap (1-fold) 0.751 0.768 0.802568 14 + 3つのフル学習b0モデル (各モデルは前後1フレーム、2フレーム、3フレーム飛ばしの2.5次元画像を使用) b0_ap (full-fit, time_stride=1, 2, 3) 0.753 0.782 0.803753
  33. Copyright© Fixstars Group コンペを通じて得た知見 • Kaggleで過去にあまり開催されていない種類のタスクは金メダルを狙うチャンス ◦ 定番のタスク(Image classification, Semantic

    segmentation, Object detection等)におい ては過去の知見が大量に存在し、ある程度手法が確立されているため、いかに効率よく大量 に実験を回し続けるかが勝負のカギになると思われます ◦ 一方で今回のコンペでは過去の知見があまり無く、単純な試行錯誤ではスコアを伸ばすのは 難しい状況だったと思われます。逆に言うと弊社チームのようなワンアイデアでも金メダル に直結するスコアを出せることが分かりました • (既に言い古されていることではありますが) Localの検証がやはり大事 ◦ 今回の改善作業を進める中で早期にLocal環境とPublic LBでスコアの相関を取れたので、と てもスムーズに改善作業を進めることができました 44