项目的克隆与依赖环境的安装
yolov5的代码是开源的,因此可以直接在github上克隆源码即可,github上的神人们,在yolov5发布不久,便更新出了好多个yolov5的分支,本篇全程以yolov5-v5作为演示。
项目克隆
通过访问github对源码进行克隆,注意选择分支,点击master选择v5分支进行克隆下载。
下载完成后用PyCharm打开项目
项目依赖环境的安装
在文件requirements.txt中便是我们需要的一些依赖包
在该文件下的一些依赖包的版本可能会根据环境版本的不同而不匹配,需要根据报错去自己调整(每个人的版本不一样报错也会不一样,根据报错去降低版本或升到最新版本即可)
在PyCharm终端输入下面命令便可将包全部下载,也可以在安装要求里选择性下载
pip install -r requirements.txt
准备预训练权重和自己的数据集
将标注好的数据集的包直接复制进项目即可(将VOCdevkit文件复制进去)
下载预训练权重
使用预训练权重可以加速模型的训练过程,提供更好的初始化和更好的特征表示,从而在目标检测任务中获得更好的性能。需要注意的是,预训练权重通常需要与目标检测任务的数据集进行微调,以使模型适应具体的任务和数据。这样可以进一步改善模型在目标检测任务上的性能。在yolov5中有预训练的文件,我们也可以根据项目需求下载不同的预训练文件,我使用的是yolov5s
训练模型
修改配置文件
1. models/yolov5s.yaml该文件要进行修改,nc要修改成自己类别的数量
2. data/voc.yamlv该文件下download可以注释掉,因为该文件的服务器在国外,可能会因为下载失败而报错。train与val要替换成VOCdevkit文件夹下的images文件夹下的train文件夹和val文件夹的路径;nc要改成对应的类别数量;names下的内容要修改成对应的类别名称。
修改参数(修改train.py文件)
训练自己的模型需要修改如下几个参数就可以训练了。首先将weights权重的路径填写下载的yolov5.pt的文件路径,然后将修好的models模型的yolov5s.yaml文件路径填写到相应的参数里面,最后将data数据的hat.yaml文件路径填写到相对于的参数里面。这几个参数就必须要修改的参数。
parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/VOC.yaml', help='data.yaml path')
可根据需求进行调整训练的轮数,我这里是400轮(放在自己电脑训练可能对电脑配置要求教高,否则训练速度会很慢,建议放在计算能力较强的服务器上进行训练)
parser.add_argument('--epochs', type=int, default=400)
如果有虚拟内存不够的情况时,在utils/datasets.py这个文件,将里面的第81行里面的参数改为0就可以了。
运行train.py便开始训练模型
启用wandb查看参数
在prchrem终端输入命令下载wandb,输入密钥即可,密钥需要到wandb官网注册获得。
pip install wandb
启用wandb查看参数(到wandb官网便可查看正在进行训练模型的参数)
验证测试
训练完成后为验证自己的模型是否可用可进行测试查看,测试程序是detect.py这个文件,但是也要修改几个默认配置。
需要修改主程序下的两行文件路径即可,weights下的default的路径修改成训练完自己生成的文件夹runs文件夹下的文件内即可,路径会是runs/train/exp/weights/last.pt
,source下的default路径修改成要验证的图片路径。
parser.add_argument('--weights', nargs='+', type=str, default='runs/train/train/exp4/weights/last.pt', help='model.pt path(s)')
parser.add_argument('--source', type=str, default='026.jpg', help='source') # file/folder, 0 for webcam
修改完成后运行即可,运行完成后会提示你识别完的图片所保存的位置
识别后的数据存储
可将识别后的信息进行存储数据库方便被其它项目调用,实现数据交互可参考:python与php数据交互(基于Yolov5的目标检测项目)
进行数据存储。到此基于yolov5目标识别检测项目完结。
下一篇概括:内网映射(由租用的服务器可供外网访问得到灵感,通过将电脑本地服务器进行端口转发或映射,从而实现内网与外网之间的通信,可实现对全国各地自研联网产品的低成本远程控制和数据传输。实现不租用服务器便可跨局域网通信)