More Related Content Similar to AIエッジコンテスト|1位 & 3位解法 (20) AIエッジコンテスト|1位 & 3位解法10. Faster-RCNN†
Object Detectionと言ったらFaster-RCNN
SSD/YOLOなんかも有名
Object Detection系のコンペでは定番
Open Images Challenge 2018では上位チームは皆Faster-RCNNベース
(https://storage.googleapis.com/openimages/web/challenge.html)
† Ren, S., He, K., Girshick, R., & Sun, J. “Faster r-cnn: Towards real-time object detection with region proposal
networks,” in NIPS, 2015.
12. ResNeXt†
ResNetの進化版
Grouped Convolutionを使うことでパラメータ数と計
算量の削減
同じ計算量でResNetに上回る精度
Faster-RCNNのbackboneに採用
層数は101
† Xie, Saining, et al. "Aggregated residual transformations for deep neural networks,” in CVPR 2017.
14. Feature Pyramid Networks (FPN) †
RoIの検出をマルチスケールに
† Lin, Tsung-Yi, et al. "Feature pyramid networks for object detection,” in CVPR, 2017.
16. MS-COCO pre-training
MS-COCOのinstance segmentationで学習済みのモデルを
使用(つまるところMask-RCNN)
Bounding boxだけでなくmask情報も使って学習したモデルの
方が高精度
Mask-headは使わないので除去
AIエッジコンテストに共通したカテゴリーに関する重みを
マッピング
自動車・人・バイク・自転車など
24. その他いろいろ|学習設定
Data Augmentation
lr-flip
brightness-shift (±10%)
random scaling (75%~100%)
SGD (lr=1e-2, momentum=0.9, weight-decay=1e-4, batch size=8)
LR-scheduler: cosine annealing with warmup
全体で40000イテレーション,Warmupに500イテレーション
25. cosine annealing with warmup
https://github.com/lyakaap/pytorch-template/blob/master/src/lr_scheduler.py
28. 前提
データ:東京・埼玉の交通シーン画像(≒ 2k枚)
ピクセル単位のラベル(20クラス)が付けられている
タスク:ピクセル単位の多クラス分類
いわゆるセマンティックセグメンテーション
評価指標:mean IoU (intersection over union)
IoU =
TP
TP + FP + FN
36. 20クラス分類 vs 5クラス分類
※ 学習データの二割をvalidation setとした
※ 検証用のモデルはResNet-18†
† K. He, X. Zhang, S. Ren, and J. Sun, “Deep residual learning for image recognition,” in CVPR, pp. 770–778, 2016.
37. 20クラス分類 vs 5クラス分類
※ 学習データの二割をvalidation setとした
※ 検証用のモデルはResNet-18†
仮説通り5クラス分類にすることで大幅に精度向上!
† K. He, X. Zhang, S. Ren, and J. Sun, “Deep residual learning for image recognition,” in CVPR, pp. 770–778, 2016.
39. 事前学習
CNNの事前学習は様々なタスクで有効
目的タスクのデータセットサイズが小さいほど有効
事前学習用のデータセットと目的タスクのデータセッ
トの分布が近いほど有効
→ 本コンペのデータセットサイズは比較的小さい(約2k枚)
→ MVD†/BDD100K‡: 大規模な交通シーンのデータセット
† G. Neuhold, T. Ollmann, S. Rota Bulo, and P. Kontschieder,
“The mapillary vistas dataset for semantic understanding of street scenes,” in ICCV, 2017.
‡ F. Yu, W. Xian, Y. Chen, F. Liu, M. Liao, V. Madhavan, and T. Darrell,
“BDD100K: A diverse driving video database with scalable annotation tooling,” in CVPR, 2018.
43. Data Distillation†
半教師あり学習の一種
学習済みモデルにオブジェクト検出部門のラベルを予測
させ、予測結果を擬似ラベルとする
得られた疑似ラベルはセグメンテーション部門のデータと一緒に
学習に使う
† I. Radosavovic, P. Dollar, R. B. Girshick, G. Gkioxari, and K. He,
“Data distillation: Towards omni-supervised learning,” in CVPR, pp.4119–4128, 2018.
46. その他いろいろ
Data Augmentation
lr-flip
brightness-shift (±15%)
random scaling (75%~175%)
random cropping (768 x 768)
SGD (lr=1e-2, poly scheduling, momentum=0.9, weight-decay=1e-
4, batch size=8)
シード値を変えた2モデルによるアンサンブル +
TTA (lr-flip & multi-scale) → 0.72803
Editor's Notes twitterやsignateなどはすべてこのID名でやっています.
経歴としては長野高専を出て筑波大学に編入して現在M1の学生です.
普段はコンピュータビジョン系の研究をしています.
Kaggleとか麻雀とか野球のデータ分析が好きです. では一応コンテスト結果について振り返っておきます. 幸運にもセグメンテーション部門で一位、物体検出部門で三位になることが出来ました。
両コンペとも最後の一週間ぐらいの参加者の追い上げがすごくて,その期間はかなり焦っていました.
特にセグメンテーション部門はスコアがかなり皆僅差でしたし,オブジェクト検出部門の方は途中まで一位だったんですが,最終一位の方がいきなりぶっちぎりのスコアを出したので敵わないな...と感じました. それでは,まず最初にオブジェクト検出部門の解法について解説していきます。 こちらが解法のサマリーになります.
時間の制約もあったので,とりあえずみんなが使っていて,効くと分かっているものを中心に使いました.
手法やパラメーターの選定なんかはMask-RCNNのcityscapesの実験の章なんかはとても参考になりましたし,OIDなどのオブジェクト検出コンペの上位解法なども有用でした.
では,それぞれの項目について軽く説明していきます. Faster-RCNNはObject Detectionのための手法の中でもとりわけ有名な手法です.
他の有名なモデルとしてはSSD/YOLOとかがありますが,これらは精度より速度に強みを持っている手法なので,精度評価のコンペでは遅いけど高精度なFaster-RCNNの方に軍配が上がる感じです.
実際にOpen Images Challenge 2018では上位チームは皆Faster-RCNNを使っていました. 次にResNextについてです. ResNextはResNetの進化版で,Grouped convを使うことにより,パラメーター数と計算量の削減をすることで同じ計算量でResNetに上回る精度を出すことが出来ます.
本コンペではResNext101をFaster-RCNNのbackboneに採用しました. Feature Pyramid Networks,FPNはRoIの検出をマルチスケールにすることで精度向上を図ったネットワークになります.
従来はスライドの図の右上のbのように,backboneの最終層のみでRoIを予測していました.
大抵は最終層まで行ってしまうと特徴マップの解像度は入力画像に比べてかなり小さくなってしまうため,これだと小さいオブジェクトの検出が難しくなってしまいます.
そこで,小さいオブジェクトでも精度良く検出できるよう,cのようにマルチスケールに,つまりbackboneのネットワークの浅い階層の特徴マップでもRoIの検出をすることが考えられます.
ただ,浅い階層の特徴マップは解像度は高いんですが,受容野の問題により表現力は低いです.それを解消したのがdのFPNになります.構造としてはU-Netとほぼ一緒です. MS-COCOという一般物体認識のデータセットでinstance segmentationで学習済みのモデルを使用しました.
つまりここで言う学習済みのモデルはMask-RCNNのことで,今回のコンペではセグメンテーションする必要は無いのでmask-headを抜きました. まずNMSの説明からしたいと思います.
モデルの予測は大抵の場合左の図のように重複して検知候補を出力してしまいます.
NMSは,そういった重複をフィルタリングするアルゴリズムです.
名前のとおり,ある物体に対して一番当てはまりの良いボックス以外はsuppression,つまり捨ててしまいます.これは少しもったいない気はします. そのもったいなさを解消したのがこちらのSoft-NMSです.
通常のnmsをhardバージョンとするならsoft-nmsはnmsのsuppressionをsoftにしたバージョンと言えます.
通常のNMSでは最良のボックス以外を完全に考慮しないため,情報の損失が考えられのですが,このsoftnmsでは最良のボックス以外もある程度考慮に入れてrescoringします.
rescoringの関数の直感的な説明をすると,元々のスコアが高いほどもちろん高くなるように,そして最良のボックスとのiouが高いほど,つまり被り具合が大きいほどスコアが小さくなるようにします. 通常のhardなNMSとsoft-NMSの違いを表した図がこちらです.
色の濃さがconfidenceだと思ってください.このように重複したボックスのconfidenceをゼロにするではなく低くします.
hard-nmsに比べて精度が3%ぐらい向上しました.一応non-maximum-weightingっていう手法も試しましたが,soft-nmsが一番精度的に良かったです. 最後にTTAとアンサンブルについてです. TTAはtest time augmentationの略で,テストデータの推論時に左右反転などの処理により画像を水増しして,予測の精度を上げるというものです.
Object detectionにおけるアンサンブルは少し特殊で,全てのモデルの全てのTTAを行った画像に対する予測を集めたあと,それに対してただ単にNMSをするだけになります.
なのでアンサンブルをするときは特にどのNMSを使うかで精度がかなり変わってきます. 本コンペでは他にも色々工夫しました.
例えばiouの向上のため,RoI-poolingの代わりにRoI-Alignを使用したり,
backboneの前半とbatchnormをfreeze,つまりパラメーターを更新しないようにしたりしました.
これはメモリの節約のためにやっていて,その分入力画像の解像度をできるだけ大きくしたかったからです.
あとは提出ファイルに予測bounding boxを上限まで詰め込むことをしました.
なぜこうしたほうが良いかと言うと,Average precisionは予測の「数」に対してペナルティを課さないため,confidenceが低くてもとりあえず予測に含めといたほうが得というのがあります
細かいその他の学習設定については,Data Augmentationはlr-flip,左右反転,
あとはデータセットに含まれる画像に朝昼晩それぞれの時間帯に撮影された画像があったため,brightness shiftを用いました.
あとは,オリジナルの解像度の75%から100%の範囲でrandom scalingを行いました.本当は125%とかまで範囲を拡大した方が良さそうとも思ったのですが,VRAMに乗らなかったので諦めました.
学習の最適化手法にはmomentum-SGDを使って,学習率については学習を安定させるためにwarmup付きのcosine annealingでスケジューリングをしました. warmup付きのcosine annealingの学習率の推移の様子をプロットしたものがこちらになります.
このように最初は,少し小さめの学習率からスタートして,デフォルトの学習率に到達したらコサイン関数により段々と減衰させていきます. オブジェクト検出部門の発表はこれで終わりになります. 次にモデリングです。時間の都合上、細かい説明は省いて大枠だけを話そうと思います。 本コンテストではこのような階層的な構造のDecoderを持つモデルを作りました.
一応このモデルはオリジナルのもので,複数の分類器を活用することで動的に特徴計算を行ってリソースの節約を行う手法ということで,ある学会に投稿中のものです.
なので元々は高い精度を目指している論文では無いのですが,このコンペでは他のモデルより精度が良かったのでそれをそのまま少しだけ替えて持ってきました.
提出ファイルに使った予測は一番右端のlevel-3の出力のみを使用しています.
提案モデルはいわゆるEncoder-Decoderモデルで、UNetだったりDeeplab v3+もこのカテゴリに属してます。
精度を上げる工夫としては,図中のConv-OCという部分でASP-OCモジュールを使用しています。
ASP-OCモジュールはOCNetというCityscapesデータセットで高い精度を出したモデルに使われているモジュールで、ASP-PoolingとSelf-Attentionを用いることでモデルの受容野を拡大することに成功しています。 本コンペのencoderには,wideresnet-38を採用しました.
では,モデリング以外の工夫点を説明していきます.
工夫点1は評価指標に対しての工夫で,重要でないクラスをすべてotherクラスに置き換えることで5クラス分類にタスクを変更しました. まず,評価指標についてです.評価指標は最終精度にダイレクトに関わってくるので,どんなコンペだろうがまず真っ先に評価指標を正しく理解することはとても重要だと思います.
本コンペの評価は少し特殊で,セグメンテーション部門のアノテーションデータのクラス数は全部で20クラスあるのですが,実際に指標上で考慮されるクラスはcar/pedestrian/lane/signalの4クラスのみになっています.
ただ,そうは言ってもこの4クラス以外は全く関係ないわけではないです.
例えば、残りの16クラスの領域にcarと割り振ってしまうと、carクラスのFalse Positiveが増えることになり、結果として精度が下がってしまいます.
ではその他16クラスの扱いをどうするかについて考えました. まず,素直にやるなら、与えられた20クラスのラベルをそのまま使うこともできるのですが,分類対象のクラス数が少ないほど精度が高くなるんじゃないかという仮説を立てました.
なぜかと言うと,感覚的な話になってしまい申し訳ないのですが,1つ目は〜 そこで,car,predestrian,lane,signalの4クラスに加えて,otherクラスも付け加えることで5クラス分類にタスクを設定することで精度向上を狙いました.
こちらが素直に与えられたデータのまま20クラス分類をした場合と5クラス分類にした場合の,比較実験の結果になります.
ここで,評価には学習データの二割を使っていて,検証用のモデルにはresnet-18を使いました.
表のmeaniouの値は評価に関係してる4クラスの平均のiouを表していて,((スライドをめくる))
仮説通り5クラス分類にすることで大幅に精度が向上していることがわかります.
ちなみに,一応他のクラス数も試してみたのですが,5クラス分類にしたほうが一番良かったです.
あとは,loss関数には,otherクラスの重みを小さくして,代わりにsignalの重みを大きくしたweighted cross entropyを使用しました. 次の工夫点についてこれから話します.
工夫点2は,MVDとBDD100Kデータセットによる事前学習です. まず,事前学習についてですが,様々なタスクで有効であることが分かっています.
CNNの事前学習が特に有効なケースは,まず目的タスクのデータセットサイズが小さい場合,これは本コンペのセグメンテーション部門のデータセットサイズは約2000枚ほどで比較的小さいと言えます.
あとは事前学習用のデータセットと目的タスクのデータセットの分布が近い場合.これについては交通シーンのデータセットを持ってくればよくて,実際に自分はMVDとBDD100Kの2つの交通シーンデータセットによる事前学習を使いました.
他の主要な交通シーンのデータセットについてですが,Cityscapesはデータ数的にはあまり大きくなかったので,Appolo-scapeはデータ数がかなり大きくて大変そうだなと思ったので今回は使いませんでした。
MVDの事前学習については,既に学習済みのWRN-38の重みが公開されていたので,そちらを使用しました.
そのMVDで学習済みの重みを使って,さらにBDD100Kデータセットで30エポックの事前学習を行いました.
本コンペだと外部データの使用が認められていたため,もしかしたら本コンペでこの事前学習がいちばん重要な要素だったかもしれません.
次は最後の工夫点の,半教師あり学習についてです. セグメンテーション部門と同時に開催されていたAIエッジコンテストのオブジェクト検出部門のデータを有効活用できないかと考えました.
利点をあげるとデータの分布がほぼ同じということ,あとは画像枚数が多くて,セグメンテーション部門の約10倍の二万枚のデータ数がありました.
ただ,ピクセル単位のラベルはないということから,使えるとしたら半教師あり学習かなと思いました. 実際に使ったのがData Distillationという手法です.
Data Distillationは半教師あり学習の手法の一種でありの,pseudo labelingの類似手法と言えるかもしれません.
手法的には単純で,学習済みモデルを用意して,そいつにオブジェクト検出部門のラベルを予測させ、得られた予測結果を擬似ラベルとして,セグメンテーション部門の本物のデータと一緒に別モデルの学習時に利用します.
そうすることで,擬似的なデータの水増しに繋がります.
ただ,今言った操作を何も考えずにやると,疑似ラベルがあまり正確でない場合にその誤りを学習してしまうので精度が下がってしまうと考えられます.
そこで,モデルの出力の確度があるしきい値より低かった出力ピクセルに対してはプレースホルダーの値を割り振り、どのクラスのラベルも割り当てないことで学習時に影響を及ぼさないようにしました。
実際にモデルの出力の確度が低い場合はモデルにとって難しい領域ということで誤分類している確率が高いため,ノイズになりやすいです.
あとは,学習時には真のラベルと疑似ラベルを5:3の比率でミニバッチを作成することで最終モデルの学習に利用しました.
これは同時に学習するほうが別々に学習するより正則化の効果が得られて良いと言われているからです. ただ,今言った操作を何も考えずにやると,疑似ラベルがあまり正確でない場合にその誤りを学習してしまうので精度が下がってしまうと考えられます.
そこで,モデルの出力の確度があるしきい値より低かった出力ピクセルに対してはプレースホルダーの値を割り振り、どのクラスのラベルも割り当てないことで学習時に影響を及ぼさないようにしました。
実際にモデルの出力の確度が低い場合はモデルにとって難しい領域ということで誤分類している確率が高いため,ノイズになりやすいです.
あとは,学習時には真のラベルと疑似ラベルを5:3の比率でミニバッチを作成することで最終モデルの学習に利用しました.
これは同時に学習するほうが別々に学習するより正則化の効果が得られて良いと言われているからです. その他の学習の設定などですが,data augmentationはこのような条件でやっています.
~
あとはシード値を変えた2モデルによるアンサンブルと TTA (lr-flip & multi-scale)を行って,最終評価のスコアが0.728となりました.
もっと上がるかなと思ったのですが,全然上がらなかったのでそこは少し意外でした. ここまでの解法のパイプラインをまとめるとこの図のようになります。
解法まとめ としましては,〜