模型文件的验证
K510端的Yolov5部署(1)
在完成了上篇文章中的操作后,操作终端的结尾会出现运行的存放地址,根据这些地址打开生成的文件夹,查看自己的数据集训练是否成功,之后就可以对先去准备的验证集进行操作。
若训练后的模型仍不满意,可以打开train.py文件,
parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
将.pt文件修改为训练生成的best.pt文件,再次在py37_yolov5环境中运行train.py文件,这时就会根据之前训练的结果继续接着训练。
训练满意后要进行对模型的验证,需要打开val.py文件,这个文件和train.py的文件相同,只需要修改其中
parser.add_argument('--data', type=str, default=ROOT / 'data/data.yaml', help='dataset.yaml path')
parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'runs/train/exp9/weights/best.pt', help='model.pt path(s)')
这两行代码的文件地址即可,data需要指向先前准备的验证数据集的地址,所以要修改data.yaml中数据集的地址(在上一文章的操作中修改过所以这里可以再次检查一下),weights指向训练生成的.pt文件的地址(训练结束的时候会生成best.pt和last.pt这两个文件,一般使用best.pt文件),最后我们还需要修改/yolov5-6.0/models/yolo.py文件,
def __init__(self, cfg='my_model.yaml', ch=3, nc=None, anchors=None): # model, input channels, number of classes
这行代码大概在85行,检查.yaml文件是否与yolov5-6.0\models目录下上一文章新创建yaml文件名称相同。
完成这些操作后,打开修改完成之后按照之前的操作激活py37_yolov5环境,已经激活的就可以直接输入python val.py
,要是没有最后一步可能也不会有影响(韦东山说的,但是他修改了!)
代码运行结束后也会输出一个结果(文件夹)
完成这些之后,我们可以在data目录下新建一个文件夹存放待检测的图像和视频文件。
修改detect.py文件中的
parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s.pt', help='model path(s)')
parser.add_argument('--source', type=str, default=ROOT / 'data/images', help='file/dir/URL/glob, 0 for webcam')
提供对应的.pt文件和待检测的文件夹的地址,在终端中输入python detect.py
即可运行。
代码运行结束后也会输出一个结果(文件夹)。
模型文件的转换
这里的内容是将yolo训练的.pt文件导出为.onnx文件。
在进行操作之前我们需要将yolov5-6.0文件复制粘贴一份副件,并将副件名修改为yolov5-6.0-export,将我们要转换的best.pt文件复制粘贴到yolov5-6.0-export中,在终端中输入python export.py --weights best.py --include onnx -- dynamic
运行成功之后就会在yolov5-6.0-export目录中发现best.onnx文件。
所有的操作都是在py37_yolov5环境中,且是在yolov5-6.0-export的目录下进行,上端的验证操作则是在yolov5-6.0的目录下进行。
我们在是要.onnx文件之前还需要对该模型进行简化,韦东山的教程中将输入图像的尺寸固定为320*320。照做就是了。
在终端中输入
·python -m onnxsim best.onnx best-sim.onnx --overwrite-input-shape 1,3,320,320
最后将生成的best-sim.onnx在netron中打开查看是否输入图像的尺寸是否固定。
完成了这些操作之后我们就只需要将onnx模型转换为可以在K510上推理运行的.kmodel文件就可以实现在k510端运行yolov5模型了。
但是最后这一步超级麻烦,对版本的要求十分苛刻,要是运气好的话就可以直接转换成功,自身的运气比较差摸索了好多天才实现,说来说去还是第一次使用没有经验。