深層学習day4 Section6:物体検知・セグメンテーション
要点まとめ
分類と物体検知との違い
下記の順に難易度が上がっていく。
Classification (分類)
画像に対し単一または複数のクラスラベル
Object Detection (物体検知)
画像の矩形領域をBouding Box (bbox/BB) を検出する。
Semantic Segmentation (意味領域分割)
各ピクセルに対して単一のクラスラベル。 複数の風船があった場合でも同じラベル付けを行う。
Instance Segmentation (個体領域分割)
各ピクセルに対して単一のクラスラベル。 複数の風船があった場合、それぞれの風船に異なるラベル付けを行う。
Object Detection
一般的な出力例
代表的データセット
VOC12
VOC=Visual Object Classes 主要貢献者が2012年に亡くなったことに伴いコンペも終了。
- 20クラス
- 11540枚の画像
- Box/画像 = 2.4
- Instance Annotation 有り
ILSVRC17
ILSVRC=ImageNet Scale Visual Recognation Challange。 ImageNetのサブセット。 コンペは2017年に終了。後継はOpenImagesChallange。
- 200クラス
- 476668枚の画像
- Box/画像 = 1.1
MS COO18
MS = Microsoft COCO = Common Object in Context 物体位置推定に対する新たな評価指標を提案。
- 80クラス
- 123287枚の画像
- Box/画像 = 7.3
OICOD18
OICOD = Open Images Challange Object Detection ILSVRC や COCOとは異なる Annotation process
- 500クラス
- 1743042枚の画像
- Box/画像 = 7.0
Box/画像 が小さいと、アイコン的となり日常感とかけ離れやすい。 Box/画像 が大きいと、1枚の画像に多くの物体が写っており日常感がある。
IoU
Intersection over Union.
評価指標
Precision, Recall 等の評価指標はクラス分類などと同じ。 物体検知はクラス分類などと異なり、Thresholdが変わると候補となるBox数が変わってくることが違う。
確率が閾値より大きいものに対して、IoUを判定しIoUが閾値を超えているものがTP、超えていないもの もしくは 同一のBoxに対して複数検出したもがFP。全く検出できなかったBBはFNとなる。
Recall, Presitionの復習。
Confidenceの閾値を少しずつ変化させると、Recall, Precisionも少しずつ変化するため、PはRの関数としてと表せる。 閾値を0~1に変化させた時にRとPが描くカーブを、 Precision-Recall curve と言う
多クラスの場合、上記のをクラスごとに求めて平均を取るようにしたものを、 mAP : mean Average Precision と言い、クラス数をとして下記のように定義される。
近年、 FPS : Frames per Second という検出速度も問題となっている。検出精度と検出速度の両方が重要視される。
物体検知のアルゴリズム
2段階検出器 (Two-stage detector)
- 候補領域の検出とクラス推定とを別々に行う
- 相対的に精度が高い
- 相対的に計算量が大きく推論も遅い
1段階検出器 (One-stage detector)
- 候補領域の検出とクラス推定とを同時に行う
- 相対的に制度が低い
- 相対的に計算量が小さく推論も速い
SSD : Single Shot Detector
VGG16をベースネットワークとして構成されている。1段階検出器。 VGG16を少し変更したネットワークのある中間層から、複数のアスペクト比のDefault box を用いて部分を切り出したものからクラス検出を行わせる。 クラス数は検出対象の20クラスに背景クラスを加えて21クラスとなる。
Semantic Segmentation
CNNで解像度を落として特徴量抽出していくと、入力時よりも解像度が落ちているが、それをUp samplingして元画像の解像度に戻す必要があるという問題がある。
VGG16等では最後に全結合層があるため、という層になっていたが、全結合層ではなくConvolution層を用いることで二次元的な繋がりを崩さずにHeatmap的な画像を得られる。
そこで、Deconvolution / Transpose convolution という手法でupsamplingしている。
CNN深い層では特徴量は抽出されているが、解像度が落ちて輪郭が失われているため、低レイヤと同じ解像度にUp samplingした上で低レイヤの情報と加算することを繰り返すことで輪郭情報を復元している。
また、Unpooling という、pooling時にどの画素が選択されたかを覚えておいて、Unpooling時にもともと存在した画素に戻すという方法もある。
実装演習
実装演習なし
確認テスト等考察
過去のデータセットはクラス数、画像数、画像あたりのbox数等で、それぞれの時代で役割があった。
物体検知の評価指標は、考え方は混同行列がベースだが、TP/FP/FN のラベル付けの考え方を覚える必要がある。
また、ConfidenceによってTP/FP/FN が変化するが、Confidenceを0~1で振った時のPrecision-Recall curveが成す面積 AP が重要な評価指標。他クラス分類の場合は全クラスのAPの平均値であるmAPが重要な指標となる。
SSDは既存のVGG16のネットワークの途中から複数のdefaultboxで切り出したものを分類することで、1段階検出を実現している。
Semantic Segmentationは、CNNの深い層で解像度が落ちた状態から、DeconvolutionやUnpoolingで解像度をもとに戻してup-samplingしている。
追加演習
なし