ラビットチャレンジレポート 深層学習 その4

Section5 物体検知とセマンティックセグメンテーション

物体認識の種類

f:id:tibet:20211214210315p:plain

分類(Classification) 画面全体のクラスラベル
物体検知(Object Detection) 画面の中で物体を個別にボックス(bounding boxでとらえる
意味領域分割(Semantic Segmentation) ピクセルに対し単一のクラスラベル
個体領域分割(Instance Segmentation) ピクセルレベルで個別にクラスラベル

一般に上から下に行くにしたがって、タスクの難易度は上がる。

物体認識に使用されるデータセット

物体認識モデルの評価には、ベンチマークとなるデータセットが良く使われる。
データセットは、それぞれの特徴があるので、想定用途によって使い分けられる。

クラス下図 Train+val数 BOX/画像 解説
VOC12 20 11,540 2.4 VOC=Visual Object Classes 主要貢献者が2012年に亡くなったことに伴い終了
ILSVRC17 200 476,668 1.1 コンペは2017年に終了(後継はOpen Images Challenge) ImageNet(21,841クラス/1400万枚以上)のサブセット
MS COCO18 80 123,287 7.3 COCO=COmmon Object Context 物体位置推定に対する新たな評価指標を提案
OICOD18 500 1,743,042 7.0 ILSVRCの後継 ILSVRCやMS COCOとは異なるannotation process。Open Images V4(6000クラス以上/900万枚以上)のサブセット

それぞれで画像サイズも異なる。

    • PASCAL VOC:470×380
    • ImageNet:500×400
    • MS COCO:640×480
    • Open Images:一様ではない

少ないと、アイコン的な映りで、日常感とはかけ離れやすい。
大きいと、部分的な重なりなども見られ、日常生活のコンテクストと近くなる。

    • クラス数

多いと一般に情報量は多いが、多すぎると、ImageNetのように過度に細かいクラス分けになっている時がある。

各データのポジショニングマップを書くと下記のようになる。
f:id:tibet:20211214215240p:plain

評価指標

Confusionマトリクス、Precision, Recall

Confusionマトリクス
f:id:tibet:20211214220610p:plain
Precision, Recall
f:id:tibet:20211214220636p:plain
Confidenceの閾値を変化させることで、Precision-Recall Curveが描ける。
f:id:tibet:20211214220734p:plain

閾値変化に対するクラス分類と物体検出の違い

クラス分類は、閾値を変化させても総数は変わらないが、物体検出では、閾値に達したクラスのみが認識されるため、総数が変わる。
f:id:tibet:20211214221211p:plain

IoU:Intersection over Union

正解のBBOXと推論結果のBBOXの面積の合計で、双方がオーバーラップした部分の面積を割った数字である。
物体検出においては、ラベルの確信度のみでなく、物体位置の予測精度も重要なため、この指標が良く用いられる
f:id:tibet:20211214221949p:plain

物体検出におけるPrecision Recall

IoUが閾値以下のものは、FPにカウントし、検出されなかったもの(Confidenceが閾値以下のもの)は、FNにカウントする。
f:id:tibet:20211214223059p:plain

AP:Average Precision

IoUやConfidenceのある一点について閾値を定めれば、TrueとFalseを判定でき、Precision、Recallを計算できる。
しかし、モデルの評価としては、Confidenceの閾値を変化させたとき、閾値が高くても精度が高いものは指標としては高くあるべきで、ランキング評価のようなものも欲しくなる。
このための指標として、AP(Average Precision)というものが存在する。
定義としては、IoUの閾値を固定(0.5)し、Confidenceを走査することで得られるPrecise-Recall Curve(PR曲線)の下側の面積の値となる。
 AP=\int_{0}^{1}P(R)dR
物体検出のクラスの数がCの時、平均AP(mAP)は下記のように計算される。
 mAP=\frac{1}{C}\displaystyle\sum_{i=1}^{C}AP_i

  • MS COCOで導入された指標

IoU閾値を固定せず、0.5から0.95まで0.05刻みでAP&mAPを計算し、算術平均をとったもの。
 mAP_{COCO}=\frac{mAP_{0.5}+mAP_{0.55}+..+mAP_{0.95}}{10}

FPS:Flames per Second

物体検出は自動運転のようなリアルタイム処理の必要な用途もあるので、処理時間の指標も必要である。そのため、1秒当たり何フレーム処理したか(FPS)と一回の推論に必要な時間(inference time)という指標がある。
比較には、lなんのデータセットを用いたかも考慮する必要がある。
f:id:tibet:20211215001816p:plain

物体検知モデルの概説

物体検知モデルは以前からあり、SIFTという技術が主流だったが、2012年に発表されたAlexNetを皮切りに、DCNNへと主流が移り変わった。
その後の流れは、下記のようになる。
f:id:tibet:20211215165358p:plain
物体検知で、黄色と黄緑に文字が塗り分けられているが、それぞれ下記のような検出器になる。
-黄緑:2段階検出器(Two-Stage detector)

    • 候補領域の検出とクラス推定を別々に行う
    • 相対的に精度が高い傾向
    • 相対的に計算量が大きく推論も遅い傾向

-黄色:1段階検出器(One-Stage detector)

    • 候補領域の検出とクラス推定を同時に行う
    • 相対的に精度が低い傾向
    • 相対的に計算量が小さく推論が速い傾向

それぞれのネットワークの構造は下記のようになる。
入力から特徴マップを取得するところまでは同じだが、One-stage detectorは、出力のネットワークを2つに分けて、それぞれClassificationとBox regressionに分けて出力する。
Two-Stage detectorは、2つに分けた出力をさらにネットワークに入力し、Classification出力とBOXの位置出力を分けて出力する。
f:id:tibet:20211215165901p:plain

動作イメージはそれぞれ下記になる。
Two-stage detectorは、一段目のネットワークで、オブジェクトの位置を推定し、クロップする。
2段目のネットワークで、クロップしたBOXの位置情報を細かく把握し、物体の識別をする。
One-Stage detectorは、上記を一つのネットワークで行う。
f:id:tibet:20211215170326p:plain
One-Stage detectorは、Single Shot Detector(SSD)とも呼ばれる。
以下、利用が拡大しているSSDの説明をする。

SSD:Single Shot Detector

SSDのイメージとしては、下記のようにDefaultのBOXを用意し、それを変形してconfidenceを出力する形になる。
f:id:tibet:20211215173635p:plain

`SSDのネットワークアーキテクチャ

下記のVGG16のネットワークがベースになっている。
f:id:tibet:20211216132118p:plain
下記がSSDのネットワークアーキテクチャである。
特徴としては、中間層からそれぞれ直接出力するパスがあることと、VGG16のFC層2層をConv層に変更し、最後のFC層は削除しているところである。
f:id:tibet:20211216132431p:plain

特徴マップからの出力

f:id:tibet:20211216132907p:plain
SSDでは、分類と、Default Boxの位置と大きさを変更するため、マップ中の1つの特徴量における1つのDefalut Boxについての出力サイズは、
#Class+4
となる。ここで、#Classは分類するクラスの数、4というのは、オフセット項(位置の差分(ΔX, Δy)、大きさの差分(Δw, Δh)の数である。
オフセット項は、位置や大きさに関して下記のようにパラメータ化される。
位置(x,y)に対しては線形であるのに対し、大きさ(w, h)に関しては指数で効いていることに注意する。
f:id:tibet:20211216133538p:plain
マップ中の各特徴量にk個のDefault Boxを用意すると、出力サイズは
k(#Calss+4)
になる。
さらに、特徴マップのサイズがm×nであるとすると、出力サイズは
k(#Lcass+4)mn
になる。
結局、特徴マップごとに用意するDefault Boxの数は、k×m×n個となる。
SDDのデフォルトBOXの数の計算例を示す。
f:id:tibet:20211216134239p:plain
上記のネットワークで、青のパスでは、デフォルトBOXは各特徴に4つ、赤のパスでは、デフォルトBOXは各特徴に6つ用意するとする。
また、VOCデータセットでは、クラス数20に背景クラス1が考慮され、#Class=21となる。
青、赤それぞれのパスを計算すると、
4×(21+4)×38×38+4×(21+4)×3×3+4×(21+4)×1×1
6×(21+4)×19×19+6×(21+4)×10×10+6×(21+4)×5×5
合計で、8,732×(21+4)になる。
余談だが、上記のイメージ図における各フィルターのサイズだが、階層が進むにつれて物理的にフィルタが小さくなるわけではなく、サイズは一緒で解像度が低くなるようなイメージである。
フィルタのサイズが大きければ細かい特徴量が把握でき、小さければ、より全体の特徴を把握できる。

その他の工夫
  • Non-Maximum Suppression

これは、RCNNでも用いられている手法である。
同じ物体に対して、BOXが重なるような形で検出されることがあるが、この重複を解決するのがNon-Maximum SUppressionである。
具体的には、閾値のIoUをαなどと決めておき、同じ物体に対して複数重なっているBOXの中で、最もConfidenceが高いBOXに対して、IoU=α以上の値で重なっているBOXは、すべて消去するという方法でBOXの重複をなくす。

  • Hard Negative Mining

背景が指定されている検出器だと、背景を検出するBOXの数のほうが、背景ではない物体を検出するBOXより圧倒的に数が多くなってしまうことがある。
そこで、背景:非背景のBOXの数の比に制限を加えて、バランスをとるようにする手法である。
f:id:tibet:20211216135944p:plain

損失関数

損失関数は、検出位置と、分類のconfidenceと、双方に対して定義する
f:id:tibet:20211216140405p:plain

Semantic Segmentation

Semantic Segmenttationは、ピクセルごとに物体の分類を行うものである。
ネットワークの模式図は下記のようになる。
畳み込みで特徴マップのサイズを小さくし、クラス分類をしたのち、クラス数分のチャネルを持ったマップに拡張する。これをアップサンプリングという。
f:id:tibet:20211216140639p:plain
^なぜわざわざ特徴マップを小さくしてプーリングしたのち、アップサンプリングをするというステップを踏むのか
(答え)特徴マップを小さくすることで、画像全体の特徴を掴んで分類する。

アップサンプリングの仕組み

アップサンプリングの技術をDeconvolution/Transposed Convolutionと呼ぶ。
この仕組みは、畳み込みと同様、プーリングされた画像に対して、カーネルフィルタを用いる。
1.特徴マップのpixel感覚をstrideだけ空ける。
2.特徴マップの周りに(kernel size-1)-paddingだけ余白を作る。
3.畳み込み演算を行う
下図はkernel size=3, padding=1, stride=1のDeconv.による3×3の特徴マップから5×5にUp-samplingされる様子を図示している。
f:id:tibet:20211216141436p:plain
Deconvでは、poolingで失われた情報が復元されるわけではない。

  • 輪郭情報の補完

Poolingによるローカルな情報(輪郭)が失われるので、低レイヤーpooling層の出力を要素ごとに加算することで、輪郭情報を補完する。
f:id:tibet:20211216142126p:plain
f:id:tibet:20211216142303p:plain

U-net

上記に近い発想のネットワークとして、U-netがある。
Encoder部分で畳み込みで段階的に小さくした特徴マップを、Decoder部分で段階的に逆畳み込みで大きくしていくネットワークで、各ステップにスキップコネクションを使って輪郭情報を補完している。
特徴としては、低レイヤーの情報を要素ごとに加算するのではなく、チャネル方向に結合するところである。
f:id:tibet:20211216142512p:plain

Dilated Convolution

最後に、Convolution段階で受容野を広げるDilated Convolutionについて紹介する。
これはアップサンプリング時と同様の操作を畳み込み時に行うものになる。
これによって、より少ない層数で広い受容野の特徴量を獲得することが可能になる。
f:id:tibet:20211216143158p:plain