画像分類・物体検出・セマンティックセグメンテーション

画像解析の基本タスク

画像解析の技術は、科学、医療、農業、自動運転など様々な分野で使われている。画像解析の基本的なタスクとして、物体認識(object recognition)、物体検出(object detection)やセマンティックセグメンテーション(semantic segmentation)が挙げられる。

物体認識

物体認識のタスクでは、画像の中に写っている物体はなんであるのかを、識別(分類)することである。物体認識の出力結果は、与えられた選択肢の中からしか出力されない。例えば、犬と猫の写真を使用して学習されたモデルに、魚の写真を入れても、予測結果として犬か猫(あるいはそれらの確率)しか出力されない。物体認識は、画像解析のタスクの中で、比較的に簡単なタスクである。

物体認識を行う深層学習モデルには、AlexNet、ZFNet、GoogLeNet (Inception)、VGGNet、ResNet、Ensemble、SENet などがある。AlexNet は、物体認識のタスクにおいて深層学習の有効性を初めて示したモデルともいえる。従来の画像認識は特徴量を用いて行うのがほとんどであったのに対して、AlexNet は、5 層の convolution 層、1 層の pooling 層、3 層の全結合層からなる畳み込みニューラルネットワーク(CNN)を採用した。ZFNet は、AlexNet の convolution 層で用いられるフィルターのサイズを小さくするなどの改良を行った。VGGNet では、AlexNet に比べ、convolution 層と pooling 層をさらに増やして、全体で 16 層(VGG16)または 19 層(VGG19)構造としている。

GoogLeNet は、小さな Inception モジュールとよばれる小さなネットワークを繋げてできたニューラルネットワークである。Inception は、複数の convolution 層と pooling 層から構成されている。GoogLeNet は、こうした多様な構成からなる複数の Inception モジュールをつなぎ合わせることで、一つ大きなニューラルネットワークを実現させている。ResNet は、residual とよばれるモジュールを層の数を増やし、100 層や 1000 層からなる CNN を可能にした。

物体検出

物体検出は、学習で覚えた物体が画像中のどの領域にあるのかを検出することである。例えば、ヒト、自転車、車などの物体を覚えさせたモデルに一枚の写真を入力すると、そのモデルは、写真上のどこに既知の物体があるのかを検出し、その物体を矩形(バウンディングボックス)で囲む形で出力される。物体検出は、物体認識に加えて、その物体の位置も特定する必要があるため、比較的に難しいタスクといえる。

画像解析タスク(オブジェクト検出)

物体検出の一般的なアプローチとして、1 枚の入力画像から大量の部分画像を生成して、それらの部分画像それぞれに対して画像認識させてることによって、物体の位置を検出している。部分画像は、ある固定サイズのウィンドウを用意して、入力画像の左上を始点として、そのウィンドウを左から右へ、上から下へと少しずつスライディングさせて、ウィンドウに囲まれた画像を部分画像として保存している。このように作られた部分画像それぞれに対して、画像認識のアルゴリズムを適用して、画像認識させる。最後に、各部分画像に対する画像認識の結果をまとめて、物体を囲むバウンディングボックスを決める。さらに、画像中に含まれている物体のサイズは多様であるので、画像を拡大したり縮小したりしてから部分画像を作る必要がある。

深層学習を使用した物体検出アルゴリズムとして、R-CNN (Region-based CNN)、YOLO (You Only Look Once)、SSD (Single Shot Detector) などが知られている。これらのアルゴリズムの派生アルゴリズムや改良アルゴリズムも多数存在する。

R-CNN は、畳み込みニューラルネットワーク(CNN)をベースとした物体検出アルゴリズムである。スライディングウィンドウによって作成された大量の部分画像に対して CNN アルゴリズムを適用して物体認識させると、非常に計算コストがかかる。そのため、R-CNN では、まず画像に対して Selective Search と呼ばれるアルゴリズムを適用して、画像の中から物体らしきものの領域(候補領域)を検出している。次に、これらの候補領域のみに対して CNN アルゴリズムを適用して画像認識を行なうことで高速化を図っている。R-CNN の派生アルゴリズムとして、SPPnet、Fast R-CNN、Faster R-CNN などがある。

YOLO は、画像全体をグリッド状に分割し、各格子に対して物体認識を行なっている。YOLO は R-CNN に比べ、入力画像から部分画像の生成や各部分画像に対して処理を行わないので、物体検出の精度はやや低いものの、処理速度が非常に速い。YOLO3 が最新バージョンとなっている。

セマンティックセグメンテーション

セマンティックセグメンテーションは、画像解析のタスクの中でも難しいタスクに分類される。画像中に存在している物体の位置を特定するだけでなく、その物体の輪郭も合わせて検出する。このような作業をセマンティックセグメンテーションという。セマンティックセグメンテーションを行う深層学習モデルには、FCN、U-net、SegNet、DeepLab、RefineNet、PSPNet、mask R-CNN などがある。

画像解析タスク(セマンティックセグメンテーション)
SegNet 凡例

References

  • mshinoda88. 物体検出についての歴史まとめ. 2018, Qiita