LoginSignup
3
5

More than 1 year has passed since last update.

im2colの実装で出てくる式をわかりやすく視覚化してみます

Last updated at Posted at 2022-01-15

有名な「ゼロから作るDL」🐟 第7章に出てくる"im2col"。

im2colの定義式について問う問題が、某E資格対策講座の教材で出題されましたので、
図に書いて自分用にメモを取りました。
「視覚的に、なんとなく」 わかってもらえたら幸いです。

im2colのソースコードはどなたでも閲覧可能です。
リンク先githubの39〜68行目が該当します。

im2colの概要については、「ゼロつく」 やその他にお譲りします..。

今回はこのソースコード中の

col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]

という式 だけ に注目して、解説します!(せまい!)
一応、E資格講座の質問担当様にも、理解に間違いがないかチェックしていただきました。

この式、一見簡単そうに見えますが、よくよく見ると「?」 となるのはぼくだけでしょうか?

1.
まずは簡単のため、前提条件はこんな感じとします。
4 × 4の画像がRGBの3チャンネルあるとします。
ストライドやフィルターの大きさは以下の通り。
pythonでは、例えば
"0:4:2"という表記は、「0列目から4列目まで、2つ飛ばしで」という意味です。
image.png

image.png

2.
image.png
3.
image.png
4.
image.png
5.
col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]
の式の右辺の意味は、4.までで(あくまでなんとなく)ご理解いただけたかと思います。

では、この右辺=左辺 とはどういうことか? というと、、
(4つの図は、それぞれ右辺にあたるものが左側、
          左辺にあたるものが右側 にあるのでご注意ください)
image.png

以上が、
col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]
の視覚的な理解になります。

おまけ
なお、その次に続く、最後の式
col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N*out_h*out_w, -1)
は、詳細までは力尽きて視覚化できませんでしたが、
以下の図のような変換をしている式とのことです。
( (x,y)=(0,0) の時の例だけ載せています )
image.png
なんでこの式でこういう変換になるのか、途中を図示できる方はぜひぜひお願いします..
ぼくにはわからない..

おしまいです

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5