atlas200ldka2 YOLOv8
时间: 2024-12-31 15:40:34 浏览: 10
### Atlas 200 DK A2 上使用 YOLOv8 教程
#### 环境准备
为了在Atlas 200 DK A2上成功运行YOLOv8,需先完成必要的软件和硬件设置。确保已按照指导完成了开发板Atlas 200I DK A2以及华为云ModelArts的安装配置工作[^1]。
#### 开发板联网配置
使Atlas 200 DK能够稳定上网对于下载依赖库至关重要。依据说明文档,通过USB线实现PC机与Atlas 200 DK之间的通信,并利用RJ45网线让其共享PC端网络资源,保证eth0接口下的网关参数匹配于连接该设备的计算机NIC适配器IP设定[^2]。
#### 安装必要工具包
进入Linux终端界面,在命令行输入如下指令来获取最新版本的操作系统更新并安装Python3 pip管理器:
```bash
sudo apt-get update && sudo apt-get upgrade -y
sudo apt install python3-pip -y
```
接着,创建虚拟环境以隔离项目所需的特定版本库文件夹结构:
```bash
pip3 install virtualenv
virtualenv venv_yolov8
source ./venv_yolov8/bin/activate
```
激活后的环境中继续执行以下操作加载所需模块:
```bash
pip install numpy opencv-python requests onnxruntime-gpu==1.7.0
git clone https://github.com/ultralytics/yolov8.git
cd yolov8
pip install -r requirements.txt
```
注意:由于Ascend系列处理器架构特殊性,可能还需要额外编译适用于NPU加速计算的相关驱动程序和支持函数库,请参照官方手册进行相应调整优化处理。
#### 转换模型至ONNX格式
考虑到YOLOv8原生支持PyTorch框架构建而成,而目标平台更倾向于采用轻量化推理引擎如ONNX Runtime来进行预测任务,因此建议事先准备好转换脚本将预训练权重迁移到兼容形式下保存起来供后续调用。
假设已经拥有`.pt`结尾的标准权值档案,则可借助Ultralytics团队提供的辅助方法快速达成目的:
```python
from ultralytics import YOLO
model = YOLO('path/to/best.pt')
success = model.export(format='onnx') # 导出为.onnx文件
print(f'Export successful: {success}')
```
#### 编写推理代码片段
最后一步就是编写一段简单的测试案例验证整个流程是否通畅无阻。下面给出了一段基于OpenCV读取图像配合ONNXRuntime做前向传播运算得出检测框位置信息的基础示范:
```python
import cv2
import numpy as np
import onnxruntime as ort
def preprocess(image_path, input_size=(640, 640)):
img_raw = cv2.imread(image_path)
height, width = img_raw.shape[:2]
ratio_h = input_size[1]/height
ratio_w = input_size[0]/width
resized_img = cv2.resize(img_raw, (input_size))
blob = cv2.dnn.blobFromImage(resized_img, scalefactor=1./255., size=input_size, swapRB=True)
return blob, ratio_w, ratio_h
if __name__ == '__main__':
sess_options = ort.SessionOptions()
session = ort.InferenceSession('./best.onnx', providers=['CUDAExecutionProvider'], sess_options=sess_options)
image_file = 'test.jpg'
inputs, rw, rh = preprocess(image_file)
outputs = session.run(None, {'images': inputs})[0][0]
boxes = []
confidences = []
for output in outputs:
box = output[:4].copy() / ([rw,rh]*2)
confidence = float(output[-2])
if confidence > 0.5:
boxes.append(box.astype(int).tolist())
confidences.append(confidence)
drawed_image = cv2.imread(image_file)
for i in range(len(boxes)):
pt1 = tuple([int(x) for x in boxes[i][:2]])
pt2 = tuple([int(x) for x in boxes[i][2:]])
label_text = f'{confidences[i]:.2f}'
text_origin = max(pt1[0], 0), min(max(pt1[1]-4, 0),drawed_image.shape[0])
cv2.rectangle(drawed_image, pt1, pt2, color=(0, 255, 0), thickness=2)
cv2.putText(drawed_image, label_text, org=text_origin,
fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=.5,color=(255, 0, 0))
cv2.imshow("detections", drawed_image)
cv2.waitKey(0)
```
阅读全文