2022年OpenMMLabに出したPRまとめ
「Kaggle Advent Calendar 2022」の 14日目の記事を担当します。 Kaggleをやる上で、自分のお気に入りのtoolであるOpenMMLab。2022年はContributeもしたので、その内容をまとめたいと思います。これをみて、こんな機能も使えるのか!と思ってもらい、Kaggleで使う人が増えたら嬉しいです。
## OpenMMLabとは
“To the Best Experience of Research and Production. The most influential open-source computer vision algorithm system in the deep learning era.” をテーマとして、Computer VisionのさまざまなOSSを実装、公開しているチームです。
1番のおすすめポイントは、1つのlibraryを覚えるだけで、Computer Visionの多くのタスクを扱うことができる点です。Kaggleでは、mmdetectionが1番メジャーですが、classificationやsegmentationもあり、2022年のKaggleコンペは全てOpenMMLabを使って参加しました。Kaggleではあまり使いませんが、GenerationやSuper Resolutionなど、そのほかの多くのタスクも扱えます。
以前、Kaggle Days Championship Tokyoで"Tutorial of OpenMMLab"というテーマで発表もさせていただきました。(発表時から、major versionのupdateもあり、仕様が変わったところがあるので、注意してください。)
CVPRのTutorialやYouTub、lecture、YOLOVISIONでの発表など、多くの資料も存在するので、よかったらみてみてください。
## Contributeした内容まとめ
さて、ここからは本題のContributeした内容まとめに入っていきます。1つ1つ、1言程度で紹介していきます。
・[Fix] Set the priority of EvalHook to "LOW" to avoid a bug of IterBasedRunner
初めてのContributeは簡単なbug fixからでした。
・[Refactor] Use reset_classifier to remove head of timm backbones
Kaggleでもお馴染みのtimm。mmclassificationでも使うことができます。reset_classifierを行なって、余分なheadを削除しました。
・[Feature] Support using checkpoint in Swin Transformer to save memory
クジラコンペのsolutionにも記載したGradient checkpointingをSwinでサポートしました。
・[Enhance] Suport Mixup&Cutmix for multi-label task
multi labelでもmixupやcutmixができるようにしました。
ResizeMixをサポートしました。
・[Feature] Support gem pooling
Kaggleのmetric learning系のコンペでお馴染みのGeMをサポートしました。
TTAの設計を行いましたが、mergeまでは行かず、major version updateに合わせて、現在再設計中です。
・[Feature] Support CUB dataset
Fine-Grained ClassificationのベンチマークdatasetであるCUBをサポートしました。運営の方が、SwinやResNetで高い精度のベンチマークmodelも作成し、公開しています。
MixUpを最後数epoch止めたり、Data Augmentation Revisited:
Rethinking the Distribution Gap between Clean and Augmented Dataのように、途中でaugmentationをswitchするためのhookを設計しました。これ自体はmergeまでいきませんでしたが、major version updateに合わせて、運営が再設計してくれ、今は使えるようになっています!https://github.com/open-mmlab/mmclassification/pull/1101
新しいbackboneとして、Visual Attention Networkをサポートしました。
・[Feature] add lazy linear head
・[Feature] Support LazyLinear Head
configで、headのchannel数を指定しなくてもすむように、lazy linearをサポートしました。現在レビュー中です。
・[Feature] File names in result
推論apiの推論結果に、filenameが入るようにしました。これ自体はmergeされませんでしたが、major updateに合わせて、運営がこの機能を追加してくれました。
metric learningの追加が行われていた時期で、arcfaceの設計を提案しました。この後、運営でこの設計を参考にしつつ、metric learningの開発を行なってくれました。
よりシンプルなconfigシステムを提案しました。これはマージされませんでしたが、現在もよりシンプルなconfigや、modelの呼び出し方など、運営とContributerが一緒になって考えています。
例えば、mmclsのconfigシステムを使わない場合でも、timmのような呼び出しができるようになりました。https://github.com/open-mmlab/mmclassification/pull/1236
・[Feature] Support HorNet Backbone
・[Feature] Support HorNet Backbone for dev1.x
新しいbackboneとして、HorNetをサポートしました。
・[Enhancement] RepVGG for YOLOX-PAI
・[Enhancement] RepVGG for YOLOX-PAI for dev-1.x
・[Feature] Support YOLOX-PAI 3.x
・[Feature] Register a new activatation layer SiLU to ACTIVATION_LAYERS
・[Enhancement] Support SiLU with torch < 1.7.0
mmcv、mmcls、mmdetに渡ってPRを作成し、YOLOX-PAIをサポートしました。一部レビュー中です。
新しいbackboneとして、DeiT3をサポートしました。
・[Enhancement] Get scores from inference api
推論apiから、scoreを得られるようにしました。
・[Enhancement] Update analyze_results.py for dev-1.x
major version updateに合わせて、error分析のscriptを修正しました。
新しいbackboneとして、DaViTをサポートしました。
・[Feature] EfficientNets NoisyStudent & L2
Kaggleでもお馴染みのNoisyStudentやクジラコンペでも使用したL2のweightsをサポートしました。
・[Feature] Support ViT Anti Oversmoothing
Anti-Oversmoothing in Deep Vision Transformers via the Fourier Domain Analysis: From Theory to Practiceをサポートしました。今のところmergeの予定はないです。
Learning to Resize Images for Computer Vision Tasksをサポートしました。こちらも今のところmergeの予定はないです。
・[Feature] Support MViTv2 21k weights for downstream tasks
MViTv2の21k weightsをサポートしました。レビュー中です。
・[WIP][Feature] Support ViT-Adapter
・[WIP][Feature] Support ViT-Adapter
・[Enhancement] Support LayerScale
・[Enhancement] Support value_proj_ratio in MultiScaleDeformableAttention
mmcv、mmcls、mmdetに渡ってPRを作成し、ViT-Adapterのサポートに向けて開発中です。
新しいbakcboneとして、FocalNetをサポートしました。レビュー中です。
新しいbackboneとして、EVAをサポートしました。レビュー中です。
・[Enhance] Support ConvNeXt More Weights
ConvNeXtのweightsを増やしました。レビュー中です。
・[Feature] Support DETRs with Hybrid Matching
DETRs with Hybrid Matchingをサポートしました。現在、運営がmajor updateに合わせてDETR系の大規模なrefactorを行なっており、それが終わった後に再度設計するつもりです。
・[Enhancement] wandb define_metric
wandb loggerでbest metricを表示できるようにしました。
自分がContributeした上記の機能以外にも、多くのContributorのおかげで、2022年にたくさんの機能が開発されています。たとえばClassificationはMetric Learningが行えるようになったり、DetectionではSemi Supervised Learningが行えるようになりました。2023年は、Major VersionのUpdateが控え、現在rc版の開発が活発です。自分も全てrc版に移行しており、今から始めるならそちらがおすすめです!
Contributeは、PRを出すだけではなく、Bugや欲しいFeatureについてissueを上げることもできます。もし興味がある人がいたら、一緒にContributeしていきましょう!
## 終わりに
このようにKaggleや業務で使いたい機能を中心にContributeを行ったので、皆さんも使いたい機能があるかもしれません。ぜひ、一緒にOpenMMLabを使って、Kaggleライフを充実させましょう!
ちょうど現行コンペのベースラインも公開しているので、よかったら使ってみてください。
https://www.kaggle.com/competitions/rsna-breast-cancer-detection/discussion/370508