NMS (Non-Maximum Suppression, 非極大値抑制)

記事を共有する:

1. NMS (Non-Maximum Suppression, 非極大値抑制) とは [概要]

NMS (Non-Maximum Suppression, 非極大値抑制)とは,画像処理・物体検出などの結果値画像において,フィルタ・テンプレートが最もヒットして強く応答が残った局所領域の極大値(Local Maximum)のみを最終的に残すために,それ以外の周辺位置を全てゼロ値に抑制する事後処理である.余分な結果の除去処理であり,特に画像認識では,物体検出の最終処理で用いられる.沢山検出された多数の物体検出候補の矩形のうち,最も信頼度スコアの高い矩形のみを最終結果に残して,他の余分な矩形は全て除去する.

この記事では,まず古典的な画像処理時代(2節)と,CNN中間層のReLU型活性化関数(3節)の,極大値検出としてのNMSの役割を紹介する.それを踏まえて,物体検出の最終事後処理としての「バウンディングボックス候補群の非極大値抑制」について紹介する(4節).4節がこの記事のメインである(Google検索でこのページに到達した方の多くは,4.2節がお目当ての内容になると思う).

NMS(Non-Maximum Suppression, 非極大値抑制): 物体検出CNNでの処理手順
図1. NMS(Non-Maximum Suppression, 非極大値抑制): 物体検出CNNでの処理手順

NMSは,もともと古典的画像処理向けに,古くから行われる後処理であった(2節).近年のCNNにおいても,中間層の活性化層(ReLU型活性化関数)が,実質的にNMSの役割を果たす(3節).

それが,物体検出のNMS(図1)では,最終後処理として,重なりある沢山のバウンディングボックス候補群から,最終的な物体インスタンスごとの検出結果へとまとめる際に用いられる.つまりは,スライディングウィンドウ処理(4.1)や,アンカーボックスからの候補抽出(4.2)がおわったのち,一番尤もらしい最終結果のみ残して,他は全て弾くために用いる.

1.1 記事の構成

2節以降は,非極大値抑制について,以下の3つについてそれぞれ紹介する:

現代では,物体検出での「バウンディングボックスの非極大値抑制」(4節)のみフォーカスされるようになっているが,伝統的に「画素位置レベルの値の非極大値抑制」が存在する(2節・3節).

つまりは,それら旧(2,3節)新(4節)の両方ともが,同じ「非極大値抑制」処理である点も,この記事によって把握してもらいたい.そもそも2節の内容は若い人は,古典的技術であることも知らないまま,物体検出CNNのNMSのみ存在を知っていると憶測する.

2. 画像処理時代の Non-Maximum Suppression

例えば,ハフ変換では,後半の最後の処理として非極大値抑制を実施する.古典的なハフ変換処理では,Cannyエッジ検出を行ったエッジ画像に対して,ハフ投票を行った累積行列画像を作るが,この時点のCannyエッジ画像にはノイズも多く,まだハフ変換の「直線のパラメータ」を,1つに決めきることがアルゴリズム的に難しい.そこで,極大値以外を0にする非極大値抑制(NMS)を行って「エッジだけ残った綺麗なCannyエッジ画像」をつくったのち,最終的な1点=直線の2パラメータを確定させるという処理を,ハフ変換のアルゴリズムでは行う.

一方,テンプレートマッチングでは,用意しておいたテンプレート中サイズ画像を,入力の大画像中にスライディングウィンドウさせて,まず各位置での2者の相関系の値を計算する.実画像だと,その結果値画像の各位置での応答値もノイズまじりなので,NMSで後処理することで,閾値以下の応答値は全て0に抑制することで,綺麗な検出結果(画像)が得やすい.

つまり,機械学習ベースの物体検出が登場する以前も,「空間フィルタリング後の応答マップ画像 (ノイズも多い) → NMSでベストの値だけ残す」という処理手順が,伝統的に行われていた.

3. 物体認識CNNでの中間層での活性化

物体認識向けの初期のCNNバックボーンでは,中間層の畳み込み層を順伝搬させた結果として得られる特徴マップをReLU型の活性化関数で活性化させる.その2つを組み合せる理由は,畳み込み層の各カーネルでフィルタリングした結果の特徴マップには,まだノイズ(小さめの応答)がまだ交じっているから,それを除去して強い応答だけを生き残らせる処理を行いたいからである.畳み込んだカーネルのパターンと,あまり合致していない領域も,中くらいの応答が返って特徴マップ画像上に残っているきている状態である.そこで,ReLU型の活性化関数で活性化すると,活性化関数の「押しつぶし(squashing)」効果により,「0 or 1」値に振り分けることができる.これにより画像上の大きな応答値のみが活性化されて残り,他のノイズに近い応答は0に近い値に抑制される.

これは「ローカル領域ごとで極大値以外を抑制して0値にしている」処理に相当しているので,非極大値抑制に相当しているともみなせる

※ 近い処理だが,局所極大値を探す処理を直接行っているわけではないことには注意.ReLU型の活性化関数のあとは,結果的に局所極大値のみ生き残るので,類似処理となっているだけではある

Deep Learning Bookにも書かれているが,この場合のReLUによる活性化は,CNN以前の画像認識処理パイプラインと比較して,畳み込み層とペアで働く検出器(detector)の役割を担当していると,LeNet以降のブームが来るまでの時代の頃から言われていた.

ReLU型の活性化関数は,正の範囲では活性化はおこなわず,負の範囲の抑制しかしない関数である.よって,実質的にNMSの役割とほぼ同値でもある (シグモイド系の関数は,正の範囲の値がつりあげられるので,活性化関数であると言える).

ただし,注意なのは,非線形活性化関数は,個別のニューロンに対して,ReLU型の関数で「小さいノイズ値は抑制,強い値は強調」を,各ニューロンごとに個別の活性化処理を行うという「処理の違い」である.2節や4節のような「特定の領域中の,全体の値をみて行うNMS」ではなく,個々の活性化出力に対してReLU処理で後処理をすると,結果として同じような効果が得られる.つまり「個別処理 v.s 領域全体処理」の違いはあることに注意 (ReLUの記事 2.1節の脚注にも,同じことを書いている).

4. 物体検出における後処理としてのNMS

さて,4節では「物体検出CNNで用いる,後処理としてのNMS」についてまとめる.

物体検出では,スライディングウィンドウ処理(4.1) or アンカーボックスからの推定処理(4.2)により,まず候補のバウンディングボックスが大量に出力される(数10~数100個).よって,それら候補のうち「同一物体のバウンディングボックスのみをグループとして対応付ける」必要がある.伝統的には,クラスタリングがそのグループ分けに用いられてきた.

候補ボックス群を,物体インスタンスごとにクラスタリングした後は,2節の頃と同じく,(グループ内での)極大値1つを選べば,最終的な検出結果を得ることができる.

4.1 単一クラス物体検出時代のNMS

古典的な単一クラス物体検出では,スライディングウィンドウ処理により,その各窓位置の画像特徴,SVM (or Boosting or Random Forest)などが「1(物体クラス)」と判定した窓を,候補ボックスとして出力する.スライディングウィンドウ処理が終了した後は,それらの候補ボックス群を,クラスタリングして,各物体インスタンスのグループにまとめる.そして,各クラスタの(ローカル)極大値として残し,最終結果とする.

単一クラス物体検出では,次の4.2節のCNN物体検出手法と違って,バウンディングボックスにはクラス確率や信頼度が出力されず,全て信頼度が同じのボックス群である(※ SVMだと識別境界までの距離を使ってもよいが,普通は用いなかった).

よって,同一クラス物体同士が隣接している密な状況にあると,クラス確率を用いての区別はできない.歩行者検出などの,「隣接して別の物体インスタンスが複数検出される」映像環境では,バウンディングボックスの位置座標を用いてクラスタリングを行い,物体Aと物体Bのクラスタを分割することが行われていた.

4.2 アンカーボックスベース物体検出でのNMS

NMS (Non-Maximum Suppression, 非極大値抑制): 物体検出CNNでの処理手順
図1 (再掲). NMS (Non-Maximum Suppression, 非極大値抑制): 物体検出CNNでの処理手順

また,画像入力からのアンカーベースのFaster R-CNNやSSD, YOLO以降の物体検出でも,出力されたバウンディングボックス群を集約する際に,NMS処理を利用するのは4.1節の時代と同じである.

アンカーボックスベースのCNN物体検出ネットワークでのNMS処理は,以下の手順で行われる(図1):

処理手順

  1. 物体検出ネットワークで,各アンカーボックスにおいて「バウンディングボックス + p + 各クラス確率」を出力する(図1-a).
  2. p < 閾値 = 0.5 (くらい)の,低い信頼度のバウンディングボックスを全て除去(図1-b).
  3. 閾値処理で残ったバウンディングボックスうち, 各クラス・各ローカル範囲ごとに,他の余分なボックスは除外して,最もpの値が高い(p ≒ 1.0) 値のバウンディングボックスのみを残して最終出力とする(図1-c).

4.1節とほぼ同じで,非常に単純な古典的処理である.ただ,NMS以外の処理が全てネットワークに学習されているのに対して,アンカーベースの物体検出インスタンスセグメンテーション手法では,最後のNMSだけは,手動で閾値パラメータチューニングをせざるをえない.これは3D点群からの物体検出でもインスタンスセグメンテーション でも同じで,出力されたバウンディングボックスを最終的にNMSでどのようにまとめるかが精度を左右する.

4.1節のCNN以前の単一クラス物体検出と異なり,各ボックスには,クラス識別情報も得られているのが違う.また,密なスライディングウィンドウでの密な候補ボックス群と異なり,アンカー同士は疎に少なく配置されている.従って,次ぎにのべる「同一クラス物体が頻出する状況(4.2.1節)」が発生しない限りは,グループ化の代わりにクラス識別情報による識別が,グループ化代わりになっており,NMSが上記手順で簡単に済むことが多い.

4.2.1 歩行者検出など,密な物体検出の状況

物体検出でもインスタンスセグメンテーションでも,各インスタンス候補が密で物体間遮蔽が多い状況ほど,4.1のようなクラスタリング処理がNMS時に必要である.

各アンカー・アンカーボックス同士の離れ具合にもよるが,KITTIなど,交差点で歩行者がたくさん遮蔽して密に登場する状況では,NMSによるクラスタリングの難易度も上がるので,独自に研究されている

※ ただしDETR系の手法は,Object Queries + Transformer方式の検出なので,NMSも使用しないので,この記事の話とは「処理方針」が異なる潮流である.

ここでは詳細までは述べない.興味がある方は,例えば Adaptive NMS [Liu et al., 2019]とその改善手法 [Huang et al., 2020] などの,「密な歩行者検出むけのNMS改善」の研究論文などが参考になる.

5. NMSのまとめ

物体検出CNNで用いられているNMS(非極大値抑制)を主なターゲット(4.2節)として,NMSについて古典的なものも含めて紹介した.

NMSは,非常に古典的な古い古典的な画像特徴抽出で使われていたこと,同じことを物体認識・物体検出でも使用しているだけである.過去の単一クラス物体検出では解きづらかった「密な物体検出(Dense Object Detection)」の文脈では,NMSによる接近した各物体への分割が重要となるので,NMS処理を改善して工夫する必要もある.

関連書籍

References

  • [Liu et al., 2019] Songtao Liu, Di Huang, and Yunhong Wang. Adaptive NMS: Refining pedestrian detection in a crowd. In CVPR, 2019.
  • [Huang et al., 2020] Xin Huang, Zheng Ge, Zequn Jie, and Osamu Yoshie. NMS by representative region: Towards crowded pedestrian detection by proposal pairing. In CVPR, 2020.

参照外部リンク