【树莓派学习笔记3】训练并生成yolo神经网络模型,并在树莓派中调用模型寻找图片中的目标图像

1.所需要的设备及文件:

硬件设备:树莓派,摄像头,电脑等基本开发工具

所需文件的下载链接如下:

1.

123云盘下载链接

主要的文件内容如下图:

本来这里应该去github下载yolo这个开源项目的,但是我这里做了一点修改,可以直接下载我给的链接就可以了。包括我后面所给的操作过程,也是根据我链接里面的文件来操作的。

 yolo算法链接:

github源代码

2.首先需要安装对应的环境

这里安装的Python环境主要是用于训练神经的,因为我们首先要在电脑里把神经网络训练好,之后再上传到树莓派上进行使用。下面我简单介绍一下,具体的步骤最好参照我给的参考文献。

2.1安装anaconda的Python环境

对于Python环境,我在这里推荐的版本是3.9版本,这也是我经历了多次失败后的版本。首先,点击下面的安装包安装即可,安装还后,得到的Python版本就是3.9的,这里也最好记住你自己的安装位置。如果你自己以前安装过anaonda,这里再安装一个也没问题(安装路径要和以前不一样)。当然如果你对Python环境操作比较熟悉,你想自己开一个3.9的虚拟环境也可以。

2.2安装cuda以及对应的python软件包

安装完anaconda后,我们还需要安装CUDA,通过CUDA我们就可以调用电脑里面GPU的算力。但是这里就是很麻烦的点了,因为不同的电脑,不同的GPU所对应的CUDA版本也不一样。我这里只保留了我自己的电脑(Win11,RTX3050)安装时使用的各种安装包版本。

推荐文章:

CUDA安装

下面的步骤是我自己的步骤(非常不建议按照我下面的步骤来,这里只是我自己的安装过程,而且很有可能会遗漏步骤,最好按照我推荐的文章里面来)

首先安装vision studio2019年的版本,在安装时需要勾选C++桌面开发

之后我们双击安装CUDA

完成CUDA的安装后,接着还要安装GPU版本的Python软件包(这个地方我也不是很确定,因为确实是很久之前安装的了)。首先这里是我参考的算法链接,如果你看github很熟练,也可以直接看github里面的操作来

原文中对python环境有如下需求:

numpy==1.23.0
onnx==1.12.0
onnx_simplifier==0.3.10
onnxruntime==1.11.1
onnxsim==0.4.0
opencv_python==4.2.0.34
pycocotools==2.0.4
PyYAML==6.0
torch==1.11.0+cu113
torchsummary==1.5.1
torchvision==0.12.0+cu113
tqdm==4.59.0

这里也建议是一条一条的下载。其中最需要注意的就是torch和torchvision是需要安装CUDA版本的,除此之外,还要安装一个labelimg用于拉框。

这里建议参考这几篇文章:

python环境安装1

python环境安装2

接下来,完成如上的Python环境安装后,理论上就可以开始进行神经网络的训练了。这一部分确实写得不太周全,因为我也是很久之前安装的CUDA了。之后虽然一直在用,不过具体的安装步骤确实记不清了。安装环境确实也是Python开发者向来很头疼的事,也是必须过的坎。反正装错了大不了就全部卸载删干净后重新来就是了,多搞几次就熟练了。

3.开始训练神经网络

我给的文件里面主要就是如下的一些文件(但我给的可能会包含我自己的一些训练结果,读者可以对照这个,把多的文件给删去。对于文件夹里面,chelkpoint和weight文件夹里面都是空的)

首先,新建一个img_all文件夹,然后将所有要分类的图片放到img_all里面,图片名字全是数据序号,然后.jpg

然后就开始了经典的拉框环节,打开labelimg(这里注意,如果你打开labelimg出现问题,可能是你的PyQt5软件包有问题)

打开img_all文件夹

这里选择左边选到yolo,然后创建框格,然后拉框,这里有几个你要识别的对象你就拉几个,输入标签后点OK

然后Ctrl+S,会出现一个txt文件,再点击保存即可,然后循环操作,直到你拉完所有的框

这里注意,你在拉框的时候,最后是一次性拉完,如果中途有别的事,也不能关闭这个软件,也不要改存放图片的文件夹,所以也不能增删图片之类的。否则可能就会出bug。拉完过后,后有一个classes来存放类别的名称。而且在拉框的时候,最好也不要出错,尤其是不要输入其余的名称,否则他会自动给你添加一种新的类别。这种情况,要么就全部重新拉框,要么就在拉玩过后去修改classes。

图像处理完毕过后,继续准备

首先,将这个文件夹直接放到C盘,这里是为了避免修改路径目录,因为我在程序里把路径写死了。如果你C盘很挤,也可以在训练完成后将整个文件夹全部删去。当然如果你不想这样,也可以修改我程序里面的路径信息,不过别漏了,否则后面训练会出错

接下来运行下面这个代码(这里要用vscode打开整个文件夹后再运行)

这时就会生成如下的一些多的文件,这个代码可以把你的文件划分为训练数据和测试数据,而且会把数据的路径添加到对应的txt文件中。

最后要修改一下下面这个文件,尤其是NC,注意看类别数量是不是对的。以及文件的路径是不是对的。还有下面的学习率,集体学习时的图片个数,以及训练次数,你可以按需修改。

完成后就可以开始训练了,先执行order里面的前两条命令

cd C:\data-1

打开Anaconda Prompt后先导航到如下的位置

输入第二条命令开始训练

python train.py --yaml configs/coco.yaml

正常情况下,模型就开始训练了,大概就是下面的这个样子

然后训练好的模型会存放在下面这个文件夹,红色方框里面分别是训练的准确率和训练次数

接下来你就可以根据这个训练好的模型来进行测试了

接下来我们运行第三条指令,这里寻要注意,你的模型以及你的测试图像需要更换成你自己对应名字,跟我这里不是完全一样的

python test.py --yaml configs/coco.yaml --weight checkpoint/weight_AP05_1.000000_10-epoch.pth --img val/1.jpg --onnx

之后会输出结果,中间可能会有一些警告。

然后还会生成一张新的图片以及一个onnx文件,注意,照片是你的测试结果,他会捕捉目标并写上标签和概率,而这个onnx文件是我们在树莓派上运行神经网络的关键

此时,如果训练的测试结果你很满意,那你可以将这个onnx文件单独复制出来。剩下的文件就可以不要了,全部删去都是可以的。

4.在python程序中使用onnx文件

首先,你先复制我这里所给的4个文件到某一个文件夹

然后,打开models文件夹,将里面的模型替换成我们之前训练好的模型

其中,两个onnx文件就是我们训练好的文件,而两个names文件和前面的classes.txt里面的内容是一致的,但名字要改成上图的那个。

改好之后,我们就可以在这个文件夹目录下调用神经网络模型了。这里我们随便照一张测试图片,并使用我所给的这个函数,这个函数可以返回目标的名称以及位置。

# 导入必要的函数库
import cv2
import numpy as np
from Vision_Net import FastestDet

loo_global=np.zeros((640,480,3),dtype=np.uint8)
deep = FastestDet(drawOutput=True)

# 调用神经网络获取照片数字 
def get_photo_number(frame):
    out = deep.detect(frame)
    num_position=[]
    num=[]
    for i in range(len(out)):
        num_position.append(out[i][0])
        num.append(str(out[i][1]))
    //如果你不想打印结果图片,可以把这里去掉
    cv2.imwrite('test_result.jpg',frame)
    return  num_position,num

test_photo=cv2.imread('test.jpg')
print(get_photo_number(test_photo))

测试图片与输出图片

输出结果

OK,大功告成。现在在电脑上已经可以使用的。把这整个文件夹放到树莓派上的使用办法是一样的,而且树莓派也不需要配什么环境,有opencv就可以了,我就不赘述了。

这里其实主要的难点还是环境的配置,如果环境配好后使用yolo还是相当方便的。我的这篇文章,基本除了环境配置,后面的具体使用过程还是写的相当详细了,可以直接上手了的。大家也不要看我测试的图片很简单,事实上yolo神经网络的潜力还远远不止于此,这也只是我之前做题的图片,这里顺便用用罢了。而对于这种简单图片,yolo在10轮训练后就达到了100%的准确率,由此也可见他的厉害之处。

不过这篇文章里面很多步骤我确实也没有重新再去做一遍,毕竟完全从头搞真的还是挺麻烦的。所以,可能会出现一些遗漏的地方。不足的地方大家可以多多指正,如果对大家有所帮助的话,还是请大家点个赞吧,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值