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を実装、公開しているチームです。

https://openmmlab.com/

https://github.com/open-mmlab

https://twitter.com/OpenMMLab

 

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のTutorialYouTublectureYOLOVISIONでの発表など、多くの資料も存在するので、よかったらみてみてください。

 

## 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ができるようにしました。

[Feature] Support resizemix

ResizeMixをサポートしました。

[Feature] Support gem pooling

Kaggleのmetric learning系のコンペでお馴染みのGeMをサポートしました。

[Feature] Support TTA

TTAの設計を行いましたが、mergeまでは行かず、major version updateに合わせて、現在再設計中です。

[Feature] Support CUB dataset

Fine-Grained ClassificationのベンチマークdatasetであるCUBをサポートしました。運営の方が、SwinやResNetで高い精度のベンチマークmodelも作成し、公開しています。

[Feature] Switch aug hook

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

[Feature] Support VAN

[Enhancement] Update VAN

新しい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に合わせて、運営がこの機能を追加してくれました。

add arcface

metric learningの追加が行われていた時期で、arcfaceの設計を提案しました。この後、運営でこの設計を参考にしつつ、metric learningの開発を行なってくれました。

[WIP] Simple config

よりシンプルな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

[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をサポートしました。一部レビュー中です。

[Feature] Support DeiT3

新しいbackboneとして、DeiT3をサポートしました。

[Enhancement] Get scores from inference api

推論apiから、scoreを得られるようにしました。

[Enhancement] Update analyze_results.py for dev-1.x

major version updateに合わせて、error分析のscriptを修正しました。

[Feature] Support DaViT

新しい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の予定はないです。

[Feature] Support Resizer

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のサポートに向けて開発中です。

[Feauter] Support FocalNet

新しいbakcboneとして、FocalNetをサポートしました。レビュー中です。

[Feature] Support EVA

新しいbackboneとして、EVAをサポートしました。レビュー中です。

[Enhance] Support ConvNeXt More Weights

ConvNeXtのweightsを増やしました。レビュー中です。

[Feature] Support DETRs with Hybrid Matching

DETRs with Hybrid Matchingをサポートしました。現在、運営がmajor updateに合わせてDETR系の大規模なrefactorを行なっており、それが終わった後に再度設計するつもりです。

best metric log with wandb

[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