玉田网站制作孟村建设局网站
- 作者: 五速梦信息网
- 时间: 2026年04月20日 06:55
当前位置: 首页 > news >正文
玉田网站制作,孟村建设局网站,东莞百度网站快速排名,企业服务app下载前言 目标识别如今以及迭代了这么多年#xff0c;普遍受大家认可和欢迎的目标识别框架就是YOLO了。按照官方描述#xff0c;YOLOv8 是一个 SOTA 模型#xff0c;它建立在以前 YOLO 版本的成功基础上#xff0c;并引入了新的功能和改进#xff0c;以进一步提升性能和灵活性… 前言 目标识别如今以及迭代了这么多年普遍受大家认可和欢迎的目标识别框架就是YOLO了。按照官方描述YOLOv8 是一个 SOTA 模型它建立在以前 YOLO 版本的成功基础上并引入了新的功能和改进以进一步提升性能和灵活性。从基本的YOLOv1版本到如今v8版本完成了多次蜕变现在已经相当成熟并且十分的亲民。我见过很多初学目标识别的同学基本上只花一周时间就可以参照案例实现一个目标检测的项目这全靠YOLO强大的解耦性和部署简易性。初学者甚至只需要修改部分超参数接口调整数据集就可以实现目标检测了。但是我想表达的并不是YOLO的原理有多么难理解原理有多难推理。一般工作中要求我们能够运行并且能够完成目标检测出来就可以了更重要的是数据集的标注。我们不需要完成几乎难以单人完成的造目标检测算法轮子的过程我们需要理解YOLO算法中每个超参数的作用以及影响。就算我们能够训练出一定准确度的目标检测模型我们还需要根据实际情况对生成结果进行一定的改写例如对于图片来说一共出现了几种目标;对于一个视频来说定位到具体时间出现了识别的目标。这都是需要我们反复学习再练习的本领。 完成目标检测后我们应该输出定位出来的信息YOLO是提供输出设定的超参数的我们需要根据输出的信息对目标进行裁剪得到我们想要的目标之后再做上层处理。如果是车牌目标识别的项目我们裁剪出来的车牌就可以进行OCR技术识别出车牌字符了如果是安全帽识别项目那么我们可以统计一张图片或者一帧中出现检测目标的个数做出判断一切都需要根据实际业务需求为主。本篇文章主要是OCR模型对车牌进行字符识别结合YOLO算法直接定位目标进行裁剪裁剪后生成OCR训练数据集即可。开源项目地址如果有帮助希望不吝点亮star~ 基于Yolov7-LPRNet的动态车牌目标识别算法模型https://github.com/Fanstuck/Yolov7-LPRNet 其中数据集的质量是尤为重要的决定了模型的上限因此想要搭建一个效果较好的目标识别算法模型就需要处理流程较为完善的开源数据集。本篇文章采用的是CCPD数据集上篇文章已经详细描述了整个项目的初步搭建过程包括数据集准备和数据预处理大体系统框架和数据标签聚合。现在开始正式YOLOv7搭建。 一、YOLOv7 YOLO算法作为one-stage目标检测算法最典型的代表其基于深度神经网络进行对象的识别和定位运行速度很快可以用于实时系统。从近几年来看模型结构重参化和动态标签分配已经成为了目标检测领域中的主要优化方向。针对于结构重参化YOLOv7的作者是通过分析梯度的传播路径来为网络中的不同层进行结构重参化优化作者还提出了扩展和复合缩放的方式通过这种方式可以更高效利用参数量和计算量。这样不仅可以减少大量参数还可以提高推理速度以及检测精度。 我们这里不作展开Yolov7详解开源项目里面自带大家可直接克隆就好省去了一些冗余功能。但是github上面的版本删去了训练模块提供了已经训练完成的模型和推理模型这样克隆方便展示直接效果训练的权重并不是最优的本身并没有迭代多次想要精度更高的模型我将会在后续硬件支持下再训练或者大家也可以去下载别人已经训练好的模型。大家如有需要可以通过网盘下载 链接https://pan.baidu.com/s/1rjkwqC0p5kp43WP8EnMwqw 提取码40yu 我会在本篇文章详细介绍模型权重的具体训练过程。 二、训练步骤 1.安装环境 利用Yolo训练模型十分简单并没有涉及到很复杂的步骤如果是新手的话注意下载的torch版本是否符合本身NVDIA GPU的版本需要根据NVIDIA支持最高的cuda版本去下载兼容的Torch版本查看cuda版本可以通过终端输入nvidia-smi 确定requirements.txt没问题之后直接通过pip下载环境即可 pip install -r requirements.txt 2.修改Yolo配置文件 首先增加cfg/training/yolov7-e6e-ccpd.yaml文件此配置文件可以参数动态调整网络规模这里也不展开细讲以后会有Yolov7源码详解系列敬请期待我们需要根据我们用到的官方yolo模型选择对于的yaml文件配置我这里用的的yolov7-e6e模型训练所以直接拿yolov7-e6e.yaml改写
parameters
nc: 1 # number of classes
depth_multiple: 1.0 # model depth multiple
width_multiple: 1.0 # layer channel multiple
其中nc是检测个数depth_multiple是模型深度width_multiple表示卷积通道的缩放因子就是将配置里面的backbone和head部分有关Conv通道的设置全部乘以该系数。通过这两个参数就可以实现不同复杂度的模型设计。然后是添加数据索引文件data/license.yaml
train: ./split_dataset/images/train
val: ./split_dataset/images/val
test: ./split_dataset/images/test # number of classes
nc : 1#class names
names : [license]
3.训练模型
前面trainvaltest都对应着目录存放的训练数据集。之后修改train.py中的参数或者是直接在终端输入对应的参数自动目录我一般是习惯直接在defalut下面修改parser的各类参数功能为
#weight:指定预训练权重路径如果这里设置为空的话就是自己从头开始进行训练官方有提供预训练权重
#cfg:指定模型配置文件路径的源码里面提供了几个配置文件配置文件里面指定了一些参数信息和backbone的结构信息。
#data:数据集对应的参数文件里面主要存放数据集的类别和路径信息。
#hyp:指定超参数文件的路径超参数里面包含了大量的参数信息。
#epochs:训练的轮数默认为300轮显示效果是0-299
#batch-size:每批次的输入数据量default-1将时自动调节batchsize大小
#img-size:训练集和测试集图片的像素大小输入默认640*640可以进行适当的调整这样才能达到好的效果。
#rect:是否采用矩阵推理的方式去训练模型。
#resume:断点续训即是否在之前训练的一个模型基础上继续训练default 值默认是 false;
#nosave:是否只保存最后一轮的pt文件我们默认是保存best.pt和last.pt两个的;
#notest:只在最后一轮测试正常情况下每个epoch都会计算mAP但如果开启了这个参数那么就只在最后一轮上进行测试不建议开启。
#noautoanchor:是否禁用自动锚框默认是开启的自动锚点的好处是可以简化训练过程。
#evolve:遗传超参数进化yolov7使用遗传超参数进化提供的默认参数是通过在COCO数据集上使用超参数进化得来的。由于超参数进化会耗费大量的资源和时间所以建议不要动这个参数。
#bucket:谷歌云盘通过这个参数可以下载谷歌云盘上的一些东西但是现在没必要使用了。
#cache:是否提前缓存图片到内存以加快训练速度默认False开启这个参数就会对图片进行缓存从而更好的训练模型。
#image-weights:是否启用加权图像策略默认是不开启的主要是为了解决样本不平衡问题开启后会对上一轮训练效果不好的图片在下一轮中增加一些权重
#device:设备选择这个参数就是指定硬件设备的系统会自己判断。
#multi-scale:是否启用多尺度训练默认是不开启的多尺度训练是指设置几种不同的图片输入尺度训练时每隔一定iterations随机选取一种尺度训练这样训练出来的模型鲁棒性更强。
#single-cls:设定训练数据集是单类别还是多类别默认为 false多类别。
#optimizer:选择使用 Adam 优化器
#sync-bn:是否开启跨卡同步BN开启参数后即可使用 SyncBatchNorm多 GPU 进行分布式训练。
#local_rank:DDP参数请勿修改
#workers:最大worker数量。
#project:指定训练好的模型的保存路径默认在runs/train。
#entity:wandb 库对应的东西。
#name:设定保存的模型文件夹名默认在exp
#exist-ok:每次预测模型的结果是否保存在原来的文件夹如果指定了这个参数的话那么本次预测的结果还是保存在上一次保存的文件夹里如果不指定就是每次预测结果保存一个新的文件夹下。
#quad:官方给出的开启这个功能后的实际效果#好处是在比默认 640 大的数据集上训练效果更好#副作用是在 640 大小的数据集上训练效果可能会差一些
#linear-lr:用于调整学习率含义是通过余弦函数来降低学习率。使用梯度下降算法来优化目标函数的时候当越来越接近Loss值的全局最小值时学习率应该变得更小来使得模型尽可能接近这一点而余弦退火可以通过余弦函数来降低学习率。
#label-smoothing:是否对标签进行平滑处理默认是不启用的
#upload_dataset:wandb 库对应的东西。是否上传dataset到wandb tabel(将数据集作为交互式 dsviz表 在浏览器中查看、查询、筛选和分析数据集) 默认False
#bbox_interval:wandb 库对应的东西可以忽略。设置界框图像记录间隔 Set bounding-box image logging interval for WB 默认-1
#save-period:用于设置多少个epoch保存一下checkpointint 型默认为 -1。
#artifact_alias:表示还未实现的内容忽略即可if name main:parser argparse.ArgumentParser()parser.add_argument(–weights, typestr, defaultyolo7.pt, helpinitial weights path)parser.add_argument(–cfg, typestr, default, helpmodel.yaml path)parser.add_argument(–data, typestr, defaultdata/coco.yaml, helpdata.yaml path)parser.add_argument(–hyp, typestr, defaultdata/hyp.scratch.p5.yaml, helphyperparameters path)parser.add_argument(–epochs, typeint, default300)parser.add_argument(–batch-size, typeint, default16, helptotal batch size for all GPUs)parser.add_argument(–img-size, nargs, typeint, default[640, 640], help[train, test] image sizes)parser.add_argument(–rect, actionstore_true, helprectangular training)parser.add_argument(–resume, nargs?, constTrue, defaultFalse, helpresume most recent training)parser.add_argument(–nosave, actionstore_true, helponly save final checkpoint)parser.add_argument(–notest, actionstore_true, helponly test final epoch)parser.add_argument(–noautoanchor, actionstore_true, helpdisable autoanchor check)parser.add_argument(–evolve, actionstore_true, helpevolve hyperparameters)parser.add_argument(–bucket, typestr, default, helpgsutil bucket)parser.add_argument(–cache-images, actionstore_true, helpcache images for faster training)parser.add_argument(–image-weights, actionstore_true, helpuse weighted image selection for training)parser.add_argument(–device, default, helpcuda device, i.e. 0 or 0,1,2,3 or cpu)parser.add_argument(–multi-scale, actionstore_true, helpvary img-size /- 50%%)parser.add_argument(–single-cls, actionstore_true, helptrain multi-class data as single-class)parser.add_argument(–adam, actionstore_true, helpuse torch.optim.Adam() optimizer)parser.add_argument(–sync-bn, actionstore_true, helpuse SyncBatchNorm, only available in DDP mode)parser.add_argument(–local_rank, typeint, default-1, helpDDP parameter, do not modify)parser.add_argument(–workers, typeint, default8, helpmaximum number of dataloader workers)parser.add_argument(–project, defaultruns/train, helpsave to project/name)parser.add_argument(–entity, defaultNone, helpWB entity)parser.add_argument(–name, defaultexp, helpsave to project/name)parser.add_argument(–exist-ok, actionstore_true, helpexisting project/name ok, do not increment)parser.add_argument(–quad, actionstore_true, helpquad dataloader)parser.add_argument(–linear-lr, actionstore_true, helplinear LR)parser.add_argument(–label-smoothing, typefloat, default0.0, helpLabel smoothing epsilon)parser.add_argument(–upload_dataset, actionstore_true, helpUpload dataset as WB artifact table)parser.add_argument(–bbox_interval, typeint, default-1, helpSet bounding-box image logging interval for WB)parser.add_argument(–save_period, typeint, default-1, helpLog model after every save_period epoch)parser.add_argument(–artifact_alias, typestr, defaultlatest, helpversion of dataset artifact to be used)parser.add_argument(–freeze, nargs, typeint, default[0], helpFreeze layers: backbone of yolov750, first30 1 2)parser.add_argument(–v5-metric, actionstore_true, helpassume maximum recall as 1.0 in AP calculation)对应参数修改一般来说修改这些就足够了
parser.add_argument(–weights, typestr, defaultweights/yolo7-e6e.pt, helpinitial weights path)
parser.add_argument(–cfg, typestr, defaultcfg/yolov7-e6e-ccpd, helpmodel.yaml path)
parser.add_argument(–data, typestr, defaultdata/license.yaml, helpdata.yaml path)
当然也可能出现内存溢出等问题需要修改
arser.add_argument(–batch-size, typeint, default16, helptotal batch size for all GPUs)
parser.add_argument(–workers, typeint, default8, helpmaximum number of dataloader workers) 这两个参数具体参数根据自己硬件条件修改。
然后直接终端输入:
python train.py 训练即可。生成的模型会自动保存到run/目录里面。之后在run/train/exp/weights目录下会产生两个权重文件一个是最后一轮的权重文件一个是最好的权重文件一会我们就要利用这个最好的权重文件来做推理测试。除此以外还会产生一些验证文件的图片等一些文件。 4.推理 然后修改detect.py
f name main:–weights:权重的路径地址
–source:测试数据可以是图片/视频路径也可以是0(电脑自带摄像头),也可以是rtsp等视频流
–output:网络预测之后的图片/视频的保存路径
–img-size:网络输入图片大小
–conf-thres:置信度阈值
–iou-thres:做nms的iou阈值
–device:是用GPU还是CPU做推理
–view-img:是否展示预测之后的图片/视频默认False
–save-txt:是否将预测的框坐标以txt文件形式保存默认False
–classes:设置只保留某一部分类别形如0或者0 2 3
–agnostic-nms:进行nms是否也去除不同类别之间的框默认False
–augment:推理的时候进行多尺度翻转等操作(TTA)推理
–update:如果为True则对所有模型进行strip_optimizer操作去除pt文件中的优化器等信息默认为False
–project推理的结果保存在runs/detect目录下
–name结果保存的文件夹名称
parser argparse.ArgumentParser()parser.add_argument(–weights, nargs, typestr, defaultyolov5s.pt, helpmodel.pt path(s))parser.add_argument(–source, typestr, defaultdata/images, helpsource) # file/folder, 0 for webcamparser.add_argument(–img-size, typeint, default640, helpinference size (pixels))parser.add_argument(–conf-thres, typefloat, default0.25, helpobject confidence threshold)parser.add_argument(–iou-thres, typefloat, default0.45, helpIOU threshold for NMS)parser.add_argument(–device, default, helpcuda device, i.e. 0 or 0,1,2,3 or cpu)parser.add_argument(–view-img, actionstore_true, helpdisplay results)parser.add_argument(–save-txt, actionstore_true, helpsave results to *.txt)parser.add_argument(–save-conf, actionstore_true, helpsave confidences in –save-txt labels)parser.add_argument(–nosave, actionstore_true, helpdo not save images/videos)parser.add_argument(–classes, nargs, typeint, helpfilter by class: –class 0, or –class 0 2 3)parser.add_argument(–agnostic-nms, actionstore_true, helpclass-agnostic NMS)parser.add_argument(–augment, actionstore_true, helpaugmented inference)parser.add_argument(–update, actionstore_true, helpupdate all models)parser.add_argument(–project, defaultruns/detect, helpsave results to project/name)parser.add_argument(–name, defaultexp, helpsave results to project/name)parser.add_argument(–exist-ok, actionstore_true, helpexisting project/name ok, do not increment)opt parser.parse_args() 这里需要将刚刚训练好的最好的权重传入到推理函数中去。然后就可以对图像视频进行推理了。
主要需要修改的参数是
parser.add_argument(–weights, nargs, typestr, defaultruns/train/exp/weights/best.pt, helpmodel.pt path(s))parser.add_argument(–source, typestr, default测试数据集目录或者图片, helpsource) 推理测试结束以后在run下面会生成一个detect目录推理结果会保存在exp目录下。 备注
有问题的私信博主或者直接评论就可以了博主会长期维护此开源项目目前此项目运行需要多部操作比较繁琐我将不断更新版本优化下一版本将加入UI以及一键部署环境和添加sh指令一键运行项目代码。下篇文章将详细解读LPRNet模型如何进行OCR识别 再次希望对大家有帮助不吝点亮star~
基于Yolov7-LPRNet的动态车牌目标识别算法模型https://github.com/Fanstuck/Yolov7-LPRNet
- 上一篇: 玉山建设局网站做那个网站销售产品比较好
- 下一篇: 玉田网站制作免费的黄台直播
相关文章
-
玉山建设局网站做那个网站销售产品比较好
玉山建设局网站做那个网站销售产品比较好
- 技术栈
- 2026年04月20日
-
玉林住房和城乡建设局网站官网深圳网站运营
玉林住房和城乡建设局网站官网深圳网站运营
- 技术栈
- 2026年04月20日
-
玉林英文网站建设高德地图vr全景怎么打开
玉林英文网站建设高德地图vr全景怎么打开
- 技术栈
- 2026年04月20日
-
玉田网站制作免费的黄台直播
玉田网站制作免费的黄台直播
- 技术栈
- 2026年04月20日
-
玉溪市建设局网站wordpress登陆界面背景
玉溪市建设局网站wordpress登陆界面背景
- 技术栈
- 2026年04月20日
-
预定型网站有哪些小米果怎么做视频网站
预定型网站有哪些小米果怎么做视频网站
- 技术栈
- 2026年04月20日
