【PyACL系列 01】昇腾(Ascend)yolov7模型迁移指导

该博客主要介绍Yolov7模型推理的实现步骤。首先进行环境准备,提供Acllite、Yolov7源码及模型的下载链接,还提及Torch与ONNX的CPU版本。接着阐述推理跑通流程,包括将源码放于同一位置、Pt文件转onnx文件、模型转换、修改detect.py源码,最终实现模型跑通。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 环境准备

Acllite下载:
https://gitee.com/ascend/samples/tree/master/python/common
Yolov7源码:
https://github.com/WongKinYiu/yolov7
Yolov7模型:
https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt
Torch & ONNX CPU版本
torch                        1.12.1
torchaudio                   0.12.1
torchvision                  0.13.1
onnx                         1.12.0
onnxconverter-common         1.12.2
onnxmltools                  1.11.1
onnxruntime                  1.12.1

二、 推理跑通

1、 把Acllite & Yolov7源码放在服务器同一个位置

2、 Pt文件转onnx文件

在yolov7-main目录下执行:
python3 export.py --weights yolov7.pt --grid --simplify --topk-all 100 --img-size 640 640 --max-wh 640

3、 模型转换

atc \
  --model=./yolov7.onnx \
  --framework=5 \
  --output=./yolov7_bs1 \
  --input_format=NCHW \
  --input_shape="images:1,3,640,640"  \
  --soc_version=Ascend310P3 \
  --log=info

4、 源码修改

只需要修改detect.py文件

def detect(save_img=False):上增加

# Load model下增加

# Inference下增加
仅需增加以上黄色部分代码即可

5、 模型跑通

python3 detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --device cpu --source inference/images/horses.jpg
移植 YOLO 算法到 FPGA 平台以实现硬件加速是一个复杂但可行的任务,涉及多个步骤和技术考虑。以下是一些关键步骤和建议: 1. **模型选择与优化**:首先需要选择适合在 FPGA 上运行的 YOLO 模型。YOLO 有多种变体(如 YOLOv3, YOLOv4, YOLOv5 等),每种都有不同的计算需求和精度表现。通常,较新的版本提供了更好的性能,但也可能需要更多的计算资源。因此,可以选择一个平衡精度和效率的模型[^1]。 2. **量化与压缩**:为了适应 FPGA 的资源限制,通常会对神经网络进行量化处理,即将浮点数转换为定点数表示,从而减少内存占用并提高运算速度。此外,还可以应用模型剪枝和其他形式的模型压缩技术来进一步降低模型复杂度。 3. **硬件设计与开发**:接下来是将优化后的模型映射到 FPGA 架构上。这一步骤涉及到编写 HDL (Hardware Description Language) 代码或者使用高级综合工具 (HLS - High-Level Synthesis) 来生成硬件逻辑。对于卷积层等深度学习中的常见操作,可以利用特定的 IP 核心或库函数来简化实现过程。 4. **接口与控制逻辑设计**:除了核心的计算模块外,还需要设计适当的接口和控制逻辑,以便于数据传输、配置设置以及结果读取等功能。这些部分确保了 FPGA 能够有效地与其他系统组件交互。 5. **测试与验证**:最后,在实际部署之前,必须对整个系统进行全面的测试和验证,包括功能测试、时序分析以及功耗评估等,以保证其稳定性和可靠性。 通过上述步骤,可以在一定程度上成功地将 YOLO 算法移植到 FPGA 平台上,并利用其并行处理能力来提升目标检测的速度和效率。 ```python # 示例伪代码展示如何准备一个简单的图像预处理流程 import cv2 import numpy as np def preprocess_image(image_path, target_size=(608, 608)): # 加载图像 img = cv2.imread(image_path) # 调整大小至目标尺寸 resized_img = cv2.resize(img, target_size) # 归一化像素值到 [0, 1] 区间 normalized_img = resized_img / 255.0 # 添加批次维度 batched_img = np.expand_dims(normalized_img, axis=0).astype(np.float32) return batched_img ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值