U-netを使ってみる〜ざっくりとアルゴリズム編〜

Developers's blog

2019.11.11 田村 和樹
U-netを使ってみる〜ざっくりとアルゴリズム編〜

はじめに

U-netはFCN(fully convolution network)の1つであり、画像のセグメンテーション(物体がどこにあるか)を推定するためのネットワークです。

生物医科学(biomedical)の画像のセグメンテーションを行うために2015年に発表されました。

(論文URL : https://arxiv.org/abs/1505.04597)

この記事では、まずU-netの中で行われている処理についてを1〜4章でまとめ、それらの組み合わせであるU-netをまとめたいと思います。

目次

1.Semantic segmentation

2.fully convolution network(FCN)

3.deconvolution

4..skip-conection

5.U-netの仕組み

1.Semantic segmentation

画像のピクセルそれぞれをクラス分類するタスクです。

(MNISTなど)画像のクラス分類と異なるのは、画像全体をクラス分類しない点です。

ピクセルごとのクラス分類ができると、以下のような出力を得られます。

Alt text

by https://devblogs.nvidia.com/image-segmentation-using-digits-5/

2.fully convolution networt(FCN)

一般的なCNNでは畳み込み層と全結合層がありますが、FCNはこの全結合層を畳み込み層に置き換えたものです。

全結合層を畳み込み層に置き換えることで、「物体がなにであるか」という出力から「物体がどこにあるか」という出力になります。

Alt text

by https://arxiv.org/abs/1411.4038

画像上部分が画像全体のクラス分類で、画像下部分はヒートマップで猫がどのあたりにいるかネットワークが把握していることがわかります。

3.deconvolusion

1つ上の画像のヒートマップは入力画像に畳み込み処理を何度も行い、とても小さくなっています。

これに1番上のような出力が得られるような処理を行なっていきます。

このような処理を「up sampling」といい「deconvolution」が有名です。

日本語だと「逆畳み込み」といい、畳み込み処理の逆処理だと思ってください。

CNNで畳み込み層のフィルターの要素を学習していくように、逆畳み込み層のフィルターも同じように学習できます。

4.skip-conection

畳み込み処理を加えていくと、ネットワークが「物体が何であるか」についての特徴を抽出していきますが、poolingの影響で「物体がどこにあるか」についての特徴は失われていきます。

畳み込み処理を行なった後で、逆畳み込みを行なっても物体の位置情報は満足に復元できない場合があります。

それを解決するのがskip-conectionです。

これは畳み込みを行なった後、特徴マップを保持しておいて、後で逆畳み込みをする画像に足し合わせる処理です。

上で提示した車の画像に用いると以下のようになります。

Alt text

by : https://devblogs.nvidia.com/image-segmentation-using-digits-5/

推定する領域(色のついた部分)がシャープになっていることがわかります。

5.U-netの仕組み

U-netには上でまとめた

・fully convolution network(FCN)

・deconvolution

・skip-conection

が使われています。

構造は以下のようになっています。

Alt text

by : https://arxiv.org/abs/1505.04597

左右対象でアルファベットの「U」に似ていることから、「U-net」と呼ばれているそうです。

大雑把に左側の処理では画像の畳み込みを行い、右側では逆畳み込みをskip-conection(中央矢印)からの情報を参考に行なっているイメージです。

まとめ

U-netの内部で行われる処理について、ざっくりと説明しました。

まとめると・・・

・画像全体のクラス分類(MNISTなど)からFCNとdeconvolutionを使い、物体の位置情報を出力できるようになった

・skip-conectionを用いて畳み込みによって失われる位置情報を保持しておくと、より精密な領域を出力できる

・U-netは上記2つを上手く組み合わせている

次回はPythonで実装を行い、学習している様子を観察してみようと思います。


定期的にメルマガでも情報配信をしています。
ご希望の方は問い合わせページに「メルマガ登録希望」とご連絡ください。

お問い合わせはこちらから