Help us understand the problem. What is going on with this article?

Convolution処理の手法 Im2Col方式の図解

More than 1 year has passed since last update.

先日のConvolution処理の記事「高速な Convolution 処理を目指してみた。Kn2Image方式」で の 比較対象として紹介した Im2Col 方式 について図解します。

参考文献

Im2Col 方式

  • Im2Col方式の特徴は、行列積演算1回でConvolution処理を行うために、Source Image の画素配置を(重複ありで)変形させるところにあります。
  • 本記事では、変形させた画素配置を col展開 と呼称します。
  • 以下、順を追って図解します。

画素配置変換 (Image → Col展開)

  • 下図の8×6の画像 を 入力画像として説明していきます。
  • 説明用に1画素のみ 色 を変えてあります。

01_1.PNG

  • フィルタは 3×3 です。
  • ⑤を注目画素とします。

01_2.PNG


  • 左上の画素を始点とします。
  • 注目画素 と 近傍(3×3)を、1列にシリアライズします。
  • 範囲外の ①②③④⑦ は 0値 を格納します。

02_1.PNG


  • 注目画素を右に移動させます。
  • 同様に、注目画素 と 近傍(3×3)を、1列にシリアライズします。

02_2.PNG


  • 同様に...

02_3.PNG


  • 右端に達すると、

02_4.PNG


  • 注目画素を 一行下の左端に 移します。

02_5.PNG


  • 同様に...

02_6.PNG


  • 同様に...

02_7.PNG


  • 同様に...

02_8.PNG


  • 同様に...

02_9.PNG


  • 同様に...

02_10.PNG


  • 同様に...

02_11.PNG

  • Sorce Image の右下の終点まで行います。

補足

  • Sorce Image の画素A は、Col展開上に9か所($A_1$~$A_9$)に 存在します。 03_1.PNG

画素配置変換 (Col展開 → Image)

  • 先ほどとは逆に、Col展開 から Image状 に戻す方法です。
  • 逆伝播で dIn を算出する際に 使用します。 
  • 先ほどの Col展開 の図を用います。

04_1.PNG


  • 左端を開始列とします。
  • 注目列 を 3x3に戻します。

04_2.PNG


  • 注目列を1つ左に移します。
  • 注目列 の 3x3に戻します。 
  • Destination Image に 加算 します。

04_3.PNG


  • 同様に、注目列を1つ左に移します。
  • 注目列 の 3x3に戻します。 
  • Destination Image に 加算 します。

04_4.PNG

  • 注目列が Col 展開の右端に達するまで繰り返します。

補足

  • Image 状に戻し終わった際、画素$A$の値は $A_1$~$A_9$ の総和 となります。

MCMK × MiniBatch

チャンネル と MiniBatch の col 展開の配置を 下図に示します。

05_1.PNG

順伝播

03_02_1.PNG

  • Bias 値を Out に BoradCast します。
  • 下記の行列演算で、Convolution処理となります。

06_1.PNG

  • 行列演算は BLAS の gemm関数がお勧めです。

逆伝播

03_04_0.PNG

  • 画素の傾きdIn , Weightの傾きdW , Biasの傾き dB を順に図解します。

dIn

  • $dIn = Weight^T × dOut$

06_2.PNG

  • Col展開(dIn) は Image状に戻し、前層に伝達します。

dW

  • $dW = In^T × dOut$

06_3.PNG

dB

  • dB は Channel 毎の dOut の総和です。

06_4.PNG

補足

  • cudnn の Convolution関数はアルゴリズムは選択可能になっており、その中の1つが この im2col 方式の様です。

ここまで読んで頂き、ありがとうございます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした