文件最后提交记录最后更新时间
个人-AscendC实现Col2Im算子贡献 Co-authored-by: qiu-zhuang<qiuzhuang_2023@qq.com> # message auto-generated for no-merge-commit merge: !402 merge op_col2_im into master 个人-AscendC实现Col2Im算子贡献 Created-by: qiu-zhuang Commit-by: qiu-zhuang Merged-by: cann-robot Description: ## 描述 使用AscendC对TBE实现的Im2Col算子进行重构,实现了AscendC实现的Im2Col算子对Atlas 200/500 A2推理产品和Atlas 800I/T A2硬件的适配。 ## 关联的Issue Issue链接:https://gitcode.com/cann/ops-math/issues/258 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/c4305c27-36a3-4557-bb3a-5263acdf6a65/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/d1efb9ba-7c68-4216-9f80-8232b50061ff/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/359701ca-b491-4c99-8c11-5ef9d1a5015f/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/f4fa3397-10c2-414f-987a-15b168a47272/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/2155e7a1-a2e4-46ca-848f-239b332a0023/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4024 个月前
refactor: 迁移 experimental 算子 tiling 模块至新公共头文件及命名空间 Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !2974 merge master into master refactor: 迁移 experimental 算子 tiling 模块至新公共头文件及命名空间 Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 将 experimental 目录下 22 个算子的 tiling 代码从旧公共头文件及命名空间迁移至新公共头文件及命名空间,统一 tiling 公共接口规范。 ### 改动原因 experimental 算子的 tiling 代码依赖了旧的公共头文件(tiling_base_util.hmath_tiling_templates_registry.htiling_base_class.h)及 Ops::Base 命名空间,需要迁移至新的公共头文件(tiling_util.htiling_templates_registry.htiling_base.h)及 Ops::Math::OpTiling 命名空间,以统一 tiling 公共接口规范。 ### 改动方法 1. 替换 #include 指令: - "op_host/tiling_base_util.h""op_host/tiling_util.h"(20 个文件) - "op_host/math_tiling_templates_registry.h""op_host/tiling_templates_registry.h"(2 个文件) - "op_host/tiling_base_class.h""op_host/tiling_base.h"(1 个文件) 2. 命名空间及 API 迁移: - Ops::Base::EnsureNotScalar()Ops::Math::OpTiling::EnsureNotScalar() - Ops::Base::IsRegbaseSocVersion()Ops::Math::OpTiling::IsRegbaseSocVersion() - using namespace Ops::Baseusing namespace Ops::Math::OpTiling(2 个文件) ### 涉及算子(22 个文件) - **conversion 算子**:col2_im、im2_col - **math 算子**:add_v2、atan、ceil_v2、cross、dot_v2、floor_div、floor_mod、ger_v2、greater_equal(arch35)、isin_part_v1、minimum、ones_like、real、select_v3、sinh、softsign(arch35)、square_v2、trilu(arch35)、trunc_v2 ## 关联的Issue - #1679 - https://gitcode.com/cann/ops-math/issues/1679 ## 测试 通过编译验证及算子冒烟测试。 ## 文档更新 无文档更新。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:重构 - 迁移 tiling 公共头文件及命名空间 See merge request: cann/ops-math!29746 天前
个人-AscendC实现Col2Im算子贡献 Co-authored-by: qiu-zhuang<qiuzhuang_2023@qq.com> # message auto-generated for no-merge-commit merge: !402 merge op_col2_im into master 个人-AscendC实现Col2Im算子贡献 Created-by: qiu-zhuang Commit-by: qiu-zhuang Merged-by: cann-robot Description: ## 描述 使用AscendC对TBE实现的Im2Col算子进行重构,实现了AscendC实现的Im2Col算子对Atlas 200/500 A2推理产品和Atlas 800I/T A2硬件的适配。 ## 关联的Issue Issue链接:https://gitcode.com/cann/ops-math/issues/258 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/c4305c27-36a3-4557-bb3a-5263acdf6a65/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/d1efb9ba-7c68-4216-9f80-8232b50061ff/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/359701ca-b491-4c99-8c11-5ef9d1a5015f/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/f4fa3397-10c2-414f-987a-15b168a47272/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/2155e7a1-a2e4-46ca-848f-239b332a0023/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4024 个月前
Arch编码更新 Co-authored-by: liulinxiang<liulinxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !992 merge master1 into master Arch编码更新 Created-by: liulinxiang Commit-by: liulinxiang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!9924 个月前
个人-AscendC实现Col2Im算子贡献 Co-authored-by: qiu-zhuang<qiuzhuang_2023@qq.com> # message auto-generated for no-merge-commit merge: !402 merge op_col2_im into master 个人-AscendC实现Col2Im算子贡献 Created-by: qiu-zhuang Commit-by: qiu-zhuang Merged-by: cann-robot Description: ## 描述 使用AscendC对TBE实现的Im2Col算子进行重构,实现了AscendC实现的Im2Col算子对Atlas 200/500 A2推理产品和Atlas 800I/T A2硬件的适配。 ## 关联的Issue Issue链接:https://gitcode.com/cann/ops-math/issues/258 ## 测试 ![image.png](https://raw.gitcode.com/user-images/assets/7649531/c4305c27-36a3-4557-bb3a-5263acdf6a65/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/d1efb9ba-7c68-4216-9f80-8232b50061ff/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/359701ca-b491-4c99-8c11-5ef9d1a5015f/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/f4fa3397-10c2-414f-987a-15b168a47272/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7649531/2155e7a1-a2e4-46ca-848f-239b332a0023/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4024 个月前
doc tools 工具扫描问题修改 Co-authored-by: gitee-yanglulu<yanglulul@h-partners.com> # message auto-generated for no-merge-commit merge: !1938 merge master into master doc tools 工具扫描问题修改 Created-by: gitee-yanglulu Commit-by: gitee-yanglulu Merged-by: cann-robot Description: doc tools 工具扫描问题修改 See merge request: cann/ops-math!19382 个月前
README.md

Col2Im

贡献说明

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

支持的产品型号

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

算子描述

  • 算子功能:列到图像,滑动窗口列向量重组为原始图像。从形状为(N, C ×∏\times \prod(kernel_szie), L)或(C ×∏\times \prod(kernel_szie), L)的列矩阵中重构出形状为(N, C, H, W)或 (C, H, W) 的图像张量,其中L是滑动窗口块的总数。

  • 计算公式: 输入:列矩阵 colcol 形状为 (N,C×kH×kW,L)(N, C \times kH \times kW, L)(C×kH×kW,L)(C \times kH \times kW, L) 输出:图像 outputoutput 形状为 (N,C,H,W)(N, C, H, W)(C,H,W)(C, H, W) 其中:L=out_H×out_W=H+2×padding_val−dilation×(kernel_h−1)−1stride_val+1×W+2×padding_val−dilation×(kernel_w−1)−1stride_val+1L = out\_H \times out\_W = \frac{H + 2 \times padding\_val - dilation \times (kernel\_h - 1) - 1}{stride\_val} + 1 \times \frac{W + 2 \times padding\_val - dilation \times (kernel\_w - 1) - 1}{stride\_val} + 1

  • 原型信息

参数名 输入/输出/属性 描述 数据类型 数据格式
col 输入张量 必选输入张量,形状为(N, C*kH*kW, L)或(C*kH*kW, L) FLOAT、FLOAT16 ND
kernel_h 属性 卷积核的高度,可选属性,默认值为2 INT -
kernel_w 属性 卷积核的宽度,可选属性,默认值为2 INT -
output_h 属性 输出图像的高度,可选属性,默认值为4 INT -
output_w 属性 输出图像的宽度,可选属性,默认值为4 INT -
stride_val 属性 步长,可选属性,默认值为1 INT -
padding_val 属性 填充大小,可选属性,默认值为0 INT -
dilation_val 属性 膨胀系数,可选属性,默认值为1 INT -
x 输出张量 必选输出张量,形状为(N, C, H, W)或(C, H, W) FLOAT、FLOAT16 ND

约束与限制

1. 输入约束

  • 输入张量col的形状:必须为2维或3维
    • 3维格式:[N, CkHkW, L](批处理模式)
    • 2维格式:[CkHkW, L](单样本模式)
    • 其中 N ≥ 1,C ≥ 1,kH ≥ 1,kW ≥ 1,L ≥ 1

2. 参数约束

  • kernel_h:卷积核高度,必须为正整数,默认值为2,满足 1 ≤ kernel_h
  • kernel_w:卷积核宽度,必须为正整数,默认值为2,满足 1 ≤ kernel_w
  • output_h:输出图像高度,必须为正整数,默认值为4
  • output_w:输出图像宽度,必须为正整数,默认值为4
  • stride_val:步长,必须为正整数,默认值为1,stride_val ≥ 1
  • padding_val:填充大小,必须为非负整数,默认值为0,padding_val ≥ 0
  • dilation_val:膨胀系数,必须为正整数,默认值为1,dilation_val ≥ 1

3. 计算约束

  • 输出尺寸计算: 输出图像尺寸为 (output_h, output_w),由属性直接指定

  • 输入维度一致性约束输入第二维度=C×kernel_h×kernel_w输入第二维度 = C \times kernel\_h \times kernel\_w,且必须能被整除

    输入第三维度L=out_H×out_W输入第三维度 L = out\_H \times out\_W

    其中 out_Hout\_Hout_Wout\_W 由以下公式计算:

    out_H=⌊output_h+2×padding_val−dilation_val×(kernel_h−1)−1stride_val+1⌋out\_H = \lfloor \frac{output\_h + 2 \times padding\_val - dilation\_val \times (kernel\_h - 1) - 1}{stride\_val} + 1 \rfloor

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

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

4. 内存约束

  • 输出张量内存大小output_size=N×C×output_h×output_w×element_sizeoutput\_size = N \times C \times output\_h \times output\_w \times element\_size 必须在设备内存限制范围内

5. 数据类型约束

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

6. 格式约束

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

7. 特殊情况

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

8. 与Im2Col的关系约束

  • 可逆性:当使用相同的kernel_h、kernel_w、stride_val、padding_val、dilation_val参数,并且output_h、output_w等于原始输入图像尺寸时,Col2Im应该是Im2Col的逆操作

9. 错误条件

  • 如果输入第二维度不能被kernel_h × kernel_w整除,算子应返回错误
  • 如果kernel_h或kernel_w大于填充后的输出尺寸,算子应返回错误
  • 如果计算出的out_H或out_W ≤ 0,算子应返回错误
  • 如果输入第三维度L ≠ out_H × out_W,算子应返回错误
  • 如果输入张量维度不符合要求(非2维或3维),算子应返回错误

算子使用

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

编译部署

  • 进入到仓库目录

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

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

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

算子调用

  • 执行调用

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

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_col2_im 通过[aclnnCol2Im]接口方式调用Col2Im算子。