画像セグメンテーション用のアルゴリズム、u-netについて簡単に説明する

きっかけ

kaggleであるコンペに参加しようとしてkernelを見たところ、みんな「u-net」ってアルゴリズムの話をしていた。聞いたことがなかったし全然分からなかったので調べてみた。

論文の著者が5分で簡単に説明している動画があるので、その内容をまとめる。
5 Minute Teaser Presentation of the U-net: Convolutional Networks for Biomedical Image Segmentation - YouTube

5 Minute Teaser Presentation of the U-net: Convolutional Networks for Biomedical Image Segmentation
youtube動画に対して、私が英語の文字起こしをして、さらに日本語訳の字幕を追加した。しかし現時点ではどちらも表示されていなくて悲しい……(誰かが字幕の審査をしてOKを出さないと表示されない。どなたか文字起こし・字幕の審査にOKを出してくれるとありがたい)

※この記事を書くにあたり、u-netの論文は読んでいません。ご注意ください。

概要、何に使うのか

u-netは画像のセグメンテーションのためのアルゴリズム。2015年に発表された。

手法のキモはどこか

u-netのアーキテクチャ(構成図)はこちら。
f:id:soratokimitonoaidani:20180924002248p:plain
これがU字型に見えるからu-netって名前なんですね、

3×3のkernelを用いて畳み込みをして、Max-poolingで縮小、という処理はCNNで一般的だ。その後、2×2のkernelを用いて拡大をして、元のサイズに戻す。
畳み込み→拡大という流れはAuto-Encoderと似ているのだが、縮小段階の途中の特徴量マップを、拡大段階の学習で再度使用するというのが最大の特徴である。

具体的に説明しよう。
図の上部に長い右向きの灰色矢印がある。矢印左側では、縮小段階の途中の568×568の特徴量マップが64枚ある。
矢印右側では、アップサンプリングしてきた392×392の特徴量マップが64枚ある(64という数字は直接登場しないが、結合結果が128枚であることから64枚と考えられる)。
縮小途中の64枚+アップサンプリングしてきた64枚 の合計128枚を結合(concatenate)したのちに入力として、次の特徴量マップ(390×390サイズ、64枚)を作る。
矢印の左右で画像サイズが異なるので、568×568から中央392×392だけを切り出して(crop)使用している。

通常のCNNは畳み込みでパディングをしているが、u-netの畳み込み時には、実行しない。
このため画像サイズが処理を経るごとに小さくなっていく。
(なんでパディングをしないのかは謎。kaggle上での実装を見てみると普通にパディングしてる例もある。)

先行研究と比べてどこがすごいか?

学習に使う画像の数が少なくても良いらしい。
あと学習および学習後の適用が高速である。(u-netは全結合の層が全く無いので、パラメータ数が小さい。それが速い理由だろうか?)

既存手法に比べて画像セグメンテーションの精度が良い。

参考

論文著者のサイト:
U-Net: Convolutional Networks for Biomedical Image Segmentation
機械学習の論文を日本語でまとめているarXivTimes上での説明:
U-Net: Convolutional Networks for Biomedical Image Segmentation - Issue #294 - arXivTimes/arXivTimes - GitHub