5章 Advanced Convolutional Neural Network

computer vision, video, textual documents, audio, music の分野に CNN を適用する方法を述べる。

Computer vision

Composing CNNs for complex tasks

Classification and localization (クラス分類と位置決定)

画像の中で発見されたオブジェクトのクラスを答えるだけでなく、そのオブジェクトを囲むバウンディングボックスの座標も答える問題である。このような問題では、画像中にオブジェクトは1つだけあることが前提である。

典型的な分類ネットワークによる "classification head" に加えて、"regression head" を付加することで達成できる。

分類ネットワークでは畳み込みやプーリング操作の最終出力 (feature map) は、全結合ネットワークに入力されて、クラスの確立を表すベクタを出力する。この全結合ネットワークは classification head と呼ばれる。 categorical cross entropy のようなカテゴリ損失関数 $L_c$ を用いて訓練される。

regression head は別の全結合ネットワークであり、feature mapを入力として、バウンディングボックス ($x$, $y$, $w$, $h$) を出力する。 mean squared error (平均2乗誤差)のような連続損失関数 $L_r$ を用いて訓練される。 ネットワーク全体の損失は2つの損失の線形和 $L = \alpha L_c + (1- \alpha) L_r \quad (0 \leqq \alpha \leqq 1)$ である。$\alpha$ はhyperparameter であり、特に理由がなければ $\alpha =0.5$ としてもよい。

Semantic segmentation

Semantic segmentation では、画像の各ピクセルが、1つのクラスに属しているか否かを分類する。

初期の実装としては、各ピクセルに対する classifier を作ることが考えられる。入力は各ピクセルとその近辺のピクセルである。この実装に対する改善策としては、画像に畳み込みフィルタを適用して、画像の幅と高さを変えずに、feature方向の深さを増す方法がある。各ピクセルについて feature map を計算して、全結合ネットワークへと入力して、そのピクセルのclassをpredictする。ただし、この方法は効率が悪いので、普通は使わない。

3番目のアプローチとしては CNN encoder-decoder ネットワークがある。encoder は幅と高さを減らし、feature方向の深さを増やす。decoderは幅と高さを増やし、feature方向の深さを減らす。decoder では transposed (転置) convolution (畳み込み) を使う。 このネットワークへの入力は画像で、出力はセグメンテーションマップである。

encoer-decoder アーキテクチャの一般的な実装は、U-Net https://github.com/jakeret/tf_unet である。 U-Net は生物医学的な画像セグメンテーションのために開発されたもので、対応するencoderとdecoderの間に skip-connection が付加されている。

Object detection

オブジェクト検出は、classification and localization に類似している。 大きな違いは、画像の中に複数のオブジェクトが含まれていて、各オブジェクトに対してクラスの種類とバウンディングボックスを出力する点である。画像に何が何個含まれているかは事前にはわからない。

最初のアプローチとしては、画像の部分画像をを作成して、それを classification and localization の入力とする方法である。しかし、この方法は計算量が莫大であり、あまり成功していない。

もっと実践的な方法としては、Selective Search http://www.huppelen.nl/publications/selectiveSearchDraft.pdf (画像の中のオブジェクト部分を見つける古典的手法)を使う方法がある。 Region Proposal Network または R-CNN (Resions with CNN features) と呼ばれる。 初期の R-CNN では、領域はリサイズされてネットワークに入力され、画像ベクトルを出力する。 そのベクトルは SVM で作られた classifier によってクラス分類される。 他のツールから提案されたバウンディングボックスは、画像ベクトルに対して線形回帰ネットワークを適用することで、訂正される。

R-CNN ネットワークを発展させたものが Fast R-CNN である。 他のツールから提案された領域を使うが、個々の領域を CNN への入力とする代わりに、全体画像を CNN に与え、領域提案は結果の feature map に対して写像される。 興味の対象の領域は ROI (Region of Interest) プーリング層を通して入力され、全結合ネットワークを通って、ROI の feature map を出力する。 ROI プーリングは、CNNを用いてオブジェクト検出を行う場合に、よく利用される操作である。 ROI プーリング層は、max pooling を、正しい領域の features を $H \times W$ の固定された大きさの小さいfeature map へと変換する。 feature ベクタは、2つの完全結合ネットワークへと入力される。一方のネットワークはROIのクラスを分類し、他方は提案されたバウンディングボックスを訂正する。 Fast R-CNN は R-CNN よりも 25 倍高速であった。

Fast R-CNN をさらに発展させたのが Faster R-CNN であり、 実装 https://github.com/tensorback/tensorpack/tree/master/examples/FasterRCNN では外部の領域提案機構を取り除き、trainできるコンポーネント RPN (Region Proposal Network) に置き換えている。 このネットワークの出力は feature map と組み合わされて、類似した Fast R-CNN ネットワークへのパイプラインへと出力される。全体として、R-CNN よりも 250 倍高速化された。

これ以外のオブジェクト検出ネットワークとして、YOLO (Yoo Only Look Once) のような SSD (Single Shot Detectors) がある。YOLO では $7 \times 7$ のグリッドに分割され、49の部分画像を扱う。 $B$ 個の バウンディングボックス と $C$ 個のクラスが与えられた時、各画像への出力は $(7 \times 7 \times (5B+C))$ の大きさのベクタである。 バウンディングボックスは信頼度と座標 ($x$, $y$, $w$, $h$) を持つ。各グリッドはその中の別のオブジェクト検出に関して予測確率を持つ。

YOLO ネットワークはこの変換を行う CNN である。最終的な予測とバウンディングボックスは、発見されたベクタを集めることで得られる。YOLO は一つの CNN で、複数のバウンディングボックスと関連するクラス確率を出力する。 小さいオブジェクトの検出は失敗する場合がありえる。

Instance segmentation

instance segmentation は semantic segmentation に類似している。 異なる点は、第1に1枚の画像の中の同じクラスの別のインスタンスを区別する必要がある点である。 第2に、ピクセル中のすべてのピクセルをラベル付けする必要はない点である。 ある種の観点から、instance segmentation は object detection にも似ているが、 バウンディングボックスの代わりに、各オブジェクトを覆うマスクを発見する点が異なる。 すなわち Mask R-CNN ネットワークである。regression head の前にCNN を追加した Faster R-CNNである。 各ROIで提案されたバウンディングボックスの座標をにゅうりょくとして、バイナリマスクを出力する。

2019年4月にGoogleが TPU で pre-trained した Mask R-CNN をオープンソースとして公開している。 https://colab.research.google.com/github/tensorflow/tpu/blob/master/models/official/mask_rcnn/mask_rcnn_demo.ipynb

Google は DeepLab という TPU でtrained された別のモデルも公開している。 https://colab.research.google.com/github/tensorflow/models/blob/master/research/deeplab/deeplab_demo.ipynb#scrollTo=edGukUHXyymr