CNN中的img2col
img2col的本质:把图像局部块拉平成列,拼成矩阵,把卷积变成矩阵乘法。
假设输入是 5x5x3的RGB图像,滤波器是 2个3x3x3的卷积核,拆解如下:
(1) 原始卷积的计算(低效版)
每次从图像上抠一个 3x3x3的块(比如左上角的27个像素),和第一个滤波器的27个权重逐点相乘再求和,得到输出特征图的第一个通道的一个点。
重复上述过程:滑动窗口 + 计算,非常慢。需要写多重循环(遍历位置、通道、滤波器),效率低。
(2) img2col的优化(高效版)
目标:把“滑动抠图”变成“批量乘矩阵”。
步骤:
把所有可能的3x3x3块抠出来(共9个块,因为5x5图像滑动后得到3x3个位置),每个块拉平成1列27个数字。
最终得到一个 大表格(矩阵):27行(每个块的像素) x 9列(共9个块)。
这就是“长列”的真相:27行代表一个块的展开,9列代表所有块。
img2col + 矩阵乘法:对矩阵乘法优化到极致,一次并行算完所有数。
输出 = 滤波器矩阵 × img2col矩阵

浙公网安备 33010602011771号