28.7K Views
October 03, 23
スライド概要
これまでの Kaggle スコアアップシリーズでは、過去に参加し、メダル獲得・Kaggle Competitions Master の称号獲得をしたコンペについて、課題の解決手法とスコアアップのための改善手法について紹介してきました。
前回はKaggle画像系コンペ入門 前編 と題し、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 に挑戦し、スコアを上げていきたいと考えている方 Copyright© Fixstars Group 2
発表者紹介 冨田 明彦 飯塚 康太 ソリューションカンパニー 営業企画 ソリューション第二事業部 シニアエンジニア 2008年に入社。金融、医療業界において、 ソフトウェア高速化業務に携わる。その後、 新規事業企画、半導体業界の事業を担当し、 現職。 2019年入社。車載向け深層学習モデル開発に おけるMLOps、とくに各モデルのデプロイを 簡略化するツールの開発を担当している。 Kaggle Competitions Master Copyright© Fixstars Group 3
本日のAgenda ● フィックスターズのご紹介 ● Kaggle画像系コンペ入門 [後編] ● Q&A / 告知 Copyright© Fixstars Group 4
フィックスターズの ご紹介 Copyright© Fixstars Group 5
フィックスターズの強み コンピュータの性能を最大限に引き出す、ソフトウェア高速化のエキスパート集団 ハードウェアの知見 アルゴリズム実装力 各産業・研究分野の知見 目的の製品に最適なハードウェアを見抜き、 その性能をフル活用するソフトウェアを開 発します。 ハードウェアの特徴と製品要求仕様に合わ せて、アルゴリズムを改良して高速化を実 現します。 開発したい製品に使える技術を見抜き、実 際に動作する実装までトータルにサポート します。 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 11
Kaggle画像系コンペ入門 ● Kaggleの画像系コンペを対象とした入門セミナーを2回に渡って開催してい ます ○ 前編: ○ 参加するコンペの選定からベースラインモデルの作成・精度改善まで、Kaggleの画像 系コンペに参加する際の基本的な流れを説明 ○ ○ Kaggleプラットフォーム上で完結する話 ○ https://www.docswell.com/s/fixstars/KLLVPL-20230802 でスライド公開中 後編: ○ ベースラインモデルからさらにスコアを伸ばすための改善方法について説明 ○ クラウドまたはオンプレミス環境を想定した話 Copyright© Fixstars Group 12
Kaggle画像系コンペ入門 ● Kaggleの画像系コンペを対象とした入門セミナーを2回に渡って開催してい ます ○ 前編: ○ 参加するコンペの選定からベースラインモデルの作成・精度改善まで、Kaggleの画像 系コンペに参加する際の基本的な流れを説明 ○ ○ Kaggleプラットフォーム上で完結する話 ○ https://www.docswell.com/s/fixstars/KLLVPL-20230802 でスライド公開中 後編: ○ ベースラインモデルからさらにスコアを伸ばすための改善方法について説明 ○ クラウドまたはオンプレミス環境を想定した話 本日の内容 Copyright© Fixstars Group 13
なぜ?いまさらKaggle画像系コンペ入門? ● これまで書籍等では画像系コンペを扱ったものが少ないため、初心者がいざ 参加しようとした時の敷居が高いのではないかと感じています ○ 本セミナーでは画像系コンペに対するハードルを下げられればと考えています ● また画像系コンペの以下のような特徴も敷居の高さにつながっていると 思われます ○ ○ データサイズ: 数十GBは普通で、多いと数百GBにもなる 計算資源: GPU環境は必須であり、試行錯誤するには無料の環境だけでは不足しがち ● 実際に画像系コンペの参加者は他のデータ形式のコンペよりも少ない傾向が ありますので、逆に言うとこれから参加される方にとってメダル獲得の チャンスは多いと個人的には思っています Copyright© Fixstars Group 14
本日説明する内容についての前置き ● 本セミナーでは、コンペの始まりから終わりまでに必要最低限の一通りの 知識を説明することを主眼に置いています ● 時間も限られているため、特定のコンペに対するアプローチ、具体的な モデル作成方法および各項目の詳細は説明しません ○ このような内容は書籍等でも触れられていますので適宜参考文献をご参照ください ● 特に明示しない限りはCode Competitions形式のコンペを前提とした話を していると思ってください Copyright© Fixstars Group 15
前回の復習 Copyright© Fixstars Group 16
Kaggleコンペ参加の基本的な流れ ● Kaggleプラットフォーム上で完結する場合の基本的な流れ ● ● ● ● コンペの題材とそのトレンドの変化について Code, Discussion から情報収集する CV (Cross Validation) / LB (public LeaderBoard) の相関を確認する 学習結果の定量的・定性的な分析方法について Copyright© Fixstars Group 17
Kaggleコンペ参加の基本的な流れ ● Kaggleプラットフォーム上でとくに精度改善がしづらい場合がある ● GPUに時間制限があるので大量の実験を行うことができない ● 実験どうしの比較をするのが難しい Copyright© Fixstars Group 18
Kaggleコンペ参加の基本的な流れ ● 後編では、 Kaggle プラットフォームに限らず画像系コンペに参加する 際のベストプラクティスについて紹介する ● モデルの精度改善を行いやすい環境をどのように作るか、精度改善をする 際に注目したい部分はどこか、といった疑問に答えたい 点線で囲った内容は前編で説明したもの Copyright© Fixstars Group 19
アウトライン ● 計算機環境の準備 ● 学習/推論環境の選択 ● 実験管理 ● モデルの精度改善 ● コンペ終了後の振り返り ● Kaggle関連の情報収集 ● まとめ Copyright© Fixstars Group 20
計算機環境の準備 Copyright© Fixstars Group 21
計算機環境の準備 ● 画像系コンペの実験をするためには、GPUを使って計算できる環境が必要 ● GPUメモリサイズによって使えるモデルが制約される。提出する推論環境 (Kaggle notebook) では 16GB (P100 または T4) なので、学習環境としても 16GB 以上の メモリがあるGPUを用意したい ● 近年のコンペはデータセットサイズが大きい傾向(最大で500GB程度)なので、 作成したモデルも含めて全体を格納できる、容量が大きく高速なストレージが必要 ● Kaggle プラットフォームのほかにも上記の計算機環境を構築する方法は いくつかある。このセクションではその選択の指針を示す ● 業務で運用する場合とは視点がかなり異なるので注意したい Copyright© Fixstars Group 22
オンプレミス型の計算機環境 ● 計算機環境を自身あるいは自社で保有し運用する方法 ● 実行時間やランニングコストをあまり気にせずに実験ができる一方、初期コストや メンテナンスコストが大きくスケールしづらい ● 所属する会社が Kaggle に協力的な場合は、会社で所有しているGPUサーバーの 空き時間を Kaggle の活動に使えるよう交渉できるかもしれない ● たとえば最低限の環境として RTX4060Ti (16GB) 搭載の PC を用意する場合、 本体に 25 万円程度、電気代として100時間あたり約1000円かかる Copyright© Fixstars Group 23
クラウド型の計算機環境 ● 各社が提供するクラウドの計算機環境を利用する方法 ● 初期コストが小さくメンテナンスが不要で、リソースの追加も比較的容易だが、 ランニングコストを気にする必要がある ● 月額課金で一定量のリソースが使えるサービス(Google Colaboratory Pro など)と、 時間課金のサービス(AWS, GCP, Azure など多数)がある ● 特に月額課金のサービスにおいて、スクリプトの実行方法やデータセットの配置、 再現性を確保する方法など、開発環境に制約ができることもある ● 例として、前ページとほぼ同等の環境 (AWS g4dn.xlarge インスタンス) を 利用する場合、100時間あたり約8000円かかる Copyright© Fixstars Group 24
計算機環境の選択 ● ランニングコストを許容できる場合は時間課金のクラウド環境がよい ● コンペ終了直前など実験をスケールしたい場面ではクラウド環境が有利 ● 会社によってサービスや料金に差があるので比較検討したい ● それ以外で、初期コストを許容できる場合はオンプレミス環境がよい ● 複数のコンペに参加する予定があるなら初期コストが許容されやすい ● 会社の GPU リソースを転用できる場合もそれを使いたい ● どちらも該当しない場合は、月額課金のクラウド環境が利用できる ● Kaggle notebook, Google Colaboratory といった無料の環境は利用時間に 制限があるが、実験数を増やすために有効活用したい Copyright© Fixstars Group 25
仮想環境の作成 ● notebook 形式で提供されるもの(Google Colaboratory 等)を除いて、 環境どうしが交ざらないように仮想環境を作るのがおすすめ ● docker の環境構築が必要になるが、Kaggle 公式の Dockerfile を使用すると Kaggle プラットフォーム上とほぼ同じ環境で作業できる ● ● ● コンテナ名: gcr.io/kaggle-gpu-images/python GPUの差が原因でこの環境が使えない場合もある(最新のGPUを使うときなど) nvcr.io/nvidia/pytorch など別のコンテナを使ったり、 Dockerfile をカスタマイズ することも検討したい ● Python の依存関係のみ管理したい場合は venv, pyenv も使用できる(今回は省略) Copyright© Fixstars Group 26
docker run コマンド ● docker run コマンドには様々なオプションが指定できる ● かなり長くなるので、シェルスクリプト等にコマンドを記載しておくと便利 ● 一例として、 Kaggle 公式 docker 環境を使う際によく利用するオプションを示す docker run ¥ # 共有メモリを増やす、ネットワーク・GPU・シェルを使う、終了時にコンテナを消す --shm-size=8G --net=host --gpus=all -it --rm ¥ # コンテナの中でも同じユーザーを使う(コンテナ内でパッケージを追加しない) -u "$(id -u "$USER")":"$(id -g "$USER")" -v "/etc/passwd:/etc/passwd:ro" ¥ # コンテナの中でKaggleプラットフォームと同じディレクトリ構造を使う -v "$PWD:/kaggle/working" -w "/kaggle/working" ¥ # コンテナ名・イメージ名を指定して実行 --name "$container_name" "$image_name" bash Copyright© Fixstars Group 27
学習/推論環境の選択 Copyright© Fixstars Group 28
学習/推論環境の選択 ● 学習/推論環境の構築方法は大きく分けて Python スクリプトベースか Jupyter notebook ベースの2種類がある ● 業務では再現性や履歴の管理を重視して Python スクリプトで作業することが多いが、 Kaggle での利用という観点ではどちらにも利点がある ● このセクションでは社内でよく使われているフォルダ構成と、それを 利用する利点・欠点を示す ● また併用する場合どのように使い分けるのが良いかについても説明する Copyright© Fixstars Group 29
フォルダ構成 (1/3) ● Python スクリプトで開発する例 ● python train.py configs/config.yaml のように config ベースで設定を読み込む形 ● ● コードの再利用やバージョン管理がしやすい hydra 等を使うか、 scripts/ 以下に train.py を複数回 実行するスクリプトを用意して、ハイパーパラメータの project/ ├─ readme.md ├─ src/ │ ├─ train.py │ └─ test.py ├─ configs/ ├─ models/ ├─ data/ └─ scripts/ 探索を実行できる ● 提出する際は推論用の Kaggle notebook を別途 Kaggle プラットフォーム上で 作成するので、移植する際に問題が発生する可能性が比較的高い Copyright© Fixstars Group 30
フォルダ構成 (2/3) ● Jupyter notebook で開発する例 ● ● ● train.ipynb を直接書き換えてコードを改良していく データの可視化がコードと近い場所でできて記録も簡単 Kaggle が提供する docker と API を利用することで、 Kaggle notebook とほぼ同じ環境を実現できる ● project/ ├─ readme.md ├─ notebook/ │ ├─ train.ipynb │ └─ test.ipynb ├─ models/ └─ data/ ハイパーパラメータの自動探索をはじめとした大掛かりな 実験をするのにはあまり適さない ● 複雑な notebook を作ると極端に可読性・再現性が低下する Copyright© Fixstars Group 31
フォルダ構成 (3/3) ● .py と notebook を併用して開発する例 ● 学習は .py を使い、データ分析と評価を notebook/ ディレクトリで行う形式 ● 完成すれば便利に使えるが、フォルダ構成が複雑なぶん 完成までの作業量が多くなるのが難点 ● まず実験を回し始めることが大切なので、使いやすい project/ ├─ readme.md ├─ notebook/ │ ├─ eda.ipynb │ └─ test.ipynb ├─ src/ │ └─ train.py ├─ configs/ ├─ models/ ├─ data/ └─ scripts/ 慣れた環境を選ぶのが良い ● このセミナーでは前編で notebook を中心に説明しているので、 notebook ベースのほうが扱いやすいという人が多いかもしれない 参考 https://gist.github.com/pomber/91f59d3d43c534df2fa6c83ecba27afa Copyright© Fixstars Group 32
モデル提出フローの確認 ● 推論用の Kaggle notebook はインターネットに接続できないので、 モデルや必要なライブラリは Kaggle dataset としてあらかじめ配置 しておく必要がある ● 推論用の notebook を作成して、実行が完了したら Kaggle のページから Submit to competition ボタンを押して完了 ● 提出のために推論用の notebook を実行する時間も1週間あたりの制限に含まれていて、 提出時の public test の評価は(ローカルで実行している場合)改めてする必要はない ので、 public test の評価を skip するコードを入れて実行時間の短縮を行うことが多い Copyright© Fixstars Group 33
Kaggle API を用いた自動化 ● Kaggle のウェブサイト上で行えることの多くは Kaggle API でもできる ● dataset や notebook, model のアップロードやダウンロードが CUI から使える ( submit の自動化ができる) ● ● competitions list の表示や leaderboard の確認もできる pip install kaggle でインストールして API key を発行すると使えるようになる (詳細は https://github.com/Kaggle/kaggle-api を参照) Copyright© Fixstars Group 34
実験管理 Copyright© Fixstars Group 35
実験管理 ● さまざまな実験を行った結果を比較するためのツールがある ● ● ● MLflow, Weights & Biases (WandB) が有名 comet, neptune.ai, tensorboard など類似のツールがたくさん開発されている Vertex AI, Amazon SageMaker Studio などクラウドに特化したツールもある (今回は省略) ● ツールを使わずに spreadsheet や git で管理する方法もある ● 状況によって使いやすいツールは異なるので、このセクションでは上記の 各ツールについて利用するメリット・デメリットを示す Copyright© Fixstars Group 36
Weights & Biases (WandB) https://wandb.ai/ ● SaaSの実験管理ツール。個人利用は無料だが、チーム・商用利用は有料 ● 複数の Run を Project としてまとめて比較できる ● kfold の実験どうしの比較や random seed の影響の確認など、グループ内や グループ間での詳細な分析が可能 ● レポート作成機能があり、作成した グラフを文書にまとめるのが簡単 ● 個人アカウントを使用する場合、 データをクラウドに上げる必要が あるのでコンペの規約と記録したい データによっては使用できない WandB の画面 Copyright© Fixstars Group 37
MLflow https://www.mlflow.org/ ● オープンソースの実験管理ツール。github で 15.1k Star (2023年9月現在) ● 簡単かつ無料でローカルにサーバーを立てることができる ● 複数の Run を Experiment としてまとめて比較できる ● 複数の Run をグループ化して比較する機能がない、検索機能がSQLベース、など WandB 等に比べると不便な印象 ● モデルのデプロイや実験再現など MLOps 全体の機能を持っている ● 実務では便利だが、コンペでの 実験管理を考えるとややオーバー スペック MLflow UI の画面 Copyright© Fixstars Group 38
その他の SaaS ツール ● comet: WandB に近い機能と価格設定で、より深層学習に特化している ● コード本体やモデルのグラフ定義を記録する機能がデフォルトで整備されている ● neptune.ai: WandB より軽量で安価。active project に対して課金される ● 個人の無料アカウントでは複数プロジェクトを同時に active にできないことに注意 comet でモデル定義を確認する例 Copyright© Fixstars Group neptune.ai の階層的なログの例 39
ツール無しで実験管理する ● ツールが使いづらい状況もよくある ● ● コンペの初期は環境(学習スクリプトのベース)が決まっておらず logger が未実装 コンペの終盤はチームマージをして複数環境の実験をまとめることもある ● ローカルで開発する場合、すべてのコードの差分は git 管理すべき ● たとえばモデル構造を変更して train.py をたたく前に git commit する習慣をつける ● git commit に紐づいて spreadsheet 等に実験の内容を記録しておく ● 社内では GitLab の issue description や comment を活用する例が多い ● Kaggle notebook にもバージョン管理 + コメントの機能がある ● 各 submit のコメントを残しておくと、次の作業のアイデア出しがしやすい Copyright© Fixstars Group 40
まとめ ● コンペのルールで使用可能なときは WandB または comet がよい ● ● チームでコンペに取り組む場合はチームライセンス or 商用ライセンスが必要 WandB はチーム内の利用実績が多いが、今回試した範囲では comet もほぼ 同等の選択肢となりそう。UIとして確認できる情報がやや異なるので比較したい ● それ以外で、開発環境が単一のときは MLflow がよい ● 開発環境を決めるまでや、複数環境における実験管理は、ツールを有効に 使えないことが多い ● この場合は Kaggle notebook や spreadsheet 等を活用する Copyright© Fixstars Group 41
モデルの精度改善 Copyright© Fixstars Group 42
精度改善作業の概観 ● コンペの序盤は、実験を回しながらモデルの分析ができる基盤を整える ● 過学習と未学習の判別をはじめ、定性的な分析と定量的な分析の材料を揃える ● その後、分析した結果をもとに様々な精度改善手法を試していく ● ● ● ● ● 過学習の抑制 モデル構造の選択 時系列データの活用 ハイパーパラメータ探索 複数モデルの活用 ● 最後に、どのモデルを提出するかを検討する Copyright© Fixstars Group 43
過学習・未学習の分析 ● まずは train/val loss をプロットして汎化性能を確認する ● ● ● train loss, val loss とも下がっている状態(下図の点線部)が望ましい train loss が下がっているが val loss が上がっている状態を過学習という train loss が下がらない(val loss も下がらない)状態を未学習という Copyright© Fixstars Group 44
過学習・未学習の対策 ● 過学習の場合はさまざまな対策が知られている(前編も参照) ● 正則化やdropoutのパラメータ調整、モデル規模の縮小、データ拡張、など ● 未学習の場合は実装に問題があることが多い ● ● ● とくにデータの前処理や推論結果の後処理の部分にバグがないか確かめる ハイパーパラメータが適切か確かめる(学習率が小さすぎる/大きすぎる、など) 学習画像を1枚など極端に減らしたとき過学習するならOK ● モデルの構造や実装の深い部分に問題があって改善が難しい場合は、あまり こだわらずに別のモデル・実装を試す Copyright© Fixstars Group 45
学習状況の確認 ● 実験管理ツールに記録させたい内容 ● ● ● ● ● ● train/validation データに対する loss (複数ある場合はそれぞれ記録する) validation データに対するコンペの評価指標( leaderboard との相関をみるため) 補助的な評価指標(混同行列、Precision-Recall curve など) 学習時に入力される画像のサンプル(データ拡張のバグを見つけるため) 推論結果のサンプル(苦手なクラスやシーンの傾向をつかむため) ツールによるが、学習時間・GPUメモリなどは半自動的に記録されることが多い ● 定性的/定量的なモデルの比較をすべて実験管理ツール上で行えるように 整備する Copyright© Fixstars Group 46
誤りの傾向とその対策 ● ツールが準備できたら誤りの傾向があるか確認する ● 典型的な誤りの例 ● 小さい物体の精度は下がりやすい ● ● ● 入力画像サイズを大きくする 物体のサイズに依存しづらいモデル(anchor free の detector など)を使う データ数の少ないクラスの精度は下がりやすい ● ● ● データ拡張を増やす ラベルなしデータが付属する場合は半教師あり学習を試す データ数の多いクラスの loss を小さくする(focal loss など) Copyright© Fixstars Group 47
pretrain と fine-tuning ● pretrain として使うデータセット・モデルの選択 ● 基本的には巨大な画像分類データセット(ImageNet-1K, ImageNet-21K など)で 学習した重みを使用する ● ● CNN 系と Transformer 系のモデルは両方試す(タスクによって有利不利がある) fine-tuning したいタスクに類似したタスクのモデルやデータセットが存在する場合 (過去に似たコンペがあったときなど)はそれを用いることも考えられる ● fine-tuning するときに重みを壊さないように注意する ● ● パラメータを更新するレイヤをモデルの下流部分に制限する 学習の最初に小さい学習率を使う (warmup) Copyright© Fixstars Group 48
時系列データの活用 ● 近接フレームの入力に対して推論結果が近いことを利用した後処理ができる ● 分類モデルの場合は単純に近接フレームの移動平均を計算したり、NMSを使って 誤検出の抑制をしたりすることが多い ● 物体検出の場合はトラッキング、セグメンテーションの場合はフローなども利用できる ● 複数フレームを入力とするモデルを作るとさらに精度改善が見込める ● segmentation_models.pytorch 等には入力 ch 数を変更するオプションがあり、 pretrain の重みを簡単に使用することができる ● モデル構造を変えなくても、入力をカラーからモノクロに変換して直前・直後の フレームを結合して入力する方法もある Copyright© Fixstars Group 49
ハイパーパラメータ探索 ● ある程度学習が上手くいくようになったら、複数のハイパーパラメータを 走査して一番良いパラメータを調べる実験を行う ● 単純なグリッドサーチでは組み合わせが膨大になるほか、無意味なパラメータで長く 学習しない(枝刈り)等の機能が欲しいので、 optuna などのハイパーパラメータ 探索ライブラリを活用したい ● 学習率の分布を log-uniform にする等、適切な分布・最適化アルゴリズムを 選定することが重要 Copyright© Fixstars Group 50
複数モデルの活用 ● 異なる複数のモデルの推論結果を組み合わせて精度を上げる方法もある ● 各モデルの精度がある程度平均的に高いことが前提なので、そうでない場合はまず 1モデルでの精度改善を行う ● アンサンブル ● ● モデル構造やデータセット (fold) によって推論傾向が違うので、それを組み合わせる weighted boxes fusion (detection) など、タスクによって組み合わせ方はさまざま ● stochastic weight averaging ● 学習中のモデルの重みの加重平均をとると精度が向上することがある Copyright© Fixstars Group 51
実験計画の立て方 ● 基本的にはひとつずつパラメータを変えて実験していくべき ● ただし例外もある。たとえば、モデルサイズの変更による精度の変化を確認したいとき、 学習率スケジューリングの最適値がモデルサイズに従属して変わることがある。 この場合も最低限の個数(できれば2個)に絞って実験する ● ランダム性をどこまで容認するか(ひとつのパラメータについて何回実験するか)も 問題になりうるが、Kaggle は開催期間が短いこともあり、ベースモデルだけ複数回 学習して精度のおおよその分散を把握しておくことが多い ● パラメータ探索よりも、問題に対する本質的な対策を優先して実験する ● たとえば時系列処理なら 2.5d モデルを早めに試してみる、など 参考: https://github.com/google-research/tuning_playbook Copyright© Fixstars Group 52
精度検証環境の改善 ● cross validation と public leaderboard の相関がとれないとき ● train と validation に似ている画像が存在している可能性がある ● ● 撮影日、撮影者などの情報がある場合はそれを基準にデータを分割しなおす アノテーションの正確さに問題がある可能性がある ● ● アノテーションの修正などの discussion を見逃さないようにする アノテーションがずれている、データリークしている等、重大な問題はコンペ 終了まで discussion に挙がらないこともあるので、 public にある情報を見る だけでなく自分でも EDA にある程度時間をかけたほうがよい ● 原因不明で、他にもコンペがあるならそちらに手を出してもよい Copyright© Fixstars Group 53
提出モデルの選択 ● 多くのコンペでは2個のモデルを private test dataset で評価して最終的な private leaderboard が作られる ● ユーザーが選択しない場合は public leaderboard のスコア順に選ばれる ● private leaderboard との相関が期待できそうならこのままでもよい ● 任意のモデルをユーザーが選択して最終提出に使うことができる ● 基本的には CV のスコアが良い順に選ぶ (trust your CV) ● CV と public leaderboard の相関が小さい(private leaderboard との相関が期待 できない)場合は public leaderboard のベストを利用することも考える ● なるべく再現性が期待できるモデルを選びたい ● とくに賞金圏内の場合は、その解法を運営側が再現できることを求められる Copyright© Fixstars Group 54
コンペ終了後の 振り返り Copyright© Fixstars Group 55
コンペ終了後の振り返り ● まずは上位の参加者の notebook や discussion を確認する ● 共通して使われているテクニックがあれば詳しく調べておく ● 自分の解法もまとめるのがおすすめ ● 上位になったときはもちろん、そうでないときも作業内容をまとめておくと次の コンペに生かしやすくなる ● late submission ができるコンペは有効活用したい ● 上位解法の再現や、自分の解法の改善などに取り組める Copyright© Fixstars Group 56
Kaggle関連の 情報収集 Copyright© Fixstars Group 57
論文調査 ● notebook や discussion をひととおり確認して精度改善のアイデアが 足りない場合は、論文を探すことも視野に入れる ● 新規タスクの場合など discussion にあまり情報が出てこないこともある ● 被引用数や参考実装の有無を重視して、下記のようなツールを使って 調べると比較的参考になるものが見つけやすい ● ● ● ● https://paperswithcode.com/ https://www.connectedpapers.com/ https://github.com/arXivTimes/arXivTimes https://xpaperchallenge.org/cv/survey/ Copyright© Fixstars Group 58
Kaggle 関連の情報収集 ● 論文以外にも Kaggle 関連の情報はいろいろなところで得られる ● http://discord.gg/kaggle (official) ● ● ● ● コンペごとに discord サーバーが立てられることもある https://weeklykagglenews.substack.com/ https://kaggler-ja.slack.com/ https://twitter.com/hashtag/kaggle ● 有名なユーザーをフォローしておくと情報が得やすい Copyright© Fixstars Group 59
まとめ Copyright© Fixstars Group 60
Kaggle に取り組む意味 ● kaggleの活動はさまざまなところで役に立つ ● ● Kaggle の成績をもとに採用する会社があるなど、技術の証明になる 分析やアイデア出しが必要になる業務はたくさんあり、そのトレーニングになる ● kaggleは楽しい ● ● 失敗しても大丈夫な環境で、最新の技術や実験的なトピックが気軽に触れる 世界中の人と discussion したり、ときには team を組んだりして深く交流できる Copyright© Fixstars Group 61
まとめ ● Kaggleでより良い成績を狙うには、たくさん試行錯誤する必要がある ● ● ● ● そのために計算機環境、実験管理ツールの整備などが必要 精度改善の方法も多数あり、コンペによってどれが有効かは分からないことが多い 最終的なモデルの選択など、1回のコンペで一度しか試せないこともある コンペ開催期間以外にも、コンペの振り返りや情報収集ができる ● みなさんもKaggleを楽しみましょう! Copyright© Fixstars Group 62
Thank you! お問い合わせ窓口 : [email protected] Copyright© Fixstars Group 63