
简介一份基于YOLOv5的深度学习车牌识别系统本科毕业设计论文文档适合计算机视觉、深度学习方向的毕业生及研究人员作为论文撰写与系统设计参考。文档从研究背景和意义出发分析了传统人工识别方式的不足与深度学习带来的效率提升详细介绍了YOLOv5实时目标检测模型的原理、优势及在车牌识别中的应用流程完整覆盖图像采集、预处理、模型训练、车牌定位、字符分割与字符识别等关键环节并结合Python语言与OpenCV、Pandas等库讨论系统实现方式与未来应用前景。资源为单个docx文件大小1.14MB内含中英文摘要、目录、绪论、关键词等完整论文结构涵盖研究背景、技术方案与实现等内容可直接用于毕业设计框架搭建、开题报告撰写或技术思路梳理。目前已有1006人学习下载有利于快速掌握基于深度学习的车牌识别全流程适合正在筹备车牌识别、目标检测类毕业设计的同学参考。1. 基于yolov5的深度学习车牌识别系统论文怎么立项代码怎么落地你手里这份“基于yolov5的深度学习车牌识别系统论文.docx”对做毕设或接项目交付的人来说不是一篇文档而是一整套待实现的系统。它要做的事很明确用深度学习模型在监控画面或手机照片里把车牌框出来再按省份汉字、字母、数字的顺序把车牌号读出来。YOLOv5负责定位和识别深度学习在背景复杂的图像里提取车牌特征最终输出可以直接对接收费系统或门禁系统的文本结果。这套系统能解决什么最先落地的是停车场入口的无人值守车辆停在道闸前相机抓拍系统输出“粤B12345”后端再处理计费其次是园区巡逻和路侧停车管理在移动画面里抓拍识别。适合两类人一类是计算机视觉方向的应届生需要把毕设做成能展示、能现场跑的实物另一类是做安防和智能交通的工程师想用现成的相机和服务器快速加一路识别服务。YOLOv5在这个任务里不是唯一解但它拥有庞大的开源社区、完整的训练工具链和成熟的数据标注生态是把“基于yolov5的深度学习车牌识别系统”从论文标题变成可复现成果的最短路径。下面从系统拆解讲起。2. 车牌识别系统的整体拆解从目标检测到字符识别YOLOv5一人分饰两角车牌识别系统不是“丢一张图进神经网络直接吐车牌号”的单模型端到端流程它至少拆成两个阶段第一阶段在完整图像里定位车牌输出一个矩形边界框第二阶段把边界框里的车牌区域裁剪出来识别出字符序列。YOLOv5在这两个阶段都能承担主力也因此成为毕设项目里被用得最多的模型。这一章先讲清楚系统原理和选型理由后续的训练、调参和后处理才能落到具体命令上。2.1 车牌检测为什么选YOLOv5而不选传统方案车牌检测是个标准的目标检测任务。传统方案先对图像做灰度化、边缘检测、颜色分割再用形态学闭运算把候选区域连成块最后用车牌长宽比筛选并做OCR。这套流程在固定角度、固定光线的单车道场景下能用但相机只要从俯视改成仰视或者遇到逆光、夜间车灯照射边缘检测会连出一大片灯影颜色分割也会把白色车身误判成蓝色车牌区域。传统方案靠的是人工设计的特征而光照变化和运动模糊没有固定数学规则所以换一个场景就得重新调一遍参数。深度学习模型直接学习车牌区域在像素层面的分布规律。训练好的模型对逆光、暗光、轻微模糊都有免疫力因为训练数据里见过不止一种“难搞”的画面。YOLOv5在众多深度学习检测模型中胜出靠的是三件事。第一是网络结构适合中小目标。YOLOv5的Backbone是CSPDarknet它把特征图分层做跨阶段拼接减少重复梯度计算Neck采用PANet结构把高层语义信息和浅层边缘信息反复融合Head输出三个不同尺度的预测层分别对应小中大目标。车牌在监控画面里通常占比不到十分之一属于中小目标640×640输入下最小的检测层能保留足够的分辨率去定位。这也是Faster R-CNN能做到、但不容易部署的地方YOLOv5的工程化明显更亲民。第二是训练和工程化成本低。YOLOv5源码是纯PyTorch写的一个train.py可以完成从数据读取、增强、训练到验证的全流程训练完可以用torch.hub加载或者导出成ONNX在C环境跑。相比Faster R-CNN的复杂锚点分配YOLOv5默认锚点可以直接沿用也支持自动计算新手不需要深入理解锚点机制就能把模型跑起来。第三是类别数少带来的高准确率。车牌检测只有一个类别模型不需要区分不同车辆专注做前景和背景二分类即可。用CCPD和少量自建数据混合训练后mAP0.5可以到98%以上而yolov5s参数量约7.2M6GB显存的游戏卡就能训练。另一个容易忽略的选型理由是和论文目标匹配如果毕设要做消融实验YOLOv5可以方便地换Backbone、换Neck、改锚点甚至把Backbone换成MobileNet做轻量化对比。SSD可改动空间少EfficientDet部署依赖复杂都不如YOLOv5弹性大。提示YOLOv5超参数的坑在第一阶段不明显因为只有一类目标但第二阶段字符识别时类别不平衡会严重影响结果。提前把数据增强策略想好能避免后面反复重训。2.2 字符识别的两条路线YOLOv5检测字符 vs 端到端CRNN检测到车牌框之后字符识别有两种主流做法。路线一再训练一个YOLOv5模型做字符检测。把车牌小图输入模型输出每个字符的边界框和类别类别包括31个省份汉字、24个英文字母去掉I和O、10个数字共65类。拿到所有字符框后按x坐标从左到右排序拼接字符串。这个路线的最大优点是和第一阶段技术栈统一训练、部署、论文里画的系统流程图都是同一款模型不需要额外介绍RNN、CTC等概念。缺点是每个车牌要标注多个框标注成本高而且如果车牌倾斜严重单靠排序可能错位。路线二第一阶段YOLOv5检测车牌第二阶段用CRNN识别整个车牌小图。CRNN是“CNNRNNCTC”组合CNN提取图像序列特征RNN学习字符之间的上下文CTC做时序对齐最后输出不定长车牌号。这个路线在通用OCR里很成熟对倾斜、遮挡的容忍度更高而且不需要字符级标注只要给出整串车牌号即可。但它是典型的“黑匣子”内部特征对论文读者不友好部署时还要引入另一个模型框架工程链路被拉长。我一般建议毕设优先走两个YOLOv5模型的路线。原因有三个一是整个系统只有一个技术栈调参、换数据、跑实验都复用同一套步骤二是字符检测结果可以可视化成框答辩时一眼看出每个字符被定位在哪比CRNN的软性输出更有说服力三是如果导师要求对比实验路线二可以作为对照组出现把“为什么不用CRNN”写成论文里的分析段落反而变成加分点。字符检测模型的数据组织方式和车牌检测一样只是类别数从1变成65训练输入可以缩小到320×320因为字符比车牌更小过大的分辨率会让前景区域占比太小反而增加计算量。后处理阶段要处理信噪比车牌倾斜会导致字符框高低不平排序不能只按x还要结合y方向做“行校正”这些细节放在第4章。另一个容易忽略的问题是字符框是有顺序的而YOLOv5检测本身是无序输出后处理的排序逻辑写不对训练再准输出的车牌号也是乱的。各省简称里“京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼”必须全部覆盖少一个都会在对应省份车牌上识别失败。3. 用YOLOv5训练车牌检测模型数据集、超参数与训练命令这里开始进入实操。目标只有一个用你自己的图片跑通一个能框出车牌的一阶段模型。先准备数据再写配置最后执行训练命令并监控日志。3.1 车牌数据集从哪里来公开数据转换与自标注格式车牌检测模型的数据来源有三个公开数据集、自己拍、合成。公开数据集最常见的有CCPD、CRPD它们包含大量真实停车场和路面场景但标注方式不一。CCPD的标签直接写在文件名里比如“025-95_113-154383_386473-386473_177454_154383_363402-0_0_22_27_27_33_16-37-15.jpg”需要解析CRPD提供XML标注。直接拿这些数据集投喂YOLOv5会遭遇格式问题YOLOv5要求每张图配一个同名txt文件每行是“类别id 中心x 中心y 宽 高”坐标都归一化到0~1。写一个VOC XML转YOLO格式的小脚本是第一步。下面这段代码假设你的数据集是VOC风格类别名只有plate。import xml.etree.ElementTree as ET import os def voc_to_yolo(xml_path, out_dir, img_w, img_h): tree ET.parse(xml_path) root tree.getroot() lines [] for obj in root.iter(object): name obj.find(name).text if name ! plate: continue box obj.find(bndbox) x1 float(box.find(xmin).text) y1 float(box.find(ymin).text) x2 float(box.find(xmax).text) y2 float(box.find(ymax).text) cx ((x1 x2) / 2) / img_w cy ((y1 y2) / 2) / img_h w (x2 - x1) / img_w h (y2 - y1) / img_h lines.append(f0 {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) with open(os.path.join(out_dir, os.path.basename(xml_path).replace(.xml, .txt)), w) as f: f.write(\n.join(lines))逻辑说明这个脚本遍历XML里所有object过滤出类别为plate的框把绝对坐标换算成归一化坐标。换算公式是中心x除以图像宽度、框宽除以图像宽度中心y除以图像高度、框高除以图像高度。注意img_w和img_h必须与图片实际尺寸一致否则边界框对不上。如果你从文件名解析坐标则不需要img_w但要先确认标注坐标系是否已经是归一化。自己的图片建议用labelImg或X-AnyLabeling标注。标注时只画水平矩形框不需要旋转框因为YOLOv5输入是正矩形标注框就按车牌的axis-aligned外接矩形拉。不要为了贴合倾斜车牌强行旋转宁可框内多带一点背景模型也能学会。标注完导出VOC或YOLO格式再把图片和txt按目录分开。数据切分不能只按文件随机分最好按场景分。比如把同一个停车场不同时段的图片全部放train另一个停车场放val再一个园区放test。否则val和train里都出现同角度同光线图片测出来的mAP虚高论文里写出来会被质疑。切分比例建议train:val:test 8:1:1最少也要一千张真实图起步。3.2 训练命令与超参数一张消费级显卡能跑通的配置准备好数据后写一个数据集描述文件。YOLOv5的train.py用--data指定这个yamltrain: /data/plate/images/train val: /data/plate/images/val test: /data/plate/images/test nc: 1 names: [plate]关键字段是nc类别数和names类别名。如果后续训练字符模型这个文件改成nc: 65和对应的名称列表。路径建议写绝对路径避免工作目录切换导致找错。YOLOv5会读取每个路径下的图片和同名标签。训练命令我一般这样写python train.py \ --data /data/plate/plate.yaml \ --weights yolov5s.pt \ --img 640 \ --batch 16 \ --epochs 100 \ --hyp data/hyp.scratch-low.yaml \ --project runs/plate \ --name exp1参数说明--img 640是训练输入边长YOLOv5会等比缩放并填充--batch 16在6GB显存下比较稳妥8GB显卡可以尝试32--epochs 100对单类检测完全够一般到第60个epoch就开始收敛--weights yolov5s.pt使用COCO预训练权重做迁移学习--hyp data/hyp.scratch-low.yaml使用低增强配置原因在下面。YOLOv5超参数藏在data/hyp.scratch-low.yaml和hyp.scratch-high.yaml里。对于车牌检测这种形状规整、颜色鲜明的目标不需要过强的数据增强。我常用改动写成一个独立的hyp.plate.yamllr0: 0.01 lrf: 0.01 momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 3.0 hsv_h: 0.0 hsv_s: 0.5 hsv_v: 0.4 degrees: 5.0 translate: 0.1 scale: 0.5 fliplr: 0.0 mosaic: 1.0这些参数怎么改hsv_h是色调扰动车牌颜色是重要先验特征色相偏移太大会把蓝牌变成绿牌或紫牌建议设0hsv_s和hsv_v控制饱和度、亮度扰动逆光场景需要可以保留0.4~0.5degrees是旋转角度车牌不会倒着出现5度足够fliplr水平翻转要设0因为汉字翻转后语义变了模型会把左右结构学反。mosaic建议保持1.0它把四张图拼在一起训练能提升小目标能力但如果显存不够训练参数里加--no-mosaic关掉。训练过程用runs/plate/exp1/下的results.png和val_batch*.jpg观察每100轮日志会打印P、R、mAP0.5。如果mAP已经超过97%且val loss不再下降可以手动CtrlC中断YOLOv5会自动保存最佳权重best.pt。后续继续训练用--resume runs/plate/exp1/weights/last.pt它会读取之前的权重、epoch和超参数不用重新设置。有一个容易踩的坑如果你用预训练权重yolov5s.pt它会自动改变输出类别数从COCO的80到你的nc1这是YOLOv5内部处理好的。但如果你下载的权重是别人微调过的类别数可能不匹配并报错。解决方法是重新下载官方yolov5s.pt或者去掉--weights从头训练。4. 字符识别模型的训练与后处理把检测框变成车牌号车牌检测模型训练完成后你已经能看到蓝色或绿色的车牌边界框。接下来要让模型认识车牌里的汉字、字母和数字。这一步是YOLOv5的第二个应用场景也是论文里除“车牌检测”外最有技术增量的部分。4.1 字符级数据的生成与标注策略字符识别模型可以直接用YOLOv5训练但数据准备逻辑和车牌检测完全不同。车牌检测只有一类字符识别有65类类别数量级变大标注成本和类别均衡问题随之而来。第一个做法是真实标注。用训练好的车牌检测模型跑一遍所有训练图把裁剪出的车牌小图收集起来再用标注工具在每张车牌上拉字符框。一个标准蓝牌有7个字符7个框都要标类别。这样标注一套数据大约要花一整天但真实性和场景覆盖最好。第二个做法是合成数据。先用程序随机生成蓝色底、白色字的车牌底图再把各省简称、字母、数字用OpenCV画上去做透视变换、加高斯模糊、改变亮度。合成数据能轻松做到几万张但字体和真实车牌有差异直接拿合成数据训练会掉点。常见做法是“真实数据打底合成数据补量”低频汉字多生成样本能缓解类别不平衡。字符模型的yaml文件类似这样train: /data/char/images/train val: /data/char/images/val nc: 65 names: [京,津,冀,晋,蒙,辽,吉,黑,沪,苏,浙,皖,闽,赣,鲁,豫,鄂,湘,粤,桂,琼,川,贵,云,藏,陕,甘,青,宁,新,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9]注意英文类别里没有字母I和O避免和数字1、0混淆这是车牌的强制规范。names顺序要固定训练和推理保持一致后处理时用这个列表做索引映射。训练命令python train.py \ --data /data/char/char.yaml \ --weights yolov5s.pt \ --img 320 \ --batch 32 \ --epochs 80 \ --hyp data/hyp.char.yaml--img 320是字符模型的常见选择。输入是裁剪后的车牌小图原本宽度在200~400像素直接resize到320不会丢失太多细节。--batch 32需要8GB以上显存如果只有6GB降到16即可。字符类别多epochs 80比车牌检测多一些让模型记住汉字结构。字符模型训练时必须开启YOLOv5的自动锚定不要加--noautoanchor。YOLOv5会自动用K-means重新计算锚点因为字符的宽高比接近正方形和车牌的长条框差异很大。如果沿用COCO锚点收敛很慢最后mAP低好几个点。4.2 后处理按坐标排序、置信度过滤、正则校验和组合输出字符检测模型的输出是65类中每个字符的框坐标和置信度。把它们拼成车牌号后处理代码决定了最终准确率。下面是完整的推理后处理片段。import re import numpy as np # det 来自模型输出格式为 [x1, y1, x2, y2, conf, cls_id] def compose_plate(dets, class_names): if len(dets) 7: return None, 0.0 dets [d for d in dets if d[4] 0.5] # 按x中心排序字符自左向右 dets.sort(keylambda d: (d[0] d[2]) / 2) chars [] confs [] for d in dets: cls_id int(d[5]) chars.append(class_names[cls_id]) confs.append(d[4]) plate_candidate .join(chars) if not is_valid_plate(plate_candidate): return None, float(np.mean(confs)) return plate_candidate, float(np.mean(confs)) def is_valid_plate(s): # 蓝牌7位新能源8位顺序省份简称字母5/6位字母数字 pattern r^[\u4e00-\u9fa5][A-Z][0-9A-Z]{5,6}$ return bool(re.match(pattern, s))逻辑说明第一步过滤置信度低于0.5的框避免把干扰物当字符第二步按边界框x中心排序因为中国车牌是从左到右排布第三步用class_names把类别id转成字符第四步用正则校验车牌格式省份必须是汉字第二位必须是大写字母后面5~6位是字母或数字。校验不通过返回None让上层决定是否重新检测。正则里的[\u4e00-\u9fa5]匹配所有汉字但车牌省份只占其中31个更严谨的做法是把31个汉字拼成枚举例如[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]。另外新能源车牌比蓝牌多一位是6位数字字母所以{5,6}可以兼容。如果单车牌上检测出多于7个框或少于7个框需要容错。多出来的框可能是背景误检按置信度排序后取前7个少的时候不要硬凑可以尝试删除一个字符再匹配正则比如“粤B1234”缺少最后一位尝试所有可能插入位置补上候选字符。这个操作有点“玄学”但在实际部署里能救回不少模糊车牌。最后是推理管线串联。下面这个简化函数展示了从原图到最终结果的调用关系。def detector_plate_and_ocr(img): boxes plate_model.predict(img) # 车牌位置 if len(boxes) 0: return None x1, y1, x2, y2 boxes[0][:4] plate_img img[y1:y2, x1:x2] # 裁剪 char_dets char_model.predict(plate_img) # 字符框 plate_str, score compose_plate(char_dets, class_names) return plate_str这个流程是串行推理plate_model跑一次char_model在裁剪区域跑一次。如果想提升帧率可以把车牌检测输入降为320×320字符模型也设为320×320单张图在GTX 1660上大约40ms接近实时。裁剪区域要留一点边plate_img img[max(y1-10,0):y210, max(x1-10,0):x210]给字符模型一点周围背景反而比严格裁剪更容易识别。5. YOLOv5车牌识别系统避坑指南三类高频翻车现场训练和部署过程中很多问题不是报错而是“模型跑出来了但结果不对”。这种问题最容易浪费一整天。这里整理了几类我自己反复踩过的坑每条按现象、原因、解决顺序写。5.1 蓝牌和新能源绿牌的预处理冲突现象同一个车牌检测模型蓝牌全部能框出绿牌却有一半被漏检或者边框把绿色区域切掉一块。字符识别阶段绿牌字符位数总是少一位或多一位导致正则校验失败。原因训练数据集里蓝牌占绝大多数绿牌占比可能不到5%模型没学会“绿色也是一种车牌底色”。另外数据增强里hsv_h色调扰动会把绿色调成蓝色反而把模型搞混。字符后处理如果写死“7位”遇到8位新能源车牌会直接拒识。解决先统计数据集里蓝绿牌比例人工把绿牌图片复制三份放进训练集复制的同时做轻微亮度变换再存储。字符模型后处理要同时接受7位和8位。训练时hsv_h保持0必要时把绿牌图像从RGB转到HSV后增强V通道。如果项目交付只针对蓝牌在需求文档里写明“暂不支持绿牌”也是一种免责的工程选择。5.2 相似字符识别混淆O/0、I/1、汉字“鲁”“辽”“渝”等现象字符模型把车牌里的字母O识别成数字0或把“鲁”识别成“辽”。单独打印每个字符时模型置信度很高连起来却不是合法车牌。原因真实车牌字体里O和0几乎一样但车管所规定O和I不能出现在字母位数字0和1可以。训练数据不平衡导致模型没学过O和I类别于是误判为相近数字。汉字方面“鲁”和“辽”右侧偏旁结构接近像素级特征容易混淆。解决在训练集里完全去掉字母O和I的标注样本让模型永远不输出这两个类别后处理时再做黑名单校验。对易混淆汉字在合成数据里额外生成“鲁辽、皖豫、鄂渝”等成对变体增加负样本压力。另一个常用手段是把裁剪后的车牌统一resize到高度48、宽度在192~256之间再送入字符模型因为YOLOv5默认输入是正方形而车牌本身是长方形正方形会造成拉伸畸变。实践里我习惯把车牌区域先按长宽比贴合到目标再pad成正方形这样字符比例不变。后处理里还可以加一个省份简称校验province_chars 京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼 def is_valid_province(s): return s[0] in province_chars这样如果模型输出第一个字符不在列表里可以直接判为识别失败而不是输出一个错误省份。这个黑名单思路在论文的鲁棒性分析里也很好用。5.3 显存溢出和环境依赖不一致现象训练时设置--batch 32第10个epoch直接报CUDA out of memory训练好的模型导出ONNX后在另一台服务器上推理前几帧正常几分钟后掉帧甚至崩溃。原因显存溢出通常是两方面的一是batch size太高二是mosaic增强导致每张图拼接后分辨率波动峰值占用超过平均占用。部署崩溃更常见的是PyTorch和OpenCV版本不一致或者CPU是老款不支持AVX指令集PyTorch里的预编译扩展在这类CPU上会报非法指令错误。解决训练阶段把batch降到8或16同时加--no-mosaic减少显存峰值如果显存仍吃紧把--img 480缩小输入。部署阶段导出ONNX时固定动态轴torch.onnx.export(model, dummy_input, plate.onnx, dynamic_axes{input: {0: batch}, output: {0: batch}})不要开宽高维度的动态维度否则优化器很难做图优化。在老旧CPU环境优先尝试用OpenVINO或TensorRT做转换绕过PyTorch运行时。使用conda创建独立的Python 3.8环境能避免大量系统包冲突这是最快的后悔药。还有一条如果训练日志里出现loss: nan不要急着调学习率先检查数据里有没有全黑或全白图片这类极端样本会让loss爆炸。YOLOv5默认权重衰减是0.0005不用改动学习率跑到一半变成nan多数是数据问题。5.4 字符模型类别数不匹配导致推理崩溃现象使用训练好的字符模型推理时输出张量的shape是(1, 65, 8400)后处理里索引class_names[int(cls_id)]却报index out of range或者识别结果全是乱码。原因训练时names列表顺序和推理时加载的names不一致或者预训练权重类别数不是65。YOLOv5在train.py里会自动把模型输出层改成nc但如果你用别人训练好的权重文件而对方用nc80跑过一次再继续微调可能出现输出类别数是8065145的情况这是微调后的维度残留。解决训练自己的数据集时从官方yolov5s.pt开始不要用微调过的权重继续接自己数据。推理代码里读取模型权重后检查model.model[-1].nc如果和names长度不一致直接拒绝加载。导出ONNX后用OpenCV DNN模块推理时它会忽略类别名需要你在后处理代码里重新声明names保持和训练时一致。这个坑在毕设答辩现场最容易出现因为很多同学只带模型和推理脚本却忘带data/char.yaml里的names列表。我一般会把names写进推理脚本的常量里不依赖外部yaml虽然不优雅但不会因为换电脑就找不到。6. 从模型到论文验证指标、实验对比和系统演示的落地写法模型跑通后最后一步是把结果写成论文可用的数据。车牌识别系统的核心指标需要三个维度检测精度、识别精度、速度。检测精度用mAP0.5和mAP0.5:0.95识别精度用字符级准确率和车牌级准确率速度用单张图推理时间并附上测试GPU型号。论文里最忌只贴一张mAP曲线没有对比实验。我习惯把实验设计成三组第一组传统车牌识别方案颜色分割模板匹配做基线第二组“YOLOv5车牌检测CRNN识别”作对照第三组“YOLOv5车牌检测YOLOv5字符检测后处理”作本方案。三组用同一份测试集统计车牌级准确率、字符级准确率、平均延迟。如果算力有限基线组可以引用公开论文的数据但要在文中注明测试场景不可比。验证阶段要做两件事。第一件是跑混淆矩阵重点看易混字符分布把O/0、I/1的错位挑出来在后处理代码里加规则修正。第二件是在不同时段、不同光照的真实视频上做连续帧测试注意别只测静止图片——连续帧里车牌会有运动模糊视频的“有效帧识别率”比静态图像更有说服力。论文里放一张完整的系统流水线图用两个YOLOv5网络结构图分别对应车牌检测和字符识别再用一张表格列出不同输入尺寸下的性能。输入尺寸640与320的对比是常见消融点可以写“输入分辨率从640降到320mAP下降0.8%速度提升55%”这种数据最能打动评审。所有实验权重、数据切分脚本、推理代码打包到附录方便复现。最后提醒一句训练时如果你偷懒不写代码直接把runs目录下的results.png贴进论文明显是没跑过验证的。我习惯在每个epoch结束都保存一张带预测框的抽样图片论文里的可视化图就从这些抽样图里选。希望这些步骤能帮到你把“基于yolov5的深度学习车牌识别系统论文.docx”变成一份真正能跑、能答辩、能交付的成果。本文还有配套的精品资源点击获取