>100 Views
November 22, 18
スライド概要
2018/11/22
Deep Learning JP:
http://deeplearning.jp/hacks/
DL輪読会資料
OCNet: Object Context Network for Scene Parsing 東京大学大学院 情報理工学系研究科 電子情報学専攻 M2 谷合 廣紀
書誌情報 • 論文名 • • • 著者 • Yuhui Yuan(Microsoft Research) • Jingdong Wang (Microsoft Research) arXiv • • OCNet: Object Context Network for Scene Parsing https://arxiv.org/abs/1809.00916 本スライド中の図は特に注釈がなければこの論文のもの
どんな内容? • Semantic Segmentationのデコーダー部分にSelf Attention機構を導入 • Cityscapes, ADE20K, LIPでほぼSOTA
Semantic Segmentation • ピクセル単位のクラス分類 • 最近はKaggleやSIGNATEなどのコンペの課題としてもよく出題される • • スコアをあげるための泥臭い知見も増えつつある UNet型とPSPNet型の2つに大別できる CityScapes Dataset
UNet型 • いわいるEncoder-Decoder型 • Encoderは解像度を落としながら特徴マップの出力 • • Decoderは解像度をあげながらピクセル単位の情報を復元 • • スキップコネクションよってEncoderで失われた細かい情報も復元できる EncoderはResNetなどがよく使われる • • 1辺が元画像の1/16か1/32程度まで ImageNetで訓練済みだと精度があがる[2] DecoderはTransposeConvが一般的だが、 DilatedConvを使うなどバリエーション多数 [1] DeepLabV3+: https://arxiv.org/abs/1802.02611 [2] TernausNet: https://arxiv.org/abs/1801.05746 [1]より引用
PSPNet型 • Encoderは解像度を落としながら特徴マップを出力 • 1辺が元画像の1/8程度まで • Spatial Pyramid Poolingで異なるサイズのプーリングを行い さまざまなコンテキストを考慮した特徴を捉えることができる • 最後に元画像のサイズまでアップサンプリング • SPPのプーリング部分はAveragePoolingだが、 DilatedConvに置き換えるとDeepLabに使われるASPPに [1] DeepLabV3+: https://arxiv.org/abs/1802.02611 [1]より引用
OCNet • SPSがObject Context Moduleに置き換わったもの • OCPをベースとしてBase-OC, Pyramid-OC, ASP-OCの3パターンが提案されている
Object Context Pooling • OCPはSAGANで使われる2DのSelf Attention機構のようなもの • 同じカテゴリに属するピクセルの特徴量を集約したいというのがモチベーション • OCPは次の2ステージから構成される • Object Context Estimation • Object Context Aggregation
OCP – Object Context Estimation • あるピクセルに対して同じラベルに属しているピクセルを探す機構 • 下図の十字で示してるピクセルを入力とすると このピクセルは車のラベルを持つため画像中の車の領域が強く反応する • この操作は画像をflattenしてから行うので、入力がH×Wの大きさの場合 出力されるコンテキストマップは(H×W)×(H×W)の大きさになる
OCP – Object Context Aggregation • • コンテキストマップで重み付けして特徴量を集積 • 強く反応したピクセル位置の特徴量を集めるイメージ • (H×W)× (H×W) -> (H×W)×Cの特徴マップが求まる あとはreshapeしてH×Wの形に戻せばOCPが完了
OCP • Query: 十字のピクセルの特徴量 • Key: 他のピクセルの特徴量 • • QueryとKeyの類似度から Context Mapを計算 Value: QueryやKeyとは別の特徴量
Result • Cityscapes, ADE20K, LIPでSOTAなパフォーマンス
実装方針 • OCNet自体は著者らの実装がgithubにあがっている • • https://github.com/PkuRainBow/OCNet 何も実装しないのもつまらないので、Encoder部分やDecoder部分を入れ替えて 遊べるようにしたものをgithubにあげた(これも何番煎じかわからない) • https://github.com/nyoki-mtl/pytorch-segmentation • configファイルを書き換えるだけで55種類のネットワークを作れる! • cityscapesとpascal vocに対応! • エラーなくtrainできることは確認したものの、まだテスト中