61.3K Views
August 03, 23
スライド概要
これまでの Kaggle スコアアップシリーズでは、過去に参加し、メダル獲得・Kaggle Competitions Master の称号獲得をしたコンペについて、課題の解決手法とスコアアップのための改善手法について紹介してきました。
本シリーズでは、今後 2回に渡り、Kaggle初心者が画像系コンペに参加して、課題を提出し、スコア改善を実施するまでの一連の手順を解説していきます。
今回の前編は、画像系コンペに参加するまでの情報収集から、ベースラインモデルの精度改善までが対象です。
現在 Kaggle Competitions Master の称号を獲得しているメンバーも、当初は Kaggle 未経験でのコンペ参加でした。
そのメンバー自身が、初心者だった頃に知りたかったと感じる情報を厳選しています。
これから画像系の Kaggle コンペに参加しようと考えている、企業の研究開発部門所属のエンジニア、大学研究室所属の学生の皆様にオススメの内容になっています。
<過去資料>
・画像系コンペ入門[前編]:https://news.fixstars.com/3535/
・画像系コンペ入門[後編]:https://news.fixstars.com/3796/
・フィックスターズのAI・深層学習向け技術支援: https://www.fixstars.com/ja/services/ai
フィックスターズは、コンピュータの性能を最大限に引き出すソフトウェア開発のスペシャリストです。車載、産業機器、金融、医療など、幅広い分野での開発経験があります。また、ディープラーニングや機械学習などの最先端技術にも力を入れています。 並列化や最適化技術を駆使して、マルチコアCPU、GPU、FPGA、量子アニーリングマシンなど、さまざまなハードウェアでソフトウェアを高速化するサービスを提供しています。さらに、長年の経験から培ったハードウェアの知識と最適化ノウハウを活かし、高精度で高性能なアルゴリズムの開発も行っています。 ・開催セミナー一覧:https://www.fixstars.com/ja/seminar ・技術ブログ :https://proc-cpuinfo.fixstars.com/
Kaggleスコアアップセミナー 実践的!Kaggle画像系コンペ入門 [前編] Copyright© Fixstars Group
本セミナーの位置づけ ● 当社エンジニアが、銀メダルと Kaggle Competitions Master の称号を獲得 ● Kaggle スコアアップセミナー:スコアアップに向けたヒントをお届け ● 参加したコンペ個別の解説と改善手法の紹介 画像系コンペ DFL- Bundesliga Data Shootout編 数理最適化コンペ Santa 2022編 ● 本セミナー:Kaggle画像系コンペ入門者に向けた汎用的な情報を提供 ● こんな方にお勧め ● 研究や開発で、深層学習を扱っている方 ● 今後 Kaggle に挑戦し、スコアを上げていきたいと考えている方 Copyright© Fixstars Group 2
発表者紹介 冨田 明彦 水野 孝祐 ソリューションカンパニー 営業企画 ソリューション第二事業部 リードエンジニア 2008年に入社。金融、医療業界において、 ソフトウェア高速化業務に携わる。その後、 新規事業企画、半導体業界の事業を担当し、 現職。 2016年に入社。ディープラーニングを用いた 自動車向けの画像認識アルゴリズム開発に携わ る。Kaggle Competitions Master Copyright© Fixstars Group 3
本日のAgenda ● フィックスターズのご紹介 ● Kaggle画像系コンペ入門 [前編] ● Q&A / 告知 Copyright© Fixstars Group 4
フィックスターズの ご紹介 Copyright© Fixstars Group
フィックスターズの強み コンピュータの性能を最大限に引き出す、ソフトウェア高速化のエキスパート集団 ハードウェアの知見 アルゴリズム実装力 各産業・研究分野の知見 目的の製品に最適なハードウェアを見抜き、 その性能をフル活用するソフトウェアを開 発します。 ハードウェアの特徴と製品要求仕様に合わ せて、アルゴリズムを改良して高速化を実 現します。 開発したい製品に使える技術を見抜き、実 際に動作する実装までトータルにサポート します。 Copyright© Fixstars Group 6
サービス概要 お客様専任のエンジニアが直接ヒアリングを行い、高速化を実現するために乗り越えるべき 課題や問題を明確にしていきます。 高速化のワークフロー お客様 オリジナルソースコードのご提供 高速化したコード コンサルティング 高速化 サポート 先行技術調査 アルゴリズムの改良・開発 レポートやコードへのQ&A 性能評価・ボトルネックの特定 ハードウェアへの最適化 実製品への組込み支援 レポート作成 Copyright© Fixstars Group 7
サービス提供分野 半導体 産業機器 金融 自動車 ● NAND型フラッシュメモリ向けフ ァームウェア開発 ● 次世代AIチップの開発環境基盤 生命科学 ● Smart Factory実現への支援 ● マシンビジョンシステムの高速化 ● 自動運転の高性能化、実用化 ● ゲノム解析の高速化 ● 次世代パーソナルモビリティの 研究開発 ● 医用画像処理の高速化 Copyright© Fixstars Group ● デリバティブシステムの高速化 ● HFT(アルゴリズムトレード)の高速化 ● AI画像診断システムの研究開発 8
サービス領域 様々な領域でソフトウェア高速化サービスを提供しています。大量データの高速処理は、 お客様の製品競争力の源泉となっています。 組込み高速化 GPU向け高速化 AI・深層学習 画像処理・ アルゴリズム開発 FPGAを活用した システム開発 分散並列システム開発 量子コンピューティング 自動車向け フラッシュメモリ向け ソフトウェア開発 ファームウェア開発 Copyright© Fixstars Group 9
AI・深層学習向け技術支援 AIを使うためのハードウェア選定や、高速な計算を実現する ソフトウェア開発技術で、お客様の製品開発を支援します。 お客様の課題 ご支援内容 推論精度を維持したまま計算時間を AIモデル設計 短縮したい データの前処理・後処理 組込みデバイス向けにAIモデルを 軽量化したい 推論精度の改善 学習計算を高速化して研究開発を 効率化したい 分散処理による学習高速化 精度と計算時間を両立するAIモデルを モデル圧縮・推論の高速化 開発したい Copyright© Fixstars Group 10
Kaggle画像系 コンペ入門 [前編] Copyright© Fixstars Group
Kaggle画像系コンペ入門 ● Kaggleの画像系コンペを対象とした入門セミナーを今後2回に渡って開催し ます ○ 前編: ○ 参加するコンペの選定からベースラインモデルの作成・精度改善まで、Kaggleの画像 系コンペに参加する際の基本的な流れを説明 ○ ○ Kaggleプラットフォーム上で完結する話 後編: ○ ベースラインモデルからさらにスコアを伸ばすための改善方法について説明 ○ クラウドまたはオンプレミス環境を想定した話 Copyright© Fixstars Group 12
Kaggle画像系コンペ入門 ● Kaggleの画像系コンペを対象とした入門セミナーを今後2回に渡って開催し ます ○ 本日の内容 前編: ○ 参加するコンペの選定からベースラインモデルの作成・精度改善まで、Kaggleの画像 系コンペに参加する際の基本的な流れを説明 ○ ○ Kaggleプラットフォーム上で完結する話 後編: ○ ベースラインモデルからさらにスコアを伸ばすための改善方法について説明 ○ クラウドまたはオンプレミス環境を想定した話 Copyright© Fixstars Group 13
なぜ?いまさらKaggle画像系コンペ入門? ● これまで書籍等では画像系コンペを扱ったものが少ないため、初心者がいざ参加 しようとした時の敷居が高いのではないかと感じています ○ 本セミナーでは画像系コンペに対するハードルを下げられればと考えています ● また画像系コンペの以下のような特徴も敷居の高さにつながっていると思われま す ○ ○ データサイズ: 数十GBは普通で、多いと数百GBにもなる 計算資源: GPU環境は必須であり、試行錯誤するには無料の環境だけでは不足しがち ● 実際に画像系コンペの参加者は他のデータ形式のコンペよりも少ない傾向があり ますので、逆に言うとこれから参加される方にとってメダル獲得のチャンスは多 いと個人的には思っています Copyright© Fixstars Group 14
本日説明する内容についての前置き ● 本セミナーでは、コンペの始まりから終わりまでに必要最低限の一通りの知 識を説明することを主眼に置いています ● 時間も限られているため、特定のコンペに対するアプローチ、具体的なモデ ル作成方法および各項目の詳細は説明しません ○ このような内容は書籍等でも触れられていますので適宜参考文献をご参照ください ● 特に明示しない限りはCode Competitions形式のコンペを前提とした話をし ていると思ってください Copyright© Fixstars Group 15
アウトライン ● Kaggleコンペ参加の基本的な流れ ● 参加するコンペの選定 ● コンペに関する情報収集 ● データセットの理解と整備 ● ベースラインモデルの作成と提出 ● ベースラインモデルの精度改善 ● Kaggleプラットフォーム上でのデモ Copyright© Fixstars Group 16
Kaggleコンペ参加の 基本的な流れ Copyright© Fixstars Group
Kaggleコンペ参加の基本的な流れ ● Kaggleプラットフォーム上で完結する場合の基本的な流れ Copyright© Fixstars Group 18
Kaggleコンペ参加の基本的な流れ ● Kaggleプラットフォーム上で完結する場合の基本的な流れ Copyright© Fixstars Group 19
参加するコンペの選定 Copyright© Fixstars Group
コンペのタイプ 参考ページ https://www.kaggle.com/docs/competitions ● Featured ● ● あり ● 賞金 なし ● ○ 商業目的の予測問題を扱うカテゴリで、これまでKaggle上で最も多く開催されている ○ 入賞者には必ずメダルかプライズが提供される Research ○ Featuredと比較すると実験的な問題を扱う ○ 入賞者には必ずメダルかプライズが提供されることが多いが、コンペによっては無い場合もある Getting Started メダル なし あり ○ 新規ユーザの利用を想定した練習用の簡単な問題を提供 Playground Getting ○ Getting Startedより一段上の難易度の問題を提供 Started ○ 賞金やメダルが出ることもあるが大半は出ない Play ground Analytics Research ○ 与えられたデータから知見を導き出すコンペ ○ 賞金が出るがメダルは出ない Analytics Featured Copyright© Fixstars Group 21
コンペの形式 参考ページ https://www.kaggle.com/docs/competitions Simple Competitions Copyright© Fixstars Group 22
コンペの形式 参考ページ https://www.kaggle.com/docs/competitions Two-stage Competitions Copyright© Fixstars Group 23
コンペの形式 参考ページ https://www.kaggle.com/docs/competitions Code Competitions (現在主流の形式) Copyright© Fixstars Group 24
Code Competitionsの制約例 ● Code Competitionsでは参加者の公平を期すために、典型的には以下のような制 約が与えられる ○ CPU Notebook <= 9 hours run-time ■ ○ GPU Notebook <= 9 hours run-time ■ ○ 提出用Notebook実行中はインターネットにアクセスできない Freely & publicly available external data is allowed, including pre-trained models ■ ○ 提出にGPUノートブックを使用する場合、9時間以内に実行完了しないといけない Internet access disabled ■ ○ 提出にCPUノートブックを使用する場合、9時間以内に実行完了しないといけない 事前学習済みモデルを含む、自由かつ公開された一般利用可能な外部データを使用してもよい Submission file must be named submission.csv ■ 提出ファイル名はsubmission.csvというファイル名である必要がある ● 学習を実行する環境に制約は無いため完全に公平というわけではない Copyright© Fixstars Group 25
データセットの種類 参考ページ https://www.kaggle.com/datasets/kaggle/meta-kaggle ● 賞金の出るコンペの開催数推移 ○ ○ ○ 2015年~2016年はテーブルが主流 2017年~2021年は画像やテキストの割合が増加 2022年は再度テーブルの割合が増加 音声 画像 テーブル テキスト ※ この表は Meta Kaggle データセットを基に 弊社独自に集計した結果であることに注意。 動画 Copyright© Fixstars Group 26
画像系タスクの種類 ● https://www.kaggle.com/competitions 代表的なタスクとコンペ例 ○ ○ ○ ○ ● 参考ページ Image Classification: 画像からラベルを予測 ■ Cassava Leaf Disease Classification Object Detection: 画像から対象物体の位置を予測 ■ TensorFlow - Help Protect the Great Barrier Reef Semantic Segmentation: 画像から画素ごとのラベルを予測 ■ Vesuvius Challenge - Ink Detection Instance Segmentation: 画像から対象物体の位置とマスクを予測 ■ Sartorius - Cell Instance Segmentation その他 ○ ○ ○ ○ Video Classification: 動画からラベルを予測 ■ Deepfake Detection Challenge Action Spotting: 動画からアクションが発生したタイミングと種別を予測 ■ DFL - Bundesliga Data Shootout 画像生成AIが生成した画像からプロンプトを予測 ■ Stable Diffusion - Image to Prompts その他多数のためKaggleのCompetitionsページをご参照ください Copyright© Fixstars Group 27
目的に応じたコンペの選択方法 Yes メダルを獲得した い? 開催中のFeatured or Researchコンペ から選択 Yes No 興味のあるデータ やタスクがある? No Copyright© Fixstars Group 過去コンペも含め て興味に合致する ものを選択 代表的なタスクの コンペを選択 28
Kaggleコンペ参加の基本的な流れ ● Kaggleプラットフォーム上で完結する場合の基本的な流れ Copyright© Fixstars Group 29
コンペに関する 情報収集 Copyright© Fixstars Group
コンペの基本情報確認 ● 参加するコンペを選定し、コンペの参加登録を済ませたら情報を集めます ● まずはOverviewとDataを一通り確認しましょう ○ 特にデータや精度評価指標の理解が重要となります ● 理解できない箇所や疑問点がある場合、以下のようにして解消するとよいで しょう ○ CodeやDiscussionで既に説明・議論されているか確認する ○ 自分で分析用のNotebookを作成して調査する ○ 上記手法で解決しなければDiscussionで質問する ■ 自分が引っかかる箇所は他の人も同じように引っかかる可能性が高いです Copyright© Fixstars Group 31
精度評価指標の理解が改善につながった事例 ● TensorFlow - Help Protect the Great Barrier Reef ○ 与えられた時系列画像からオニヒトデを検出するコンペ ● 精度評価指標: F2 Score (下式の𝛽 = 2とした値) ○ ○ 通常のF ScoreはF1 Score (下式の𝛽 = 1とした値)でprecisionとrecallの調和平均を取った値 一方のF2 ScoreはRecallが重視されるため、トレードオフとしてはRecall側に倒した方が高い値になる ● Recallに寄与する改善策を適用しスコアを改善 precision+recall=1.0と仮定した時のrecall vs Fβ Score 高解像度での学習 時系列を用いた手法(Seq-NMS) 𝐹𝛽 = (1 + 𝛽 2 ) ∙ 𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 ∙ 𝑟𝑒𝑐𝑎𝑙𝑙 𝛽 2 ∙ 𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 + 𝑟𝑒𝑐𝑎𝑙𝑙 Fβ Score ○ ○ 0.6 F1 0.5 F2 0.4 0.3 0.2 0.1 参考ページ 0 F-score: https://en.wikipedia.org/wiki/F-score Seq-NMS for Video Object Detection: https://arxiv.org/abs/1602.08465 Copyright© Fixstars Group 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 recall 1 32
Code ● Codeではコンペの参加者が共有したNotebookを確認したり、fork (Copy&Edit) して自分で動かしてみることが出来ます ● コンペが始まってしばらくすると、データ分析やベースラインモデルの Notebookが共有されることが多いのでとても参考になります ● またコンペが進むにつれてよりスコアの高いNotebookが共有されることも あるので、定期的に確認することをオススメします ○ コンペによっては、スコアの高い公開Notebookを一早く提出しておくだけでメダルを獲得で きることもあります Copyright© Fixstars Group 33
Discussion ● Discussionではコンペの参加者が様々なトピックについて議論をしたり、主 催者に質問することが出来ます ● コンペに関する様々な情報が共有されるので定期的に確認しましょう ○ 関連する過去コンペ情報、有用な論文情報、データの不備、etc. ○ 知っていると知らないのではスコアが大きく変わる場合がある ● コンペ終了後には上位解法が共有されることが通例なので、コンペ終了後も 目を通すととても勉強になります ● もしコンペに関して不明点や質問があって、Discussionに回答が見当たらな い場合は自分で質問してみましょう Copyright© Fixstars Group 34
過去の類似コンペの調査 ● 代表的なタスクのコンペの場合、過去に類似の問題を解くコンペが開催され ていることが多いため、その時の上位解法を調査することで知見が得られる ことが多いです ○ ただし調査したコンペが古いものだった場合、当時と現在とで環境が大きく変わっている場 合があるため、情報の取捨選択は必要なことに注意 ● 過去の類似コンペについてはDiscussionでまとめを投稿してくれる人が必ず いるので最初から自分で調べる必要は無いです ○ この手の投稿はUpvoteを貰いやすいのでDiscussionカテゴリのメダルを稼ぎたい方は、自分 でまとめて投稿してみるのもアリ Copyright© Fixstars Group 35
Leaderboard ● コンペ開催中はPublic test dataに対するbestスコアに応じたランキングが 表示されます ● コンペ締切後はPrivate test dataに対するbestスコアに応じたランキングが 追加されます ○ この順位でプライズの有無やメダルの付与が判定されます ● Publicのランキング表の上側の説明にPublicおよびPrivateの分割割合につい て記載があるので確認しておくとよいです ○ (例) This leaderboard is calculated with approximately 19% of the test data. The final results will be based on the other 81%, so the final standings may be different. Copyright© Fixstars Group 36
Rules ● 余裕があればRulesも確認しておくとよいでしょう ○ コンペによって大きく変わることは少ないのですが、ソリューションのライセンスや外部デ ータセットの使用可否が重要になることがあります ■ 過去にはMIT準拠のソリューションでないと認められないというコンペがあり、GPLの モデルを用いたソリューションが失格にされるケースがありました ● ■ https://www.kaggle.com/competitions/global-wheat-detection コンペによっては有用な外部データセットで学習することで精度に大きく寄与する場合 もあります Copyright© Fixstars Group 37
Kaggleコンペ参加の基本的な流れ ● Kaggleプラットフォーム上で完結する場合の基本的な流れ Copyright© Fixstars Group 38
データセットの 理解と整備 Copyright© Fixstars Group
探索的データ分析 ● Exploratory data analysis (EDA)とも呼ばれる ● 与えられたデータに対して様々な観点で集計・可視化を実行し、解きたい問 題にどのようにアプローチすべきか仮説を立てながら考える ○ コンペの初期に一度実施して終わりではなく、モデルを作成しながら気になることが出てき たら都度実行することになる ● なぜ必要なのか? ○ タスクやデータに対する理解が深まる ○ データの分割方針につながる ○ 改善のアイデアが得られる ○ データに含まれるエラーやノイズに気づける Copyright© Fixstars Group 40
分析用Notebookの作成 参考ページ https://pandas.pydata.org/ https://matplotlib.org/ ● 自分で作成する場合 ○ コンペのページにアクセスし、CodeタブからNew Notebookボタンを押して新規Notebook を生成する ○ コンペのページから生成したNotebookには最初からコンペのデータセットが追加されている ○ 画像系のコンペではデータセットはたいてい画像(または動画) + meta情報(csv形式が多い) で与えられるので、pandasやmatplotlib等のライブラリを駆使して分析を実施する ● 公開されているものをベースにする場合 ○ 右も左も分からないという状況であれば、公開NotebookからEDAの参考になりそうなものを 開き、Copy&Editボタンを押して自分用のNotebookを生成する ○ 実際に処理を実行しながらどのような分析が行われているのか確認する ○ 自分で思いついた新たな観点があればコードを修正・追加して実行してみる Copyright© Fixstars Group 41
EDAを実施する際の観点 参考ページ Basic EDA with Images: https://www.kaggle.com/code/jpmiller/basic-eda-with-images/notebook ● 画像系コンペのデータセットでタスクに依らず確認すべき観点 ○ データセットの枚数 ○ 画像の基本情報(圧縮形式、解像度、ビット幅、etc.) ○ ラベルの種類 ○ ラベルの可視化 ○ ラベル以外のメタ情報 ○ 画像内の認識対象の大きさ (大きく映っているのか、小さく映っているのか、etc.) ○ ラベルの出現頻度 ● タスクの特性に応じた観点 ○ ここはタスクによって様々なので興味のあるタスクのEDA Notebookをご確認ください ○ Object Detectionで言えば、Bounding boxの位置、大きさ、画像毎の数、etc. Copyright© Fixstars Group 42
データセットの分割方針検討 ● 学習用のデータセットをtrainとvalidationに分割する ○ 一般的な機械学習ではtrain、validation、testの3つに分割するのがセオリーだが、Kaggleの 場合はPublic test datasetによる評価が都度実施されるのでtestの代替にしてもよい ○ ただし一般的な機械学習でtestの結果を基にモデルを選択するのは良くないとされるのと同 様に、KaggleでPublic test datasetの結果でモデルを選択するのは良くないとされる (例外 あり) 分析者から見える 一般的な機械学習 での分割例 train validation 分析者から見えない 分析者から見える Kaggleでの分割例 train Copyright© Fixstars Group test validation Public test 43
データセットの分割方針検討 参考ページ 3.1. Cross-validation: evaluating estimator performance: https://scikit-learn.org/stable/modules/cross_validation.html ● 画像系コンペで交差検証 (Cross validation) を実施すべきかどうか ○ データが少なく検証結果が不安定等の特殊な事情が無い限り、コンペの初期ではホールドア ウト検証で十分であり、限られたマシンリソース下では基本的な実験を色々回すことに注力 する方がよい ■ ○ とはいえ分割方法は交差検証を意識したものにしておくと後が楽 ホールドアウト検証ではLocalの検証スコアとPublicのスコアの相関が取れない場合は、交差 検証を実施してみるのも一つの手かもしれない ○ 精度向上という観点では、交差検証によって生成した複数モデルをアンサンブルして精度を 上げるというアプローチもKaggleでは良く見られるので、推論時間が余っている場合にコン ペ後半での改善策の一つとして実施するのもアリ Copyright© Fixstars Group 44
DFLコンペでの事例 参考ページ Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編: https://www.docswell.com/s/fixstars/KENEMN-20230509 ● コンペの初期はホールドアウト検証を実施し、データに関する洞察を深めること に注力。コンペ中盤からCross validationおよびモデルアンサンブルを導入し、 さらなるスコアアップを達成 スコアの推移 0.9 0.8 0.7 Val AP 0.6 Public LB 0.5 Private LB 0.4 0.3 Gold line 0.2 Silver line Hold-out validation 0.1 Cross validation Bronze line 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 実験ID Copyright© Fixstars Group 45
データセットの分割方針検討 参考ページ https://scikit-learn.org/stable/modules/classes.html#modulesklearn.model_selection ● EDAを通じて得られたデータの特性に応じて分割の方法を決める ● データによって様々な分け方が考えられるが、基本的な決め方は以下の通り Yes StratifiedGroupKFold No GroupKFold Yes StratifiedKFold No KFold ラベルの分布の偏りは あるか? Yes データリークとなり得る 要素はあるか? No ラベルの分布の偏りは あるか? Copyright© Fixstars Group 46
データセットの分割方針検討 参考ページ https://scikit-learn.org/stable/modules/classes.html#modulesklearn.model_selection ● EDAを通じて得られたデータの特性に応じて分割の方法を決める ● データによって様々な分け方が考えられるが、基本的な決め方は以下の通り Yes StratifiedGroupKFold No GroupKFold Yes StratifiedKFold No KFold ラベルの分布の偏りは あるか? Yes データリークとなり得る 要素はあるか? 具体例: CT画像から病気を識別するタスク 同じ患者の画像が複数枚含まれる場合、train とvalの両方に入れてしまうと良い精度が出や すくなるが、実際に予測したいのは未知の患者 なのでデータリークとなる No ラベルの分布の偏りは あるか? Copyright© Fixstars Group 47
データセットの分割方針検討 参考ページ https://scikit-learn.org/stable/modules/classes.html#modulesklearn.model_selection ● EDAを通じて得られたデータの特性に応じて分割の方法を決める ● データによって様々な分け方が考えられるが、基本的な決め方は以下の通り 具体例: CT画像から病気を識別するタスク 識別対象クラスの中にまれにしか見つからない 疾患が存在し、データ全体に占める枚数が少 ない場合、ランダムに分割してしまうとtrainまた はvalに一枚も含まれないことが起こり得る Yes StratifiedGroupKFold No GroupKFold Yes StratifiedKFold No KFold ラベルの分布の偏りは あるか? Yes データリークとなり得る 要素はあるか? No ラベルの分布の偏りは あるか? Copyright© Fixstars Group 48
データセットの分割方針検討 参考ページ https://www.kaggle.com/competitions/dfl-bundesliga-datashootout/ ● ● 実際のコンペの事例からどの分割方法が良いか考えてみましょう DFLコンペの事例 ○ タスク: ■ サッカーの試合動画から、特定のアクションが 発生したタイミングとアクションの種別を検知 ○ ○ アクションの種類: ■ pass, throwin, challengeの3種類 動画 ■ train ● ● 12本 (8試合分) video_idの先頭8文字が同じ動画(表の色付き)は 同じ試合の前半・後半で分割したもの ■ test ● ● 6本 (3試合分) 分割方法の考え方の観点 ○ ○ データリークとなり得る要素はあるか? ■ Yesであれば○○GroupKFold ラベルの分布の偏りはあるか? ■ YesであればStratified○○KFold Copyright© Fixstars Group 動画毎のアクション数内訳 video_id play throwin challenge 1606b0e6_0 319 21 56 1606b0e6_1 434 13 60 35bd9041_0 355 8 48 35bd9041_1 290 12 57 3c993bd2_0 347 14 53 3c993bd2_1 289 17 70 407c5a9e_1 283 11 56 4ffd5986_0 235 10 57 9a97dae4_1 237 6 48 cfbe2e94_0 241 29 35 cfbe2e94_1 232 15 38 ecf251d4_0 324 16 46 49
データセットの分割方針検討 参考ページ https://www.kaggle.com/competitions/dfl-bundesliga-datashootout/ ● 実際のコンペの事例からどの分割方法が良いか考えてみましょう ○ データリークとなり得る要素はあるか? → Yes Yes StratifiedGroupKFold No GroupKFold Yes StratifiedKFold No KFold ラベルの分布の偏りは あるか? Yes データリークとなり得る 要素はあるか? No 同じ試合がtrainとvalに分かれてしまうと、 予測が簡単になってしまう可能性があるため ここはYes。 同じ試合を一つのグループとみなして分割したい。 ラベルの分布の偏りは あるか? Copyright© Fixstars Group 50
データセットの分割方針検討 参考ページ https://www.kaggle.com/competitions/dfl-bundesliga-datashootout/ ● 実際のコンペの事例からどの分割方法が良いか考えてみましょう ○ ラベルの分布の偏りはあるか? → Yesだが今回のケースではどちらでも良い アクションごとに発生頻度に偏りがあるのでYes だが、以下のような事情からStratifiedはしなくて もよい - 1動画の中に各アクションは必ず含まれる - 動画数が12本と少なくかつグループの単位が 動画のため、均等に分割することが難しい Yes StratifiedGroupKFold No GroupKFold Yes StratifiedKFold No KFold ラベルの分布の偏りは あるか? Yes データリークとなり得る 要素はあるか? No ラベルの分布の偏りは あるか? Copyright© Fixstars Group 51
Kaggleコンペ参加の基本的な流れ ● Kaggleプラットフォーム上で完結する場合の基本的な流れ Copyright© Fixstars Group 52
ベースラインモデルの 作成と提出 Copyright© Fixstars Group
ベースラインモデルの学習/推論環境整備 ● 今後モデルを改善していく上でのベースとなるモデルを作る ● EDAの時と同様、右も左も分からない場合は公開Notebookベースが楽 ○ 学習用Notebook, 推論用Notebook, 学習済モデルがセットで公開されていることが多い ○ 公開Notebookが複数ある場合は最もVote数の多いもの選択するのが無難 ■ Scoreの一番高いものを選択しても良いが、公開されたモデルを単純にアンサンブルを しているだけ等の場合もあるため内容を確認した上で選択することが大事 ○ 公開Notebookベースでベースラインモデルの環境を整備する手順はデモのパートで説明する Copyright© Fixstars Group 54
ベースラインモデルの学習/推論環境整備 ● 自分でベースラインモデル用のNotebookを作成する場合は、学習用と推論用の Notebookを準備する ● ベースラインモデルを自前で作る場合のTips ○ ○ ○ 事前学習済みのシンプルなモデルを使う 定番の学習設定(利用するライブラリのデフォルト設定でもよい)から始める ライブラリを活用する ■ ○ ○ Pytorch Lightning, OpenMMLab, timm, etc. まずは少ない枚数のデータセットで学習・推論が上手くいくことを確認する 疑似乱数のseedを固定する等、出来る限り再現性を確保する ■ ■ 最低限、データの分割方法は実験毎に変わらないよう固定したい その他再現性に関するテクニックは公式ページを参照 ● https://pytorch.org/docs/stable/notes/randomness.html Copyright© Fixstars Group 55
ベースラインモデルの学習/推論 ● 環境が整備できたら全てのデータで学習を実行する ● 学習が完了したら出力されたモデルをDatasetとして保存する ● 学習されたモデルを保存したDatasetを追加した推論用Notebookを実行する Copyright© Fixstars Group 56
ベースラインモデルの学習に関する注意点 ● Kaggleプラットフォーム上で学習を実行する場合、週30時間のGPU quota を効率良く活用することが重要です ● Notebookの編集画面でGPUインスタンスと接続していると、学習を実行し ていなくてもGPU quotaが消費されてしまいますので、開発時に対話的な実 行が必要であればCPUインスタンスで作業をすることをオススメします ● GPU quotaはCET時間の毎週金曜から土曜に掛けての夜中にリセットされる ので、それを見越したスケジューリングをするとよいです ● その他Tipsは公式ページをご参照ください ○ https://www.kaggle.com/docs/efficient-gpu-usage Copyright© Fixstars Group 57
ベースラインモデルの推論に関する注意点 ● 推論用Notebookを実際に提出する際はNetworkに繋げないことに注意 ○ Network経由でライブラリをインストール出来ない ○ KaggleのDocker環境上にデフォルトでインストールされていないライブラリ等はDatasetと して配置しておく必要がある (デモのパートで具体例を挙げる予定) ● 推論用Notebookをsubmitした後は実際のtestデータセットが見える状態で 実行されるので、そのような状態を想定したコードにしておく必要がある ○ 例えば、見えているtestデータセットの枚数に依存したコードを書く等してしまうと、提出 時に意図した推論が実行されない Copyright© Fixstars Group 58
ベースラインモデルの精度検証 ● validationデータセット全体に対する精度を算出する ○ 学習用Notebookまたは推論用Notebookで既に算出出来ている場合はその値を使用すればよ いが、算出していない場合は別途実装が必要 ○ ここで算出した精度はPublic test dataでの結果と相関を確認する大事な指標になるので、実 験条件とセットで記録しておく ■ 実験管理方法については本セミナーの後編で解説予定 ● ここでの精度検証に用いる指標はコンペの精度評価指標に出来る限り合わせ たものにする ○ 出来る限りと書いた理由はコンペによっては明確に算出方法が与えられない場合があるため Copyright© Fixstars Group 59
ベースラインモデルの提出 ● 精度検証の結果が問題無ければ、testデータに対して推論用Notebookを実 行する ● 実行時にエラーが出た場合は修正して再度実行する ● エラーなく完了したら、Submit to Competitionボタンを押して提出処理を 実行する ○ ここから隠されていたPublic test dataおよびPrivate test dataに対する推論が実行される ● 推論が完了したらsubmissionsページにスコアが表示される ○ Activeなコンペの場合はスコアに応じてLeaderboardも更新される Copyright© Fixstars Group 60
Kaggleコンペ参加の基本的な流れ ● Kaggleプラットフォーム上で完結する場合の基本的な流れ Copyright© Fixstars Group 61
ベースラインモデルの 精度改善 Copyright© Fixstars Group
ベースラインモデルの分析 ● やみくもに精度改善策を試す前に分析を実施すると効率的に改善を実行でき ます ● 基本的な分析の観点 ○ ○ 学習結果に問題は無いか? ■ 過学習 (trainデータに過剰に適合し、validationの精度が低い) ■ 未学習、学習不足 (trainデータに十分に適合できず精度が低い) 推論結果に問題は無いか? ■ データセットの不備が疑われるような推論が見られる ■ 苦手なクラス、シーンがある ■ False positive、False negative Copyright© Fixstars Group 63
ベースラインモデルの精度改善 ● 学習結果に問題がある場合の改善策 ○ ○ 過学習 ■ データ拡張の追加・パラメータ調整 ■ モデルの規模を小さくする (モデルの表現力を下げる) ■ 正則化の追加 (L1正則化、L2正則化、Dropout、etc.) 未学習、学習不足 ■ データの入力方法や前処理を見直す ■ モデルの規模を大きくする (モデルの表現力を上げる) ■ 学習パラメータ(学習率、Optimizer、スケジューラ、etc.)の設定を見直す Copyright© Fixstars Group 64
ベースラインモデルの精度改善 ● 推論結果に問題がある場合の改善策 ○ データセットの不備が疑われるような推論が見られる ■ ○ 苦手なクラス、シーンがある ■ ■ ○ 原因となっているデータを抽出し、ラベルを修正または除去する データ拡張の追加・パラメータ調整 loss関数の変更 False positive、 False negative ■ ■ ■ ■ ■ 後処理の追加 後処理のパラメータ調整 解像度を上げる Test time augmentation モデルアンサンブル Copyright© Fixstars Group 65
Kaggleプラット フォーム上でのデモ Copyright© Fixstars Group
Kaggleプラットフォーム上でのデモ ● 対象コンペ ○ https://www.kaggle.com/competitions/plant-pathology-2021-fgvc8 ○ リンゴの木の葉面病害のカテゴリーを識別する Multi-label classification ● デモ内容 (具体的な手順はAppendix参照) ○ コンペの基本情報確認 ○ 簡単なEDAの実行 ○ 学習用Notebookの作成およびベースラインモデルの学習実行 ○ 推論用Notebookの作成およびベースラインモデルの推論実行 ○ ベースラインモデルの提出 ○ 精度改善 Copyright© Fixstars Group 67
まとめ ● Kaggleの画像系コンペに参加する際の基本的な流れを説明しました ● 今回説明した手順をベースに試行錯誤すれば、コンペによっては銅メダルレ ベルまでは獲得可能と思われます ● Kaggleが初めてという方、またこれまでハードルの高さを感じて画像系コン ペに参加されてこなかった方はこの機会にぜひチャレンジしてみてください Copyright© Fixstars Group 68
参考文献 ● The Kaggle Book:データ分析競技 実践ガイド&精鋭31人インタビュー ○ URL: https://book.impress.co.jp/books/1122101060 ○ 本日のセミナーで説明した各項目を掘り下げた内容 ● Kaggleに挑む深層学習プログラミングの極意 ○ URL: https://www.kspub.co.jp/book/detail/5305133.html ○ 画像系コンペを題材に入門的な内容から精度改善手法までを丁寧に説明 Copyright© Fixstars Group 69
Appendix ● 以降のスライドでは本日お見せしたデモの手順を示します Copyright© Fixstars Group 70
簡単なEDAの実行 ● コンペのページから新規Notebookを作成 ● 以下の観点を確認する処理を追加し実行する ○ データセットの枚数確認 ○ メタデータ情報の確認 ○ ラベルの種類の確認 ○ ラベルの出現頻度の確認 ○ 画像の解像度の確認 ○ 画像の可視化 ● 実行結果を確認しながら気づいた点をメモする Copyright© Fixstars Group 71
学習用Notebookの作成およびベースラインモデルの学習実行 (1/2) ● ベースラインとする公開Notebookにアクセス ● ○ https://www.kaggle.com/code/pegasos/plant2021-pytorch-lightning-starter-training/ Copy & Edit ボタンを押す ○ コンペへの参加確認のポップアップが出現した場合は Competition Rules を確認し、問題が無ければ I Understand and Accept ボタンを押す ● 内容を確認する ○ Notebookの初回起動時の時点ではまだGPUインスタンスは有効になっていないため、GPU quotaは消費し ない状態ですのでご安心ください ● Save Version ボタンを押して、Save ボタンを押す ● ○ Notebookのバージョンが保存されると同時にGPUインスタンスでの学習処理が実行されます 左下のActive Eventボタンから実行したNotebookを開き、問題無く動作していることを確 認する ● 無事実行に成功していれば学習完了まで待つ Copyright© Fixstars Group 72
学習用Notebookの作成およびベースラインモデルの学習実行 (2/2) ● Notebookの実行が Failed になる場合は原因を特定・修正する ○ 今回のベースラインNotebookではtimmのライブラリを pip でインストールする際にエラーが出ていたので、 timmのバージョンを固定するために推論用Notebookで使用しているtimmを使用するよう修正しています ○ バージョン固定されていないライブラリの影響で古いコードが動かなくなるのは業務でも頻出 ● Notebook右側のDataセクションのAdd Dataボタンを押して、pytorch_image_library を 追加 ○ https://www.kaggle.com/datasets/pegasos/pytorch-image-library ● timmをインストールするコマンドを削除し、追加した pytorch_image_library 内のtimm を使用するよう修正する ● Save Version ボタンを押して、Save ボタンを押し、再度学習を実行する ● 実行が完了したらNotebookのOutputからNew datasetを押して、学習結果を保存する Copyright© Fixstars Group 73
推論用Notebookの作成およびベースラインモデルの推論実行 ● ベースラインとする公開Notebookにアクセス ○ ● ● ● ● ● https://www.kaggle.com/code/pegasos/plant2021-pytorch-lightning-starter-inference Copy & Edit ボタンを押す 内容を確認する Notebook右側のDataセクションのAdd Dataボタンを押して、先ほど保存した学習結果を追加 学習したモデルで推論が実行されるようにモデルのパスを修正 Save Version ボタンを押して、Save ボタンを押す ○ Notebookのバージョンが保存されると同時にPublicなtestデータに対するGPUインスタンスでの推論処理が実行され ます ● ● ● 左下のActive Eventボタンから実行したNotebookを開き、問題無く動作していることを確認する 無事実行に成功していれば推論完了まで待つ 実行が完了したら、Outputにsubmission.csvが生成されていることを確認する Copyright© Fixstars Group 74
ベースラインモデルの提出 ● 推論用Notebookの実行が完了したら、Notebook右上の︙ からメニューを 開き、Submit to competitionボタンを押し、詳細を記入してSubmit実行 ○ ここからPrivateなtestデータに対する推論が実行されます ■ ここの推論はGPUインスタンスで実行されますが、ユーザのGPU quotaは消費されま せん ● 推論が完了したら、Submission一覧にPublic scoreが表示されます ○ https://www.kaggle.com/competitions/plant-pathology-2021-fgvc8/submissions Copyright© Fixstars Group 75
ベースラインモデルの精度改善 ● 入力解像度を上げて再度学習を実行 ○ 解像度を上げるとGPUメモリが足りなくなるため、batch_sizeの調整とgradient accumulationの適用を実施しています ○ もともとのbatch_size=32のところ、半分のbatch_size=16としてgradient accumulation=2とすることで重み更新時の実質のbatch_size=32となります ● 学習が完了したらDatasetを更新 ● 推論用Notebookを以下のように修正しこれまでと同様の手順で提出まで実 行 ○ 学習時と同じ解像度で推論するよう修正 ○ Input Dataの学習済みモデルを更新 Copyright© Fixstars Group 76
Thank you! お問い合わせ窓口 : [email protected] Copyright© Fixstars Group