前言
完成pt->rknn的转换需要用到下述三个软件,链接地址如下:
1.ultralytics_yolov8:https://github.com/airockchip/ultralytics_yolov8
2.rknn_model_zoo:https://github.com/airockchip/rknn_model_zoo
3.rknn-toolkit2:https://github.com/airockchip/rknn-toolkit2
我用的版本如下图所示
1.ultralytics_yolov8 直接下载就行
2. rknn_model_zoo v2.2.0
3. rknn-toolkit2 v2.2.0
PT转ONNX
第一步
-
将该仓库的项目下载到本地上,压缩包或者git命令都可以。
ultralytics_yolov8: https://gitcode.com/gh_mirrors/ul/ultralytics_yolov8/overview?utm_source=csdn_github_accelerator&isLogin=1
以下是我下载后的文件夹截图
-
改激活函数:把
ultralytics/nn/modules/conv.py
中的Conv类进行修改。
将default_act = nn.SiLU() # default activation
改为default_act = nn.ReLU() # default activation
-
当前的git仓库中是中没有
requirements.txt
,参考文献2中有提到这个文件,详情可以参考这篇文献。
这里给出requirements.txt
中的内容,直接复制到自己创建的requirements.txt
中就可以了。# Ultralytics requirements # Usage: pip install -r requirements.txt# Base ---------------------------------------- matplotlib>=3.2.2 numpy>=1.22.2 # pinned by Snyk to avoid a vulnerability opencv-python>=4.6.0 pillow>=7.1.2 pyyaml>=5.3.1 requests>=2.23.0 scipy>=1.4.1 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.64.0# Logging ------------------------------------- # tensorboard>=2.13.0 # dvclive>=2.12.0 # clearml # comet# Plotting ------------------------------------ pandas>=1.1.4 seaborn>=0.11.0# Export -------------------------------------- # coremltools>=7.0.b1 # CoreML export # onnx>=1.12.0 # ONNX export # onnxsim>=0.4.1 # ONNX simplifier # nvidia-pyindex # TensorRT export # nvidia-tensorrt # TensorRT export # scikit-learn==0.19.2 # CoreML quantization # tensorflow>=2.4.1 # TF exports (-cpu, -aarch64, -macos) # tflite-support # tensorflowjs>=3.9.0 # TF.js export # openvino-dev>=2023.0 # OpenVINO export# Extras -------------------------------------- psutil # system utilization py-cpuinfo # display CPU info # thop>=0.1.1 # FLOPs computation # ipython # interactive notebook # albumentations>=1.0.3 # training augmentations # pycocotools>=2.0.6 # COCO mAP # roboflow
第二步
-
使用conda创建一个虚拟环境。
# 使用conda创建虚拟环境 conda create -n yolov8 python=3.9 conda activate yolov8
-
然后切换到
ultralytics-main/ultralytics_yolov8
文件夹下cd [ultralytics-main/ultralytics_yolov8放置的文件夹路径]
-
执行下边的命令 (后两条的命令可能执行的时间会长一点,请耐心等待)
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
-
执行下边的命令
pip install -e .
注warn: e后边有个点,两者之间用空格隔开了。
第三步
-
把自己需要转换的权重文件放到如下图所示的位置
-
执行下述命令
yolo export model=yolov8s.pt format=rknn
注:
yolo export model=/your_path/best.pt format=rknn
-
执行上述命令可能会出现如下错误
简单理解:就是说onnx包没有找到,那我们就直接下载这个onnx包,然后再执行上述命令。pip install onnx
ONNX转RKNN
-
注: 需要确保当前环境支持RKNN转换,RKNN 目前支持 NVIDIA CUDA GPU,我的理解就是得有N卡。
-
创建一个虚拟环境
conda create -n rknn220 python=3.9
-
进入
rknn-toolkit2-2.1.0\rknn-toolkit2-2.1.0\rknn-toolkit2\packages
文件中
-
在当前路径下打开终端,或者使用cd命令切换到当前路径下,然后依次输入如下命令:
pip install -r requirements_cp39-2.2.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
requirements_cp39-2.2.0.txt文件名称就是这个package目录里的,选择自己虚拟环境里的python版本。
注:这里的cp39代表的是python3.9版本,选择合适自己的即可(我这里创建的虚拟环境是python3.9的)。pip install rknn_toolkit2-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
rknn_toolkit2-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl文件也是类似的。
-
进入
knn_model_zoo-2.1.0\examples\yolov8\python
文件夹,打开convert.py
修改模型的保存路径
-
然后将yolov8s.onnx移动到该目录中
-
最后执行
python convert.py yolov8s.onnx rk3588
-
可在目录下找到生成的
yolov8.rknn
文件
参考文献
- 1.RKNN3588——YOLOv8的PT模型转RKNN模型
- 2.【YOLOv8n部署至RK3588】模型训练→转换rknn→部署全流程
- 3.野火-YOLOv8