Im2Col

贡献说明

贡献者 贡献方 贡献算子 贡献时间 贡献内容
Qiu Zhuang 哈尔滨工业大学-苏统华团队 Im2Col 2025/12/12 新增Im2Col算子

支持的产品型号

  • Atlas A2训练系列产品
  • Atlas 200I/500 A2推理产品

算子描述

  • 算子功能:图像到列,滑动局部窗口数据转为列向量,拼接为大张量。从批处理输入张量中提取滑动窗口。考虑一个形状为(N, C, H, W)或 (C, H, W) 的批处理input张量,其中N是批处理维度, C是通道维度, 而 H, W 表示图像大小,此操作将input的空间维度内的每个滑动kernel_size大小的块展平为(N, C ×∏\times \prod(kernel_szie), L)的3-D 或 (C ×∏\times \prod(kernel_szie), L)的2-D 的 output张量的列(即最后一维),而L是这些块的总数。

  • 计算公式: L=∏d⌊spatialsize[d]+2×padding[d]−dilation[d]×(kernelsize[d]−1)−1stride[d]+1L = \prod_{d} \lfloor \frac{spatial_size[d] + 2 \times padding[d] - dilation[d] \times (kernel_size[d] -1) -1}{stride[d]} + 1 \rfloor, 其中spatial_size由上述input张量的H,W构成。 dilation[d]dilation[d] 是膨胀系数(默认为1)

  • 原型信息

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入张量 必选输入张量,shape为3维或4维 FLOAT、FLOAT16 ND
kernel_h 属性 卷积核的高度,可选属性,默认值为2 INT -
kernel_w 属性 卷积核的宽度,可选属性,默认值为2 INT -
stride_val 属性 步长,可选属性,默认值为1 INT -
padding_val 属性 填充大小,可选属性,默认值为0 INT -
z 输出张量 必选输出张量,shape根据输入参数推导得出 FLOAT、FLOAT16 ND

约束与限制

1. 输入约束

  • 输入张量x的形状:必须为3维或4维
    • 4维格式:[N, C, H, W](批处理模式)
    • 3维格式:[C, H, W](单样本模式)
    • 其中 N ≥ 1,C ≥ 1,H ≥ 1,W ≥ 1

2. 参数约束

  • kernel_h:卷积核高度,必须为正整数,满足 1 ≤ kernel_h ≤ H + 2 × padding_val
  • kernel_w:卷积核宽度,必须为正整数,满足 1 ≤ kernel_w ≤ W + 2 × padding_val
  • stride_val:步长,必须为正整数,stride_val ≥ 1
  • padding_val:填充大小,必须为非负整数,padding_val ≥ 0
  • dilation:膨胀系数,必须为正整数,dilation ≥ 1(当前实现下只支持为1的情况)

3. 计算约束

  • 输出尺寸必须为正数out_H=⌊H+2×padding_val−dilation×(kernel_h−1)−1stride_val+1⌋≥1out\_H = \lfloor \frac{H + 2 \times padding\_val - dilation \times (kernel\_h - 1) - 1}{stride\_val} + 1 \rfloor ≥ 1

    out_W=⌊W+2×padding_val−dilation×(kernel_w−1)−1stride_val+1⌋≥1out\_W = \lfloor \frac{W + 2 \times padding\_val - dilation \times (kernel\_w - 1) - 1}{stride\_val} + 1 \rfloor ≥ 1

  • 有效卷积核约束kernel_h≤H+2×padding_valkernel\_h ≤ H + 2 \times padding\_val kernel_w≤W+2×padding_valkernel\_w ≤ W + 2 \times padding\_val

4. 内存约束

  • 输出张量内存大小output_size=N×C×out_H×out_W×element_sizeoutput\_size = N \times C \times out\_H \times out\_W \times element\_size 必须在设备内存限制范围内

5. 数据类型约束

  • 输入张量x和输出张量z的数据类型必须一致
  • 支持的数据类型组合:
    • 输入:FLOAT,输出:FLOAT
    • 输入:FLOAT16,输出:FLOAT16

6. 格式约束

  • 输入和输出张量必须为ND(NCHW)格式
  • 不支持其他数据格式(如NHWC、NC1HWC0等)

7. 特殊情况

  • 当padding_val > 0时:会在输入张量的H和W维度两侧进行对称填充
  • 当dilation > 1时:卷积核元素之间存在间隔,实际感受野增大
  • 当stride_val > 1时:输出特征图尺寸会相应减小

8. 错误条件

  • 如果计算出的输出尺寸out_H或out_W ≤ 0,算子应返回错误
  • 如果kernel_h或kernel_w大于填充后的输入尺寸,算子应返回错误
  • 如果输入张量维度不符合要求(非3维或4维),算子应返回错误

算子使用

使用该算子前,请参考社区版CANN开发套件包安装文档完成开发运行环境的部署。

编译部署

  • 进入到仓库目录

    cd ${git_clone_path}/ops-math
    
  • 执行编译

    bash build.sh --experimental --ops=im2_col --soc=ascend910b --pkg
    
  • 部署算子包

    ./build_out/cann-ops-math-custom_linux-aarch64.run
    

算子调用

  • 执行调用

    bash build.sh --run_example im2_col eager cust --vendor_name=custom
    

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_im2_col 通过[aclnnIm2Col]接口方式调用Im2Col算子。