darknet中im2col代码分析

来源:互联网 发布:新锐网络大学 编辑:程序博客网 时间:2024/05/20 18:20

darknet里面的im2col用的是caffeim2col代码。多通道矩阵数据(如彩色图像)经过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来处理

padpadding时所需要填充的长度,padding的长度为ksize/2

data_col:输出

为了更好的理解im2col,先看看卷积的实现过程。假设im2col的输入参数如下:

channels3height4width4ksize3stride1pad1

先利用im2col转换成矩阵,具体可参考一下博文:

http://blog.csdn.net/mrhiuser/article/details/52672824

只不过在darknet中输出的是27*16的一个矩阵,而不是27*4。原因是darknet中的im2col相当于对原来的输入图像进行了padding

作,使原来的4*4图像变为6*6的。然后才从原来的4*4中的第一行第一列的元素开始执行操作。而上面的博文介绍的是直接从第二行

第二列开始的,也就是只对不超出核矩阵范围的元素进行操作。

darknet中要生成一个27*16的矩阵,是按照行来生成的。也就是先生成第一行的16个点,然后以此类推,生成所有行的16个点。以

下是对源码的分析:

void im2col_cpu(float* data_im,     int channels,  int height,  int width,     int ksize,  int stride, int pad, float* data_col) {    int c,h,w;    //计算卷积后的图像宽和高,在darknet中似乎认为卷积后的输出图像跟输入图像尺寸是一样的    int height_col = (height + 2*pad - ksize) / stride + 1;    int width_col = (width + 2*pad - ksize) / stride + 1;    int channels_col = channels * ksize * ksize;//im2col后的矩阵行数如3*3*3=27    for (c = 0; c < channels_col; ++c) {//按照行逐点生成        int w_offset = c % ksize;        int h_offset = (c / ksize) % ksize;        int c_im = c / ksize / ksize;//计算目前处理第几个通道的图像        //遍历整个4*4的图像点生成16个第c点的数据        for (h = 0; h < height_col; ++h) {            for (w = 0; w < width_col; ++w) {             //计算出3*3中要生成某个点的数据在padding后图像的位置,比如在当c=5时,也就是要生成3*3中的第二行第三列的点(1*2),在下面的im2col_get_pixel中im_row和im_col都会减去pad=1            //所以im_row和im_col分别为2和3,当im_row和im_col中只要有超出图像边界的时候im2col_get_pixel返回的像素值为0。也就是相当于先对输入图像进行了padding操作。                int im_row = h_offset + h * stride;                int im_col = w_offset + w * stride;                int col_index = (c * height_col + h) * width_col + w;                data_col[col_index] = im2col_get_pixel(data_im, height, width, channels,                        im_row, im_col, c_im, pad);            }        }    }}


阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不遮不挡胜插图 1717摄政真精品视频6j 24种插法和动作视频 1717精品国色 802资源网 1717射正真精品视频动漫 羞羞影院免费影片 强犴视频网站 女生被舔照片视频 床上运动奶视屏 00后小萝莉 喷液视频完整 2019看黄不付费 十部挑战人伦底线的电影 标准七十二种插法不遮不演 床上99种捅法 36种插法不遮不挡视频 儿子曰亲妈 妈装唾视频 爷爷插妈视频 老婆非让我睡她妈视频 真实儿曰亲妈视频观看 单身儿子单身妈 儿子再用点力妈要飞了中文 在上海陪读初三的儿子 加油儿子妈要流了txt 啊儿子深点妈要来了txt 儿子上来妈教你的故事 儿子在快一点妈要飞了视频 单身妈喜欢找儿子 中国家庭毋HH伦s线播放普通话 中国家庭真实毋HH伦s线播放 儿子你快点搞你爸要回来吗 儿子快点你爸回来了嗯 儿子你搞快点你爸要回来啦文字 快点你爸马上就回来了视频 儿子你搞快点你爸要回来啦电影 儿子快拿出来你爸快回来了视频 儿子你要高就快点你爸回来了电影 儿子你要就快点你爸要回来了小说 儿子 快点妈要来了漫画 你快点啊你爸快回来了视频 儿子快点你爸快回来了在哪能看