はじめに
この記事ではatmaCup-22の概要とどのような手法が用いられていたかをまとめます。
運営の皆さん、参加者の皆さんありがとうございます🙇
このような素晴らしいコンペティションを開催していただき、感謝いたします。
適宜、皆さんのDiscussionを参考にさせていただきました。
大変勉強になります。ありがとうございます。
また、勝手ながらに本記事で引用をさせていただきました。
何かありましたら対応しますのでお願いします。
atmaCup-22とは
#22 CA x atmaCup 3rd :|| で開催されているデータ分析コンペティションです。
バスケットボール選手の判別を目的としており、画像データを用いて選手を識別するタスクが与えられています。
用語
今回のコンペを理解する上で重要な用語を紹介します。一般的な用語については説明を省略します。
- CrossEntropyLoss: 多クラス分類タスクでよく用いられる損失関数。モデルの出力と正解ラベルとの間のクロスエントロピーを計算する。
- BCEWithLogitsLoss: バイナリ分類タスクでよく用いられる損失関数。シグモイド関数とバイナリクロスエントロピー損失を組み合わせたもの。
- ResNet18/34/50/101/152: Microsoftが提案したCNNアーキテクチャ。残差学習を導入することで、非常に深いネットワークの学習を可能にした。
- EfficientNet: Googleが提案したCNNアーキテクチャ。モデルのサイズをスケーリングするための効率的な方法を提供し、高い精度と計算効率を両立している。
- CutMix: データ拡張手法の一つ。2つの画像をランダムに切り取り、切り取った部分を入れ替えることで新しい画像を生成する。
- MixUp: データ拡張手法の一つ。2つの画像とそのラベルを線形に組み合わせることで新しい画像を生成する。
- Bounding Box (バウンディングボックス): 画像内の物体を囲む長方形の領域。物体検出タスクにおいて、物体の位置とサイズを示すために使用される。
- IoU: Intersection over Unionの略。物体検出における予測領域と正解領域の重なり具合を示す指標。
- (予測領域と正解領域の交差部分の面積) ÷ (予測領域と正解領域の和集合部分の面積) で計算される。
- 距離学習: Deep Metric Learningとも呼ばれ、データポイント間の類似度を学習する手法。特徴空間において、同じクラスのデータポイントは近くに配置され、異なるクラスのデータポイントは遠くに配置されるように学習される。
- 損失関数として、昔はTriplet Lossが流行っていましたが、最近はSoftmaxベースの損失関数(ArcFace, CosFace, AdaCosなど)が主流です。
- 紹介記事: よくわかる角度系深層距離学習~前編 #機械学習 - Qiita
- YOLO: You Only Look Onceの略。リアルタイム物体検出アルゴリズムの一つ。
- SAM: Segment Anything Modelの略。Metaが開発した大規模な画像セグメンテーションモデル。画像内の任意のオブジェクトを高精度で検出・セグメンテーションすることができる。
- LP: 線形計画問題 (Linear Programming) の略。目的関数と制約条件がすべて線形で表される最適化問題。
振り返り
データ分析のコンペティションについて、主に次の内容を理解することが大切だと考えています。
- TrainとValidationの作成方法及び、Testデータの性質
- 前処理の方法
- モデルのアーキテクチャ
- 学習方法
- 後処理
今回のコンペではどのような点が重要になるか、Discussionの内容を踏まえて考察します。
1. TrainとValidationの作成方法及び、Testデータの性質
次のDiscussionで詳しく説明されています。
-
CV戦略について(追記)
- 分割方法:クォーターごとにGroupKFoldを用いている。
-
第一回_問題を理解してsubmissionする!
- 分割方法:random splitを用いている。
-
第二回講座 モデルを「信用できる形」にする
- 分割方法:クォーターのグループごとにShuffleSplitを用いている。
-
2nd Place Solution
- 分割方法:クォーターごとにGroupKFoldを用いている。
2. 前処理の方法
次のDiscussionで詳しく説明されています。
-
2nd Place Solution
- PositiveSample: 画像のリサイズをした後にIoUを計算して、基準を満たすものを抽出している。
- NegativeSample: 任意の選手とIoU < 0.5となるバウンディングボックスをランダムに抽出している。
- 制約条件の工夫: フレーム及び選手に対して、ほとんどの確率で1枚の画像しか選ばれないようにしている。
- Augumentation: Resize, ColorJitter, RandomErasingなどを利用している。
-
4th Place Solution
- Sample: Augmentationの割合に制約を加えてIoUがどのようになるかを保証している。
3. モデルのアーキテクチャ
次のDiscussionで詳しく説明されています。
-
2nd Place Solution
- モデル: EfficientNet -> logitsを取得し、LightGBMへ (そのほか、擬似ラベルについて用いるなどの工夫もされていました。)
- 損失関数: CrossEntropyLoss
-
4th Place Solution
- モデル: EfficientNet B0 -> モデルの出力について割り当て最適化を行う(そのほかUnionFindなどによる再最適化の工夫もされていました。)
- 損失関数: BCWithLogitsLoss (複数人が写っている場合、それぞれ高い予測をさせたかったり、未知の選手の場合SoftmaxではなくSigmoidを用いたいため)
-
[0.8072]baseline + Arcface(+Pytorch lightning)
- モデル: ResNet + ArcFace
4. 学習方法
次のDiscussionで詳しく説明されています。
-
2nd Place Solution
- Optimizer: Adam
- Learning Rate Scheduler: CosineAnnealingLR
- Epoch: 10
- Learning Rate: 1e-4 ( EfficientNet のみ 1e-3 )
-
[0.8072]baseline + Arcface(+Pytorch lightning)
- Optimizer: AdamW
- Learning Rate Scheduler: CosineAnnealingLR
- Epoch: 20
- Learning Rate: 1e-3
5. 後処理
次のDiscussionで詳しく説明されています。
-
[0.8570] ⇒ [0.9549] かなり精度が上がるかもしれない個数制約付き最大化による後処理 , [0.8293] ⇒ [0.8619] かなり精度が上がるかもしれない個数制約付き最大化による後処理 (ver :||)
- Linear Programmingを用いて、各フレームに写っている選手の数の制約を満たすように予測を最適化している。
そのほか
モデルの学習の際に、どのように改善を施すかについて考える必要があります。
画像コンペということもあり、ローカル環境で動くWebアプリをAIで作成し、学習の進捗を可視化している方もいらっしゃいました。
-
6th Plath Solution: Active Learning
- FastAPI, htmxを用いて、予測の内容を可視化するWebアプリを構築している。
-
EDA webアプリを新形式に対応
- Reactを用いて、画像データを可視化するWebアプリを構築している。
おわりに
atmaCup-22の概要と、どのような手法について詳しいと良い成績が残せそうかの考察を述べました。
この記事が皆さんの参考になれば幸いです。
私も引き続き勉強していきたいと思います。