darknet里面的im2col用的是caffe的im2col代码。多通道矩阵数据(如彩色图像)经过im2col操作后得到一个矩阵,同时将多个卷积核
也转成一个矩阵的形式。这样一来就能够把卷积操作转换成矩阵乘法。本文主要讨论im2col的实现。
看一下im2col的参数:
voidim2col_cpu(float*data_im,intchannels,intheight,intwidth,intksize,intstride,intpad,float*data_col)
具体意义如下:
data_im:输入数据
channels:输入数据通道数
height:输入数据的高
width:输入数据的宽
ksize:卷积核的大小
stride:卷积核移动的步长,下文都以stride=1来处理
pad:padding时所需要填充的长度,padding的长度为ksize/2
data_col:输出
为了更好的理解im2col,先看看卷积的实现过程。假设im2col的输入参数如下:
channels:3;height:4;width:4;ksize:3;stride:1;pad:1
先利用im2c