Semantic SegmentationとFCNを解説!

Semantic Segmentationとは

今までの画像認識では画像を学習して、ラベル名を推測するといったケースが一般的でした。
Semantic Segmentationでも技術としては間違いでは無いのですが、
Semantic Segmentationは画像内の全画素においてラベル分類することが可能です。

実際に全画素においてラベル分類できるとどうなるのか?

以下のサイトのような感じ

lionbridge.ai

画像に写る物体が何なのかを可視化してくれます。

畳み込みニューラルネットワーク(Convolutional Neural Network)

まずは復習がてらに一般的に画像認識で適用されるCNNについて。

畳み込み層

畳み込み層では、入力画像をフィルタを用いて、畳み込み演算をします。
様々な特徴をまとめたフィルタ群を形成しており、
入力画像とフィルタで畳み込み計算を行い、特徴マップとして出力されます。
特徴マップではフィルタと画像の部分領域に共通した特徴が見られると、
高い値となり、画像の特徴量として抽出できるのです。

畳み込み層ではフィルタが重みパラメータとしての最適化され、
前記事で述べた誤差逆伝播法によりフィルタの誤差勾配が計算されています。

プーリング層

プーリング層では、重要な情報を保持しながら情報量を縮小します。
プーリングには2つの利点があり、1つ目は情報量の縮小により計算量の削減。
2つ目は特徴の位置情報を汎化させることにより、
画像内の位置が異なっても結果は問題なく物体認識できるようになっています。

詳細は以下の記事へ。

products.sint.co.jp

完全畳み込みニューラルネットワーク(Fully Convolutional Neural Network)

Fully Convolutional Neural Networkを略すとFCN。

Semantic Segmentationは完全畳み込みニューラルネットワーク(FCN)により実現されます。
以下の記事では、CNN内部やFCN内部でどのような層が存在し、何を実現してくれてるか、を丁寧に説明してくれています。

qiita.com

Semantic Segmentationでは、出力サイズが画像の画素数×ラベル数となっています。
画像の1画素あたりにラベルが割り当てられている状態です。

FCNではCNNのように画像を畳み込み計算した後、
小さくなった特徴マップに対して、入力画像と同サイズまでアップサンプリングしています。
アップサンプリングとは逆畳み込み処理です。

入力データの特徴を抽出し、次元削減を経た後、
出力データのサイズまでアップサンプリングさせる考え方は、ある種Auto Encoderであるとされています。
AE(Auto Encoder)やVAE(Variational Encoder)については今後記事にする機会があるかもしれません。