本文基于CANN开源社区的ops-cv仓库进行技术解读

  • CANN组织链接:https://atomgit.com/cann
  • 仓库链接:https://atomgit.com/cann/ops-cv

前言

虽然现在大语言模型很火,但计算机视觉(CV)领域依然是AI的重要应用场景。图像分类、目标检测、人脸识别…这些都离不开CV算法。

CANN的ops-cv项目就是专门为计算机视觉场景优化的算子库。和通用的ops-nn不同,ops-cv针对图像处理的特点做了专门设计。

CV场景的特点

图像处理和NLP有很大不同:

特点 图像 文本
数据格式 2D/3D,多通道 1D序列
核心操作 卷积、池化 Attention
数据规模 通常较大(高分辨率) 长度有限
局部性 很强 较弱

这些特点决定了CV需要专门的优化策略。

ops-cv包含什么

1. 图像预处理

在送入模型前,图像通常需要预处理:

原始图像

解码

缩放

裁剪

归一化

格式转换

送入模型

ops-cv提供了这些预处理操作的NPU实现:

  • Decode:图像解码(JPEG、PNG等)
  • Resize:缩放
  • Crop:裁剪
  • Normalize:归一化
  • ColorConvert:色彩空间转换

2. 图像增强

训练时常用的数据增强操作:

  • Flip:翻转
  • Rotate:旋转
  • RandomCrop:随机裁剪
  • ColorJitter:色彩抖动

3. 检测相关

目标检测需要的特殊操作:

  • NMS:非极大值抑制
  • RoIAlign:区域对齐
  • AnchorGenerator:锚框生成

4. 分割相关

图像分割需要的操作:

  • Upsample:上采样
  • GridSample:网格采样

和OpenCV的对比

OpenCV是CV领域最流行的库,但它主要跑在CPU上。ops-cv和它的关系:

OpenCV\nCPU实现

相似的功能

ops-cv\nNPU实现

对于同一个图像处理任务:

  • 在CPU上用OpenCV
  • 在NPU上用ops-cv

API风格可能有差异,但功能类似。

使用场景

场景一:端到端推理

把预处理也放在NPU上,避免CPU-NPU数据传输:

传统方式:
[图片] -CPU-> [预处理] -传输-> [NPU推理]

优化方式:
[图片] -传输-> [NPU预处理] -> [NPU推理]

减少了一次数据传输,对于高吞吐场景很有意义。

场景二:模型训练

训练时数据增强也可以在NPU上做:

# 伪代码
for batch in dataloader:
    # GPU/NPU上做数据增强
    augmented = ops_cv.random_augment(batch)
    # 接着训练
    loss = model(augmented)

场景三:视频分析

视频是连续的图像,预处理工作量更大,GPU/NPU加速更有价值。

简单使用示例

import ops_cv

# 读取图片(获得bytes)
with open("image.jpg", "rb") as f:
    img_bytes = f.read()

# 解码
img = ops_cv.decode(img_bytes)

# 缩放到224x224
img = ops_cv.resize(img, (224, 224))

# 归一化
mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225]
img = ops_cv.normalize(img, mean, std)

# 送入模型
output = model(img)

注意事项

1. 数据格式

确保输入数据格式正确,NPU对数据布局可能有要求。

2. 精度

图像处理对精度通常不太敏感,可以用较低精度加速。

3. 批处理

尽量批量处理图像,单张处理效率低。

和其他库的配合

原始图片

ops-cv预处理

ops-nn/transformer模型

输出结果

ops-cv通常用在模型前面,和ops-nn等一起构成完整的推理pipeline。

总结

ops-cv是CANN的图像算子库,主要提供:

  • 图像预处理操作
  • 数据增强操作
  • 检测/分割专用操作

对于在NPU上做计算机视觉应用的开发者,这是必备的工具。

相关链接

  • ops-cv仓库:https://atomgit.com/cann/ops-cv
  • ops-nn仓库:https://atomgit.com/cann/ops-nn
  • OpenCV官网:https://opencv.org

这篇是我调研NPU图像处理方案时的笔记,如有错误欢迎指正。

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐