1. 下载源码,用于训练:
git clone https://github.com/ultralytics/ultralytics.git
1.1
创建数据集文件夹,文件格式如下:
datasets
|VOCdevkit
| |images
| | |train
| | |val
| | |test
| |
| |labels
| |train
| |val
| |test
1.2
/ultralytics/ultralytics/cfg/datasets/
目录下新建一个AUV.yaml
path: /ultralytics/datasets/VOCdevkit/
train:
- images/train
val:
- images/val
test:
- images/test
# Classes
names:
0: eif4
1: 4_AUV
2: circle_AUV
3: 6_AUV
4: 8_AUV
5: birds
2. 训练:
2.1
修改/home/baiwei/ultralytics/ultralytics/cfg/models/v8/
目录下yolov8.yaml
中的nc
为自己的标签种类数
主目录ultralytics
下执行:
yolo detect train data=./ultralytics/cfg/datasets/AUV.yaml model=./yolov8s.pt epochs=100 imgsz=640 batch=16 device=0
/*
data 新建的yaml文件,里面为数据集路径和标签
model 预训练模型路径
epochs 训练轮数
imgsz 输入网络图片大小,此处为640*640
batch 批处理大小
device gpu号
*/
或者更改/ultralytics/ultralytics/cfg/
目录下的defaut.yaml
这个yaml中的参数更多,有许多参数可以调
2.2
然后执行:
yolo cfg=./ultralytics/cfg/default.yaml
程序先自动下载yolov8n.pt
用于检查数据集是否合规,然后自动下载yolov8s.pt
作为预训练模型,在yolov8s.pt
的基础上继续训练我们的数据
等待运行完毕后在/home/baiwei/ultralytics/runs/detect/train/weights/
文件夹下生成best.pt
为最佳模型
3. 下载瑞芯微修改后的源码,用于导出onnx:
git clone https://github.com/airockchip/ultralytics_yolov8.git
3.1
将训练时的v8源码的/ultralytics/ultralytics/cfg/datasets/AUV.yaml
复制到/ultralytics_yolov8/ultralytics/cfg/datasets
中
3.2
将训练好的best.pt
放到ultralytics_yolov8
主目录下
修改/ultralytics_yolov8/ultralytics/cfg/
目录下defaut.yaml
中的model
和data
model: /home/baiwei/ultralytics_yolov8/best.pt
data: /home/baiwei/ultralytics_yolov8/ultralytics/cfg/datasets/AUV.yaml
/*
model 训练好的best.pt路径
data yaml文件,其中是数据集路径和标签
*/
3.3
同样修改ultralytics_yolov8/ultralytics/cfg/models/v8/yolov8.yaml
中的nc
为标签种类数
然后主目录下执行:
export PYTHONPATH=./
python ./ultralytics/engine/exporter.py
执行完毕后会在主目录下生成best.onnx模型
4. 按照《03_RKNN Toolkit2 环境搭建》搭建环境
所需要的安装包:https://pan.baidu.com/s/1_2oXkVxtgLK_vpUYJT__uQ?pwd=6666
提取码: 6666
由于Ubuntu20太大无法上传,建议大家自行查找教程在VM中安装ubuntu20系统
4.1 VMwar17下载
我参考的博客,在此引用该博文:
https://blog.csdn.net/qq_74731410/article/details/135824895
4.2 使用Vmware虚拟机软件运行ubuntu20环境:
安装好Vmware后点击左上角 文件->扫描虚拟机载入ubuntu20,开机密码:topeet
4.3 安装Miniconda
将Miniconda3-latest-Linux-x86_64.sh
安装包拷贝到虚拟机ubuntu上
使用./Miniconda3-latest-Linux-x86_64.sh
命令进行安装,根据提示,输入回车和yes, 等待安装完成
右键打开新的终端,发现用户名前出现(base),就代表安装成功了
终端中输入conda create -n rknn python=3.8
创建新的环境,接着输入y继续
使用conda activate rknn
激活相应的rknn环境
pip install numpy==1.16.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
5. 在虚拟机安装rknn-toolkit2
我是直接下载的1.5.2版本的,下载地址
https://github.com/rockchip-linux/rknn-toolkit2/tree/v1.5.2
给出最新版本克隆地址
git clone https://github.com/rockchip-linux/rknn-toolkit2.git
5.1
在conda环境中执行以下安装命令
unzip rknn-toolkit2-1.5.2.zip
pip install -r ./doc/requirements_cp38-1.5.2.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install ./packages/rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl
5.2
验证是否安装成功
在终端输入以下内容不报错代表成功
python
from rknn.api import RKNN
5.3
在虚拟机的rknn环境下rknn_model_zoo/examples/yolov8/python/
目录下修改convert.py
DATASET_PATH = '../../../datasets/COCO/coco_subset_20.txt'
DEFAULT_RKNN_PATH = './best.rknn'
/*
DEFAULT_RKNN_PATH:生成的rknn模型路径
*/
5.4
执行以下代码将onnx转换为rknn模型:
python convert.py best.onnx rk3588 i8 best.rknn
6. 验证onnx模型
在虚拟机rknn_moodel_zoo/examples/yolov8/python/
中执行以下代码测试onnx是否正确
修改yolov8.py中的CLASSES
和coco_id_list
修改/rknn_model_zoo/examples/yolov8/model/coco_80_labels_list.txt
为自己的标签种类
修改同目录下的dataset.txt为自己数据集中的一张照片
python yolov8.py --model_path best.onnx --img_show
7. 验证rknn模型
在3588上修改/rknn_model_zoo/examples/yolov8/model/coco_80_labels_list.txt
为自己的标签种类
修改同目录下的dataset.txt为自己数据集中的一张照片
在/userdata/OCR/rknn_model_zoo/
目录下执行以下代码
./build-linux.sh -t rk3588 -a aarch64 -d yolov8
会在install/rk3588_linux_aarch64/rknn_yolov8_demo/
下生成验证rknn模型程序:rknn_yolov8_demo
执行该程序验证rknn模型
./rknn_yolov8_demo <model_path> <image_path>
8. 后续量化
发现pt转onnx的时候,对模型的精度影响不是很大,但是在rknn_model_zoo的转换代码中,也就是onnx转rknn的时候,进行了模型量化,将FP32量化为了INT8,导致精度下降。
后续我会记录一下不进行量化的转化过程