"scale aware face detection"と"finding tiny faces" (cvpr'17) の解説

31
Copyright © DeNA Co.,Ltd. All Rights Reserved. ハワイ 2017 読み会 Yusuke Uchida (@yu4u) ⾏けないので画像で 気分だけ盛り上げております 1 Photo by (c)Tomo.Yun hBp://www.yunphoto.net

Upload: yusuke-uchida

Post on 21-Jan-2018

885 views

Category:

Technology


5 download

TRANSCRIPT

Copyright©DeNACo.,Ltd.AllRightsReserved.

ハワイ2017読み会YusukeUchida(@yu4u)⾏けないので画像で気分だけ盛り上げております

1

Photoby(c)Tomo.YunhBp://www.yunphoto.net

Scale-AwareFaceDetec?on

2

背景

!  マルチスケールの物体検出(sliding window)a.  1つのスケールの物体のみを検出する検出器+画像リスケールb.  複数のスケールの物体を検出する検出器を全スケール分c.  少数のスケールの物体を検出する検出器+画像ピラミッド

d.  マルチスケール・シングルショット検出器(e.g. Faster R-CNN, SSD, YOLOv2)

3

e.g.HOG+SVM

背景

!  マルチスケールの物体検出(sliding window)a.  1つのスケールの物体のみを検出する検出器+画像リスケールb.  複数のスケールの物体を検出する検出器を全スケール分c.  少数のスケールの物体を検出する検出器+画像ピラミッド

d.  マルチスケール・シングルショット検出器(e.g. Faster R-CNN, SSD, YOLOv2)

4

e.g.HOG+SVM マルチスケール処理は重い!

(おおざっぱ)

アプローチ

!  Single-scale detectorベース!  各スケールについて、画像中にそのスケールの顔が存在するかを判定し

顔が存在するスケールのみ検出を⾏う

5

これらのスケールには顔が存在しないので、検出処理をスキップ

ScaleProposalNetwork(SPN)

フレームワーク

6

①(計算量のため)ダウンサンプルした⼊⼒画像をSPNに⼊⼒しスケール候補を取得(⻑辺448px)

②SPNで検出されたスケール候補に対応する画像サイズのみをリサンプル

③各リサンプルされた画像に対しシングルスケールの顔検出

ScaleProposalNetwork

7

なんでも良いのでテキトーなFCN

HxWxCの特徴マップCはスケール数

Globalmaxpooling→sigmoidで[0,1]そのスケールの顔が(最低1つ)存在する確率

W

H

C

!  正解は、⻑さがスケール数のベクトル!  各要素は、logスケールで⼀定間隔のスケール幅に対応し

そのスケール幅内に収まるスケールの顔が存在すれば1、otherwise 0(厳密には違うので後述)

groundtruth

スケール選択

8

ノイズの影響を減らすため移動平均からのnon-maximumsuppression

•  ビンの数は結構多い→顔のスケールで23〜29を60分割

•  NMSの幅は顔検出器がカバーするスケール幅より⼩さめ→36-72pxなのでlogスケールで幅1

23 29

11

Non−maximumsuppression詳細

検出幅

NMS幅<1

ScaleProposalNetworkの特徴マップ

!  SPNに対しては明⽰的に顔の場所を教えていない

!  しかし、global average pooling前の特徴マップを⾒るとそのスケール情報だけから顔の位置も学習している!(収束遅くない?

9

各スケールの顔があるかないかだけ

この部分は結局マルチスケールの顔検出器もどき(だったらこれだけで良い気ももしかしたら顔のサイズの共起性をうまく利⽤できている?)

顔のboundingboxおよびスケールについて

!  顔のスケールは顔のbounding boxの辺の⻑さで定義される!  しかし、顔のbounding boxはかなり主観が⼊るため

全ての訓練データで⼀貫性をもたせることが難しい!  これに対し、顔の5点のランドマークから⾃動的にbounding boxを定義

する⁃  利⽤するランドマーク:左⽬、右⽬、⿐、⼝元(左右)

!  5点のランドマークにより定義される正⽅形のbounding box(中⼼+スケール):

10

SPNの出⼒の正解について

!  理想的にはそのスケール幅内に収まるスケールの顔が存在すれば1、otherwise 0

!  ノイズがあるのでガウシアンかけてmax

!  個⼈的には近接ビンは1にして、⼀定以上遠いところは0で、それ以外はロス0とかのほうが好き

11

23 29

学習データの顔のスケール

顔のboundingboxについて(余談

!  データセットによってポリシーが違うデータセット間のbounding boxの違いを吸収するだけでも精度が向上(本質的?⾒た⽬上?)Face detection without bells and whistles, ECCVʼ14.https://www.slideshare.net/yonetani/face-detection-without-bells-and-whistles

!  ⼀義的なbounding boxの定義は重要

12

Mul?/SingleScaleRegionProposalNetwork(RPN)

!  Faster R-CNN、SSD、YOLO等(アンカーがスケールの違いのみのケース)

!  本論⽂ではスケール数=1

13

W

H

C

GoogLeNetベースIncepeon3bまでSPNは更にフィルタ数を1/4

スケール数×4存在確率 + 中⼼座標(x,y)+スケール

このセルに中⼼がありスケールが特定の範囲内の顔の存在確率存在するとすればその中⼼座標とスケール

実験

!  テストデータセット⁃  FDDB, AFW, MALF

!  訓練データセット⁃  インターネットから700K(!)画像収集、うち350Kが顔を含む⁃  AFLWも追加⁃  顔を含まないインターネットの350KとCOCOデータセットを

ネガティブサンプルとして利⽤!  ⽐較⼿法

⁃  SA-RPN (Scale-Aware RPN)•  提案⼿法

⁃  Multi-Scale Testing RPN (MST-RPN)•  画像を6スケールにリサイズしてsingle-scale RPN

⁃  Single-Shot Multi-Anchor RPN (RPN)•  6アンカーのmulti-scaleのRPN

14

ScaleProposalNetworkの評価

15

平均scaleproposal数 vsrecall1scaleでrecall0.8くらい=顔が複数あっても同じスケール

顔のサイズ vs⾒逃し率⾒逃しているのは⼩さい顔が多い

State-of-the-artとの⽐較

!  train-valid-testに分かれていないテストデータだけのデータセット

!  ⼤体提案⼿法群が⼀番良いよ!  MST-RPNが⼀番いいよ(scale proposalが6の提案⼿法のようなもの)

16

SA-RPN:0.938MSTRPN:0.928RPN:0.912

SA-RPN:0.882MST-RPN:0.892RPN:0.871

SA-RPN:0.988MST-RPN:0.992RPN:0.982

処理時間

!  平均処理時間はSA-RPN(提案⼿法)が⼀番短い!  MST-RPNは重いがRPNと⽐較してそこまで⼤きく違わない

17

感想

!  スケール選択は⾯⽩い(再現率が⼼配だが意外に⼤丈夫そう)⁃  選択スケールが細かいところが意外⁃  ⼀般物体はスケール⾊々なので難しそう

!  細かいパラメータが書いてない!⁃  Confidenceのしきい値とか、平均proposal数とか

!  現実問題ではスケールが結構限定されているケースが多い

!  SPNとRPNが断絶している⁃  同じようなことをやっているのでくっつけられそうだが

画像のリサイズが結構細かいスケールで⾏われるので難しそう

18

結局何がきいてるのかというと

!  最⼩スケールでの検出がスキップできる

19

遅いのは⼤体こいつのせい

FindingTinyFaces

20

キャッチーな結果!

21

WIDERFACEデータセットでのSotA

22

FasterR-CNNが最⾼精度だが論⽂の情報量がなさすぎ

アプローチ

!  ⼩さな顔も⾒つけるために…⁃  ⼊⼒画像を2倍にアプコンした画像も認識に使う⁃  さらに⼩さな顔専⽤の検出器を使う

!  ポイントは上記だが、それに⾄る実験の納得性が⾼い

23

検出の基本はHeatmapPredic?on(さっきと同じ)

!  Faster R-CNN、SSD、YOLO等(アンカーがスケールの違いのみのケース)

!  GitHub上のコードではres3 + deconvしたres4=⼊⼒の1/8、スケール25(feature mapの解像度は1種類)

24

W

H

C

ResNet101ResNet50VGG16

スケール数×5存在確率 +(x,y,w,h)

このセルに中⼼がありスケールが特定の範囲内の顔の存在確率存在するとすればその中⼼座標とスケール

コンテキストの影響(⼈間の認識精度)

!  異なるスケールの顔について、コンテキスト情報を変化させて「⼈間の」顔・⾮顔の分類能⼒を検証

!  コンテキスト重要!!

25

オリジナル ×3 300px

コンテキストの影響(heatmappredic?on)

!  異なるスケールのfeature mapを統合したheatmap prediction精度

!  コンテキストを増やすほど精度が向上する⁃  ⼩さい顔でres5まで追加すると精度低下→過学習によるもの

!  ⼩さい顔は⼩さい受容野でも精度が⾼い(顔がまるまる⼊るので!  ⼩さい顔のほうがゲインが⼤きい=⼈の精度とconsistent

26

+18.9%

+1.5%

Fovealstructureの影響

!  Foveal structure=マルチスケールの特徴を統合していること⁃  中⼼のほうが情報量が⾼くなるので⽬の中⼼窩のアナロジー

!  単純に受容野を⼤きく取るだけではなくマルチスケール特徴が重要⁃  顔のスケールに応じて⾃動で重要なスケール特徴を選択している⁃  ある程度⼈が設計しても良いかも

27

リサイズされた画像に対する認識率

!  ⼤きな顔に対し、⼩さくリサイズしてから検出するほうが精度が⾼い⁃  学習データのサイズの違い

!  ⼩さい顔は、⼤きくリサイズしてから検出するほうが精度が⾼い⁃  こちらはfine-tune元のImageNetの物体サイズに引きづられている

※顔は⼩さいほうがデータが多い、ImageNetは中くらいの物体が多い28

各スケールの顔を検出する際にベストな解像度

29

元画像での顔のスケール

精度

⼤きい顔はx0.5中くらいの顔はx1⼩さい顔はx2のスケールで検出すると良い

x0.5を検出器A

x1を検出器A

x2を検出器A

x2を検出器B

極⼩の顔は20px以下の顔を検出する専⽤の検出器を利⽤

全体像

30

実験結果

!  FIDER FACEとFDDBでSotA

31

Hardクラスで差が⼤きい=⼩さい顔で稼いでいる