[備忘録]U-Netとかのセグメンテーションに使われている演算のゆるーいイメージ

&nbsp;
c-ResNetの論文を読んでいて、そもそもU-Netって何？となったので、U-netやセグメンテーションに使われている演算のゆるーいイメージを残しておく。
<h1>U-Netとは</h1>

u-netは、画像を高速かつ正確にセグメンテーションするためのCNNアーキテクチャ。
<figure>
  <img src='https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/u-net-architecture.png' width='640'><br>
  <figurecaption>
図1．U-net architecture (example for 32x32 pixels in the lowest resolution). Each blue
box corresponds to a multi-channel feature map. The number of channels is denoted
on top of the box. The x-y-size is provided at the lower left edge of the box. White
boxes represent copied feature maps. The arrows denote the different operations.
  </figurecaption>
</figure><br>
<a href="https://arxiv.org/pdf/1505.04597.pdf">U-Net: Convolutional Networks for Biomedical Image Segmentation</a>より
&nbsp;

<h1>主な計算手法</h1>
<p>U-Netでは大きく分けて四つの演算を用いています。</p>
<p>それぞれ</p><ul>
<li>Convolution</li>
<li>Max Pooling</li>
<li>Upconvolution</li>
<li>Copy and Crop</li>
この四つの演算についてのゆるーい頭の中のイメージを忘れないように図で描いておく。
</ul>
<ul>

<li><h2>Convolution</h2></li>
<p>最も基本的なConvolutionのイメージ</p>
<figure>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698484/e38e27fb-685b-d769-8154-ac5910fd69f0.png"><br><figurecaption>
図２．フィルターが3×3、stride=2, no-paddingのConvolutionの例
</figurecaption></figure><br>
&nbsp;&nbsp;

<figure>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698484/91691443-d3d4-5a0a-f3fd-7af1fe1fdb84.png"><br><figurecaption>
図３．フィルターサイズが3×3、stride=2, no-paddingのConvolutionの例
</figurecaption></figure>
&nbsp;&nbsp;

<p>基本的にConvolutionの図を用いた説明はこの上の二つのどれかだと思いますが、腑に落ちなかったので、以下のような図で腑に落とした。</p>
<figure>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698484/948cfacf-4b27-14cb-3fd9-b3c1ac0c83f2.png"><br><figurecaption>
図4．図3のConvolutionを別の表現であらわしたもの
</figurecaption></figure>
&nbsp;
&nbsp;


<li><h2>max pooling</h2></li>
<figure>
    <img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698484/de6a994a-cc47-6c3e-c8b8-338094672706.jpeg'><br><figurecaption>
<p>図5．2×2のmax poolingの例
</figurecaption>
</figure>


<li><h2>Upconvolution</h2>
Upconvolutionは
<ul>
<li>Transpose Convolution(転置畳み込み)</li>
<li>Franctionally strided convolution</li>
<li>Backward strided convolution</li>
</ul>
とも呼ばれている。
ただし、Deconvolutionは適切ではない。注意が必要。 

&nbsp;&nbsp;
<figure>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698484/ab25130a-8492-d259-a770-24997b983887.png"><br>
<figurecaption>
図6．3×3 Upconvolution, stride=2, pad=1の例
</figurecaption></figure>

&nbsp;&nbsp;

<figure>
    <img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698484/108027b5-839b-14cf-3f8e-1cf8ba76b89c.png'><br><figurecaption>
<p>図7．2×2 Upconvolution, stride=2, no-paddingの例
</figurecaption>
</figure>

&nbsp;

<li><h2>Copy and Crop</h2></li>
<p>下図にもあるように、ここの部分で何が起きているのか理解しづらい。<br>ただ、わかっているのはDownsamplingで失われた位置情報をここで取り戻しているということ。</p>
<figure>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698484/9d2c12d4-da38-0ae4-bf10-83221823915e.png"><br>
<figurecaption>
図8．U-NetモデルのCopy and Cropが使用されている箇所
</figurecaption></figure>

&nbsp;&nbsp;

<figure>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1698484/10d6a9d2-c98b-dc31-58e9-832605b755e8.png"><br>
<figurecaption>
図9．図8を自分流に描き替えたもの
</ul>

&nbsp;&nbsp;

<h1>参考にしたもの</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=nDPWywWRIRo">Stanford University School of Engineering, Lecture 11 | Detection and Segmentation</a>
</li>
<li><a href="https://medium.com/lsc-psd/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AA%E3%82%89%E7%AD%94%E3%81%88%E3%82%89%E3%82%8C%E3%81%A6%E5%BD%93%E7%84%B6%E3%81%AE4%E3%81%A4%E3%81%AE%E5%95%8F%E9%A1%8C-%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E5%B1%A4%E7%B7%A8-659809195d2">機械学習エンジニアなら答えられて当然の問題4問 ~畳み込み層編~</a>
</li>
</ul>