狠狠撸

狠狠撸Share a Scribd company logo
AIエッジコンテスト
1 位解法(セグメンテーション部門)&
3 位解法(オブジェクト検出部門)
by Shuhei Yokoo (lyakaap)
自己紹介
? Twitter/GitHub/Kaggle/SIGNATE: @lyakaap
? 長野高専 → 筑波大学 → 同大学院(現在修士一年)
? コンピュータービジョンの研究をしています
? Kaggle/麻雀/野球が好きです
コンテスト结果
セグメンテーション部門:1位
オブジェクト検出部門:3位
オブジェクト検出部門
解法概要
前提
? データ:東京?埼玉の交通シーン画像(≒ 20k枚)
? タスク:オブジェクト検出(Object Detection)
? 評価指標:MAP@IoU=0.75
自分の解法
Faster-RCNN
+ ResNext-101
+ Feature Pyramid Networks
+ MS-COCO pre-training
+ Soft-NMS
+ TTA (lr-flip/multi-scale)
+ Ensemble
解法概要
Faster-RCNN
+ ResNext-101
+ Feature Pyramid Networks
+ MS-COCO pre-training
+ Soft-NMS
+ TTA (lr-flip/multi-scale)
+ Ensemble
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.
Faster-RCNN
+ ResNext-101
+ Feature Pyramid Networks
+ MS-COCO pre-training
+ Soft-NMS
+ TTA (lr-flip/multi-scale)
+ Ensemble
ResNeXt?
? ResNetの進化版
? Grouped Convolutionを使うことでパラメータ数と計
算量の削減
? 同じ計算量でResNetに上回る精度
? Faster-RCNNのbackboneに採用
? 層数は101
? Xie, Saining, et al. "Aggregated residual transformations for deep neural networks,” in CVPR 2017.
Faster-RCNN
+ ResNext-101
+ Feature Pyramid Networks
+ MS-COCO pre-training
+ Soft-NMS
+ TTA (lr-flip/multi-scale)
+ Ensemble
Feature Pyramid Networks (FPN) ?
RoIの検出をマルチスケールに
? Lin, Tsung-Yi, et al. "Feature pyramid networks for object detection,” in CVPR, 2017.
Faster-RCNN
+ ResNext-101
+ Feature Pyramid Networks
+ MS-COCO pre-training
+ Soft-NMS
+ TTA (lr-flip/multi-scale)
+ Ensemble
MS-COCO pre-training
? MS-COCOのinstance segmentationで学習済みのモデルを
使用(つまるところMask-RCNN)
? Bounding boxだけでなくmask情報も使って学習したモデルの
方が高精度
? Mask-headは使わないので除去
? AIエッジコンテストに共通したカテゴリーに関する重みを
マッピング
? 自動車?人?バイク?自転車など
Faster-RCNN
+ ResNext-101
+ Feature Pyramid Networks
+ MS-COCO pre-training
+ Soft-NMS
+ TTA (lr-flip/multi-scale)
+ Ensemble
Non Maximum Suppression (NMS)
? 重複検知をフィルタリングするアルゴリズム
? 一番当てはまりの良いbox以外は捨ててしまう
? 完全に捨ててしまうのはもったいない????
Soft-NMS?
? NMSの”soft”なバージョン
? 最良のbox以外もある程度考慮してrescore:
? Bodla, Navaneeth, et al. "Soft-NMS--Improving Object Detection With One Line of Code,” In ICCV, 2017.
?? ← ??exp(?
iou(?, ??)2
?
)
s: score, b: box, M: 最良のbox
σの値には0.9を使用
Hard-NMS vs. Soft-NMS
Faster-RCNN
+ ResNext-101
+ Feature Pyramid Networks
+ MS-COCO pre-training
+ Soft-NMS
+ TTA (lr-flip/multi-scale)
+ Ensemble
TTA & Ensemble
Model-1
Model-2
TTA
gather
Soft-NMS
その他いろいろ|工夫点
? RoI-Poolingの代わりにRoI-Align
? IoUの改善
? backboneの前半とBatch Normを“freeze”
? メモリの節約のため
? 提出ファイルに予測bounding boxを上限まで詰め込む
? Average precisionは予測の「数」に対してペナルティを課さないため
confidenceが低くてもとりあえず予測に含めといた方が得
その他いろいろ|学習設定
? 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イテレーション
cosine annealing with warmup
https://github.com/lyakaap/pytorch-template/blob/master/src/lr_scheduler.py
Faster-RCNN
+ ResNext-101
+ Feature Pyramid Networks
+ MS-COCO pre-training
+ Soft-NMS
+ TTA (lr-flip/multi-scale)
+ Ensemble
解法まとめ
セグメンテーション部門
解法概要
前提
? データ:東京?埼玉の交通シーン画像(≒ 2k枚)
? ピクセル単位のラベル(20クラス)が付けられている
? タスク:ピクセル単位の多クラス分類
? いわゆるセマンティックセグメンテーション
? 評価指標:mean IoU (intersection over union)
IoU =
TP
TP + FP + FN
モデリング
Level=2?
stride=4
Level=1?
stride=4
Level=3?
stride=4
Level=3?
stride=8
Level=2?
stride=8
Level=1?
stride=4?
Level=3?
stride=16
Level=2?
stride=16
Level=3?
stride=32
Level=1?
stride=8
Encoder?
Block?
Enc
C
U
C
Enc
U
U
U
C
C
Conv?OC
Conv?OC
Conv?OC
U
C Conv
U
C
U
Conv C Conv
Classifier Classifier Classifier
Level=M?
stride=N
Feature?Map?
Upsampling? Concatnation
Level?1 Level?2? Level?3?
Enc
Conv?Block
Level=2?
stride=4
Level=1?
stride=4
Level=3?
stride=4
Level=3?
stride=8
Level=2?
stride=8
Level=1?
stride=4?
Level=3?
stride=16
Level=2?
stride=16
Level=3?
stride=32
Level=1?
stride=8
Encoder?
Block?
Enc
C
U
C
Enc
U
U
U
C
C
Conv?OC
Conv?OC
Conv?OC
U
C Conv
U
C
U
Conv C Conv
Classifier Classifier Classifier
Level=M?
stride=N
Feature?Map?
Upsampling? Concatnation
Level?1 Level?2? Level?3?
Enc
Conv?Block
WideResNet-38
工夫点①
car/pedestrian/lane/signal + other
の5クラス分類にタスク設定
評価指標について
? 実際に指標上で考慮されるクラスは4クラスのみ
? car/pedestrian/lane/signal
? そうは言っても、上記の4クラス以外は全く関係無い訳では無い
? ではその他16クラスの扱いをどうするか
その他16クラスの扱い|仮説
? 分類対象のクラス数が少ないほど精度が高くなる?
? 該当の4クラスの分類に有効な特徴抽出に、ネットワークがより集中
しやすくなりうる
? ネットワークの出力の尤度が分散しづらい
その他16クラスの扱い|仮説
? 分類対象のクラス数が少ないほど精度が高くなる?
? 該当の4クラスの分類に有効な特徴抽出に、ネットワークがより集中
しやすくなりうる
? ネットワークの出力の尤度が分散しづらい
→ car/pedestrian/lane/signal + other
の5クラス分類にタスク設定
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.
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.
工夫点②
MVD/BDD100K データセット
による事前学習
事前学習
? 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.
事前学習
? MVDで学習済みのモデルが公開されていたのでそちらを使用
? https://github.com/mapillary/inplace_abn
? 叠顿顿100碍は自前で30エポックの事前学习を行った
工夫点③
オブジェクト検出部門のデータを使った
半教師あり学習
? AIエッジコンテスト:オブジェクト検出部門のデータを有効活用
できないか?
? データの分布はほぼ同じ
? 画像枚数が多い(≒ 20K)
▲ ピクセル単位のラベルは無い
→ 半教師あり学習の手法が使えそう!
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.
Data Distillation|工夫点
? モデルの出力の確度が低い出力ピクセルにはラベルを
割り当てない
? 誤分類している確率が高いためノイズになりやすい
? 真のラベルと疑似ラベルを5:3の比率でミニバッチを
作成することで最終モデルの学習に利用した
Data Distillation|工夫点
? モデルの出力の確度が低い出力ピクセルにはラベルを
割り当てない
? 誤分類している確率が高いためノイズになりやすい
? 真のラベルと疑似ラベルを5:3の比率でミニバッチを
作成することで最終モデルの学習に利用した
Mean IoU: 0.72105 → 0.72737 (TTAあり)
その他いろいろ
? 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
解法まとめ
? Encoder-Decoderモデル
? 20→5クラス分類にした
? MVD/BDD100Kによる事前学習
? オブジェクト検出部門のデータを
使った半教師あり学習

More Related Content

AIエッジコンテスト|1位 & 3位解法

Editor's Notes

  1. twitterやsignateなどはすべてこのID名でやっています. 経歴としては長野高専を出て筑波大学に編入して現在M1の学生です. 普段はコンピュータビジョン系の研究をしています. Kaggleとか麻雀とか野球のデータ分析が好きです.
  2. では一応コンテスト结果について振り返っておきます.
  3. 幸運にもセグメンテーション部門で一位、物体検出部門で三位になることが出来ました。 両コンペとも最後の一週間ぐらいの参加者の追い上げがすごくて,その期間はかなり焦っていました. 特にセグメンテーション部門はスコアがかなり皆僅差でしたし,オブジェクト検出部門の方は途中まで一位だったんですが,最終一位の方がいきなりぶっちぎりのスコアを出したので敵わないな...と感じました.
  4. それでは,まず最初にオブジェクト検出部门の解法について解説していきます。
  5. こちらが解法のサマリーになります. 時間の制約もあったので,とりあえずみんなが使っていて,効くと分かっているものを中心に使いました. 手法やパラメーターの選定なんかはMask-RCNNのcityscapesの実験の章なんかはとても参考になりましたし,OIDなどのオブジェクト検出コンペの上位解法なども有用でした. では,それぞれの項目について軽く説明していきます.
  6. Faster-RCNNはObject Detectionのための手法の中でもとりわけ有名な手法です. 他の有名なモデルとしてはSSD/YOLOとかがありますが,これらは精度より速度に強みを持っている手法なので,精度評価のコンペでは遅いけど高精度なFaster-RCNNの方に軍配が上がる感じです. 実際にOpen Images Challenge 2018では上位チームは皆Faster-RCNNを使っていました.
  7. 次に搁别蝉狈别虫迟についてです.
  8. ResNextはResNetの進化版で,Grouped convを使うことにより,パラメーター数と計算量の削減をすることで同じ計算量でResNetに上回る精度を出すことが出来ます. 本コンペではResNext101をFaster-RCNNのbackboneに採用しました.
  9. Feature Pyramid Networks,FPNはRoIの検出をマルチスケールにすることで精度向上を図ったネットワークになります. 従来はスライドの図の右上のbのように,backboneの最終層のみでRoIを予測していました. 大抵は最終層まで行ってしまうと特徴マップの解像度は入力画像に比べてかなり小さくなってしまうため,これだと小さいオブジェクトの検出が難しくなってしまいます. そこで,小さいオブジェクトでも精度良く検出できるよう,cのようにマルチスケールに,つまりbackboneのネットワークの浅い階層の特徴マップでもRoIの検出をすることが考えられます. ただ,浅い階層の特徴マップは解像度は高いんですが,受容野の問題により表現力は低いです.それを解消したのがdのFPNになります.構造としてはU-Netとほぼ一緒です.
  10. MS-COCOという一般物体認識のデータセットでinstance segmentationで学習済みのモデルを使用しました. つまりここで言う学習済みのモデルはMask-RCNNのことで,今回のコンペではセグメンテーションする必要は無いのでmask-headを抜きました.
  11. まずNMSの説明からしたいと思います. モデルの予測は大抵の場合左の図のように重複して検知候補を出力してしまいます. NMSは,そういった重複をフィルタリングするアルゴリズムです. 名前のとおり,ある物体に対して一番当てはまりの良いボックス以外はsuppression,つまり捨ててしまいます.これは少しもったいない気はします.
  12. そのもったいなさを解消したのがこちらのSoft-NMSです. 通常のnmsをhardバージョンとするならsoft-nmsはnmsのsuppressionをsoftにしたバージョンと言えます. 通常のNMSでは最良のボックス以外を完全に考慮しないため,情報の損失が考えられのですが,このsoftnmsでは最良のボックス以外もある程度考慮に入れてrescoringします. rescoringの関数の直感的な説明をすると,元々のスコアが高いほどもちろん高くなるように,そして最良のボックスとのiouが高いほど,つまり被り具合が大きいほどスコアが小さくなるようにします.
  13. 通常のhardなNMSとsoft-NMSの違いを表した図がこちらです. 色の濃さがconfidenceだと思ってください.このように重複したボックスのconfidenceをゼロにするではなく低くします. hard-nmsに比べて精度が3%ぐらい向上しました.一応non-maximum-weightingっていう手法も試しましたが,soft-nmsが一番精度的に良かったです.
  14. 最后に罢罢础とアンサンブルについてです.
  15. TTAはtest time augmentationの略で,テストデータの推論時に左右反転などの処理により画像を水増しして,予測の精度を上げるというものです. Object detectionにおけるアンサンブルは少し特殊で,全てのモデルの全てのTTAを行った画像に対する予測を集めたあと,それに対してただ単にNMSをするだけになります. なのでアンサンブルをするときは特にどのNMSを使うかで精度がかなり変わってきます.
  16. 本コンペでは他にも色々工夫しました. 例えばiouの向上のため,RoI-poolingの代わりにRoI-Alignを使用したり, backboneの前半とbatchnormをfreeze,つまりパラメーターを更新しないようにしたりしました. これはメモリの節約のためにやっていて,その分入力画像の解像度をできるだけ大きくしたかったからです. あとは提出ファイルに予測bounding boxを上限まで詰め込むことをしました. なぜこうしたほうが良いかと言うと,Average precisionは予測の「数」に対してペナルティを課さないため,confidenceが低くてもとりあえず予測に含めといたほうが得というのがあります
  17. 細かいその他の学習設定については,Data Augmentationはlr-flip,左右反転, あとはデータセットに含まれる画像に朝昼晩それぞれの時間帯に撮影された画像があったため,brightness shiftを用いました. あとは,オリジナルの解像度の75%から100%の範囲でrandom scalingを行いました.本当は125%とかまで範囲を拡大した方が良さそうとも思ったのですが,VRAMに乗らなかったので諦めました. 学習の最適化手法にはmomentum-SGDを使って,学習率については学習を安定させるためにwarmup付きのcosine annealingでスケジューリングをしました.
  18. warmup付きのcosine annealingの学習率の推移の様子をプロットしたものがこちらになります. このように最初は,少し小さめの学習率からスタートして,デフォルトの学習率に到達したらコサイン関数により段々と減衰させていきます.
  19. オブジェクト検出部门の発表はこれで终わりになります.
  20. 次にモデリングです。时间の都合上、细かい説明は省いて大枠だけを话そうと思います。
  21. 本コンテストではこのような階層的な構造のDecoderを持つモデルを作りました. 一応このモデルはオリジナルのもので,複数の分類器を活用することで動的に特徴計算を行ってリソースの節約を行う手法ということで,ある学会に投稿中のものです. なので元々は高い精度を目指している論文では無いのですが,このコンペでは他のモデルより精度が良かったのでそれをそのまま少しだけ替えて持ってきました. 提出ファイルに使った予測は一番右端のlevel-3の出力のみを使用しています. 提案モデルはいわゆるEncoder-Decoderモデルで、UNetだったりDeeplab v3+もこのカテゴリに属してます。 精度を上げる工夫としては,図中のConv-OCという部分でASP-OCモジュールを使用しています。 ASP-OCモジュールはOCNetというCityscapesデータセットで高い精度を出したモデルに使われているモジュールで、ASP-PoolingとSelf-Attentionを用いることでモデルの受容野を拡大することに成功しています。
  22. 本コンペの别苍肠辞诲别谤には,飞颈诲别谤别蝉苍别迟-38を採用しました.
  23. では,モデリング以外の工夫点を説明していきます. 工夫点1は評価指標に対しての工夫で,重要でないクラスをすべてotherクラスに置き換えることで5クラス分類にタスクを変更しました.
  24. まず,評価指標についてです.評価指標は最終精度にダイレクトに関わってくるので,どんなコンペだろうがまず真っ先に評価指標を正しく理解することはとても重要だと思います. 本コンペの評価は少し特殊で,セグメンテーション部門のアノテーションデータのクラス数は全部で20クラスあるのですが,実際に指標上で考慮されるクラスはcar/pedestrian/lane/signalの4クラスのみになっています. ただ,そうは言ってもこの4クラス以外は全く関係ないわけではないです. 例えば、残りの16クラスの領域にcarと割り振ってしまうと、carクラスのFalse Positiveが増えることになり、結果として精度が下がってしまいます. ではその他16クラスの扱いをどうするかについて考えました.
  25. まず,素直にやるなら、与えられた20クラスのラベルをそのまま使うこともできるのですが,分類対象のクラス数が少ないほど精度が高くなるんじゃないかという仮説を立てました. なぜかと言うと,感覚的な話になってしまい申し訳ないのですが,1つ目は?
  26. そこで,肠补谤,辫谤别诲别蝉迟谤颈补苍,濒补苍别,蝉颈驳苍补濒の4クラスに加えて,辞迟丑别谤クラスも付け加えることで5クラス分类にタスクを设定することで精度向上を狙いました.
  27. こちらが素直に与えられたデータのまま20クラス分類をした場合と5クラス分類にした場合の,比較実験の結果になります. ここで,評価には学習データの二割を使っていて,検証用のモデルにはresnet-18を使いました. 表のmeaniouの値は評価に関係してる4クラスの平均のiouを表していて,((スライドをめくる))
  28. 仮説通り5クラス分類にすることで大幅に精度が向上していることがわかります. ちなみに,一応他のクラス数も試してみたのですが,5クラス分類にしたほうが一番良かったです. あとは,loss関数には,otherクラスの重みを小さくして,代わりにsignalの重みを大きくしたweighted cross entropyを使用しました.
  29. 次の工夫点についてこれから話します. 工夫点2は,MVDとBDD100Kデータセットによる事前学習です.
  30. まず,事前学習についてですが,様々なタスクで有効であることが分かっています. CNNの事前学習が特に有効なケースは,まず目的タスクのデータセットサイズが小さい場合,これは本コンペのセグメンテーション部門のデータセットサイズは約2000枚ほどで比較的小さいと言えます. あとは事前学習用のデータセットと目的タスクのデータセットの分布が近い場合.これについては交通シーンのデータセットを持ってくればよくて,実際に自分はMVDとBDD100Kの2つの交通シーンデータセットによる事前学習を使いました. 他の主要な交通シーンのデータセットについてですが,Cityscapesはデータ数的にはあまり大きくなかったので,Appolo-scapeはデータ数がかなり大きくて大変そうだなと思ったので今回は使いませんでした。
  31. MVDの事前学習については,既に学習済みのWRN-38の重みが公開されていたので,そちらを使用しました. そのMVDで学習済みの重みを使って,さらにBDD100Kデータセットで30エポックの事前学習を行いました. 本コンペだと外部データの使用が認められていたため,もしかしたら本コンペでこの事前学習がいちばん重要な要素だったかもしれません.
  32. 次は最后の工夫点の,半教师あり学习についてです.
  33. セグメンテーション部門と同時に開催されていたAIエッジコンテストのオブジェクト検出部門のデータを有効活用できないかと考えました. 利点をあげるとデータの分布がほぼ同じということ,あとは画像枚数が多くて,セグメンテーション部門の約10倍の二万枚のデータ数がありました. ただ,ピクセル単位のラベルはないということから,使えるとしたら半教師あり学習かなと思いました.
  34. 実際に使ったのがData Distillationという手法です. Data Distillationは半教師あり学習の手法の一種でありの,pseudo labelingの類似手法と言えるかもしれません. 手法的には単純で,学習済みモデルを用意して,そいつにオブジェクト検出部門のラベルを予測させ、得られた予測結果を擬似ラベルとして,セグメンテーション部門の本物のデータと一緒に別モデルの学習時に利用します. そうすることで,擬似的なデータの水増しに繋がります.
  35. ただ,今言った操作を何も考えずにやると,疑似ラベルがあまり正確でない場合にその誤りを学習してしまうので精度が下がってしまうと考えられます. そこで,モデルの出力の確度があるしきい値より低かった出力ピクセルに対してはプレースホルダーの値を割り振り、どのクラスのラベルも割り当てないことで学習時に影響を及ぼさないようにしました。 実際にモデルの出力の確度が低い場合はモデルにとって難しい領域ということで誤分類している確率が高いため,ノイズになりやすいです. あとは,学習時には真のラベルと疑似ラベルを5:3の比率でミニバッチを作成することで最終モデルの学習に利用しました. これは同時に学習するほうが別々に学習するより正則化の効果が得られて良いと言われているからです.
  36. ただ,今言った操作を何も考えずにやると,疑似ラベルがあまり正確でない場合にその誤りを学習してしまうので精度が下がってしまうと考えられます. そこで,モデルの出力の確度があるしきい値より低かった出力ピクセルに対してはプレースホルダーの値を割り振り、どのクラスのラベルも割り当てないことで学習時に影響を及ぼさないようにしました。 実際にモデルの出力の確度が低い場合はモデルにとって難しい領域ということで誤分類している確率が高いため,ノイズになりやすいです. あとは,学習時には真のラベルと疑似ラベルを5:3の比率でミニバッチを作成することで最終モデルの学習に利用しました. これは同時に学習するほうが別々に学習するより正則化の効果が得られて良いと言われているからです.
  37. その他の学習の設定などですが,data augmentationはこのような条件でやっています. ~ あとはシード値を変えた2モデルによるアンサンブルと TTA (lr-flip & multi-scale)を行って,最終評価のスコアが0.728となりました. もっと上がるかなと思ったのですが,全然上がらなかったのでそこは少し意外でした.
  38. ここまでの解法のパイプラインをまとめるとこの図のようになります。 解法まとめ としましては,?