ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于YOLOv8的PCB板缺陷检测系统开发:数据、训练与部署全攻略

基于YOLOv8的PCB板缺陷检测系统开发:数据、训练与部署全攻略 简介针对传统PCB缺陷检测依赖人工、效率低的问题一份基于YOLOv8的PCB板缺陷检测系统毕业设计论文资源面向计算机科学与技术专业学生及目标检测方向学习者完整呈现了系统开发与验证过程。压缩包内共有1个docx文档大小约3.66MB正文覆盖中英文摘要、绪论、国内外研究现状、YOLOv8框架原理、系统可行性分析、功能与非功能需求分析、系统设计、数据集准备以及实验验证等章节目录结构清晰便于对照论文写作与实验流程学习。资源从项目背景、技术选型到系统实现均有较细致阐述尤其对YOLOv8的网络结构、损失函数、训练与推理过程以及PCB缺陷检测的实际应用场景作了说明读者可据此掌握深度学习在工业质检中的落地思路。目前已有500人浏览学习适合需要快速了解YOLOv8工业视觉应用或撰写相关毕业设计论文的学生与开发者参考。1. 基于YOLOv8的PCB板缺陷检测系统开发毕设先想清楚这些问题PCB板缺陷检测是机器视觉在电子制造里最典型的落地场景之一。一条产线上几万片板子靠人眼盯过孔、短路、毛刺眼睛会花标准也不稳定。基于YOLOv8的PCB板缺陷检测系统开发与实现之所以能成为毕业论文选题是因为它不只是训练一个目标检测模型那么简单——你还要把数据、模型、界面、部署串成一套系统这正好覆盖了工程能力的全部考察点。这篇笔记按我实际做过的路径从数据准备、训练调参、系统搭建到部署避坑把每一步的关键参数和翻车原因写清楚适合准备做同类毕设或小批量产线验证的读者直接照着走。2. 数据准备PCB缺陷数据集选型与标注的实用路径2.1 先认清PCB缺陷有哪些经典六类缺陷与公开数据集选择PCB缺陷检测不是目标检测里那种“万物皆可识”的任务。板子本身有复杂纹理、走线、焊盘、过孔缺陷种类固定且外观差异极大。常见的分类是六类短路、断路、毛刺、漏铜、孔洞、余铜。有些资料还会加上假焊、污点等但做系统开发先聚焦主流几类就够用。公开数据集里北京大学发布的PKU-Market-PCB用得最多里面有六类缺陷的裁剪图像适合做算法验证不过它的图像是人工裁剪的局部块尺寸偏小跟实际产线整板相机拍摄的画面差异不小。还有IIT2019等更接近真实PCB板图的数据集但标注质量参差不齐。我一般建议如果做毕设先用PKU-Market-PCB这类现成数据把流程跑通再自己采集一批整板图来标注这样论文里既有标准数据集对比又有真实场景验证。选数据集时要关注三个点第一图像分辨率。PCB缺陷是小目标如果原始图像只有几百像素很多缺陷只有几个像素大YOLOv8的骨干网络下采样32倍后特征图只剩零点几像素根本检测不到。第二标注框的类别名称要统一。有的数据集用“short”, “open”, “mousebite”这类英文有的用中文“短路”“断路”。如果后续要自己补数据最好统一成英文小写加下划线比如missing_hole、spurious_copper避免训练时类别映射出错。第三数据集划分比例。我习惯按8:1:1划分训练、验证、测试而且用固定随机种子保证结果可复现。2.2 标注工具与YOLO格式转换LabelImg到txt的标准化过程如果你用的数据集是COCO格式或VOC格式需要动手转一遍YOLO格式。YOLO训练需要的txt标注文件每一行是“类别ID 中心x 中心y 宽度 高度”这些值都是相对于图像宽度和高度的归一化小数。最常见的转换路径是先用LabelImg人工标注保存为VOC XML再写脚本转成txt。如果你拿到的是COCO格式的JSON可以用ultralytics自带的转换工具但更可控的是自己写几十行Python脚本。import os import json from pathlib import Path # 假设coco_json是标注文件路径img_dir是图片路径out_dir是输出txt目录 def coco_to_yolo(coco_json, img_dir, out_dir): with open(coco_json, r, encodingutf-8) as f: coco json.load(f) # 建立图片ID到文件名的映射 img_map {img[id]: img[file_name] for img in coco[images]} # 建立类别ID到连续ID的映射这一步很关键因为COCO类别ID可能不是0起始 cat_map {cat[id]: idx for idx, cat in enumerate(coco[categories])} os.makedirs(out_dir, exist_okTrue) for ann in coco[annotations]: img_id ann[image_id] file_name img_map[img_id] txt_path Path(out_dir) / (Path(file_name).stem .txt) # 用追加方式写因为一张图可能有多个框 cat_id cat_map[ann[category_id]] bbox ann[bbox] # coco bbox是[x, y, width, height] x, y, w, h bbox # 转换为归一化中心点坐标 img_w coco[images][next(i for i, img in enumerate(coco[images]) if img[id] img_id)][width] img_h coco[images][next(i for i, img in enumerate(coco[images]) if img[id] img_id)][height] cx (x w / 2) / img_w cy (y h / 2) / img_h nw w / img_w nh h / img_h with open(txt_path, a) as tf: tf.write(f{cat_id} {cx:.6f} {cy:.6f} {nw:.6f} {nh:.6f}\n) print(f转换完成输出目录{out_dir})这段代码把COCO格式转成YOLO格式核心是理解坐标系的换算。COCO的bbox是左上角坐标加宽高YOLO需要中心点加宽高并且都归一化到0到1之间。这里有个常见坑如果图像读取时用OpenCV注意它的宽高顺序另外要确保所有标注框的宽高都大于0否则训练时会直接报错。转换后建议立刻读取一个txt和原图画框验证一遍不要直接拿去训练。2.3 样本不均衡与小目标增强让模型看清微小缺陷PCB缺陷数据集里短路和毛刺出现的频率远高于漏铜和孔洞。训练时如果不处理模型对高频类别过拟合低频类别几乎学不到。最简单的办法是类别加权采样在data.yaml里给每个类别设置不同的权值但更实用的是“过采样数据增强”。我一般用ultralytics自带的增强参数hsv_h、hsv_s、hsv_v调低色偏因为PCB颜色不能乱变flipud和fliplr可以开但要小心板子上的丝印文字镜像后会不会造成混淆mosaic增强在PCB小目标上很有用可以增加不同板子之间的拼接特征但mosaic_p一定要设置成0.8左右比如mosaic1.0mosaic_p0.9留一点随机性。小目标增强还有一个方向把原图切成patch训练。PCB板图往往很大比如1000x1000以上直接缩放到640会丢失细节。常见做法是先用切片工具把原图切成320或640的小块再对这些patch做增强。这样模型看到的是真实的局部纹理而不是整体缩小后的模糊图。这个做法对推理阶段也有影响后面部署时要用相同策略做tiling不然训练和推理的预处理不一致效果会崩。3. 训练出可用模型YOLOv8在PCB数据集上的完整配置与调参3.1 环境配置CUDA、PyTorch与ultralytics的版本搭配YOLOv8训练的环境没有想象中复杂但版本搭配不对会让人折腾半天。ultralytics包从8.x起对PyTorch版本有硬性要求一般推荐PyTorch 2.0以上。如果你用conda可以这样安装# 创建虚拟环境指定Python版本 conda create -n yolov8 python3.10 -y conda activate yolov8 # 安装PyTorch根据你的CUDA版本更换index-url pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 安装ultralytics pip install ultralytics # 验证安装 yolo predict modelyolov8n.pt sourcehttps://ultralytics.com/images/bus.jpg这里有几个参数值得解释Python 3.10是目前兼容性最好的版本3.11和3.12在部分依赖上容易出坑CUDA用11.8比较稳比12.x更成熟首次运行yolo命令会自动下载yolov8n.pt权重如果网络慢会卡住可以手动下载后放到当前目录。如果你只有CPU也能跑但训练速度会慢几十倍估算一下时间再决定要不要换机器。我在训练前通常先跑一次推理测试确认模型能加载再开始训练避免后期才发现环境问题。3.2 训练命令与关键参数从yaml到训练真正跑起来训练前要准备好data.yaml文件这是最容易出错的一步。它里面有三项必须写对path数据集根目录、train和val相对图片路径或绝对路径。类别列表呢千万别写错顺序一旦和txt标注里的类别ID对不上训练时模型会把“短路”当“漏铜”来学loss还照样下降结果全是错的。# data.yaml path: ./pcb_dataset train: images/train val: images/val names: 0: missing_hole 1: mouse_bite 2: open_circuit 3: short 4: spur 5: spurious_copper这段yaml是训练的根本。names的顺序必须和你转换txt时使用的类别映射完全一致否则数据全乱。我建议先用一个只有几十张图的小数据集做10个epoch的冒烟测试确认训练能正常启动、loss在下降再跑全量数据。训练命令如下yolo train modelyolov8n.pt datapcb_dataset/data.yaml epochs200 imgsz640 batch16 device0 projectpcb_defect nameexp1几个关键参数的作用model指定基础模型yolov8n是nano版速度快显存小但检测精度不如s/m/l系列。对PCB小目标我一般用yolov8m起步再从yolov8l试试上限。imgsz是训练输入分辨率PCB缺陷小建议至少640如果显存够768或800效果更好。batch是每批图像数受显存限制16在12G显存下配m模型比较稳。epochs设200但配合早停patience参数一般100轮内就能收敛。project和name用来指定输出目录方便对比实验。训练时还有几个参数值得关注patience20表示验证指标20轮不提升就停optimizerSGD或AdamW对PCB这个小数据集来说AdamW收敛更快SGD最终精度更高我一般先用AdamW做快速探索再用SGD跑最终版class_weights填True可以缓解样本不均衡。如果训练时显存不够尝试减小batch或者用--amp混合精度。3.3 损失函数曲线怎么画训练状态诊断与早停策略训练产出的results.png里包含了loss曲线、precision、recall、mAP等图但很多人不会看。PCB缺陷检测里最常遇到的诡异现象是训练loss一路下降但验证集mAP卡在0.5左右不涨。这基本说明模型过拟合了或者验证集和训练集分布差异大。用代码画loss曲线可以更精细地对比训练与验证的差距。import pandas as pd import matplotlib.pyplot as plt # 读取训练产生的results.csv df pd.read_csv(runs/detect/exp1/results.csv) # 取出列名ultralytics的列名是epoch, train/box_loss, val/box_loss等 epochs df[epoch] train_loss df[train/cls_loss] df[train/box_loss] val_loss df[val/cls_loss] df[val/box_loss] plt.figure(figsize(8, 5)) plt.plot(epochs, train_loss, labeltrain loss) plt.plot(epochs, val_loss, labelval loss) plt.xlabel(epoch) plt.ylabel(loss) plt.title(PCB Defect Detection Loss Curve) plt.legend() plt.grid(True) plt.savefig(loss_curve.png, dpi200)这段代码把分类损失和回归损失合并展示便于观察整体趋势。关键看两点第一训练loss和验证loss是否同步下降如果训练loss在降、验证loss回升就是过拟合信号第二val loss在训练后期是否出现平台期如果是可以提前停。我通常在val loss连续15-20个epoch不下降时手动中断然后加载最后一个最佳epoch的权重ultralytics会自动保存best.pt。另外不建议只看精度不看loss有的训练早期loss很高但mAP涨得快那是因为损失函数里三个分量权重不同要结合confusion matrix一起分析。3.4 评估与导出mAP、混淆矩阵与ONNX转换训练完不要直接拿best.pt部署。先跑一下验证集评估用命令yolo val modelruns/detect/exp1/weights/best.pt datapcb_dataset/data.yaml它输出mAP50、mAP50-95、precision、recall等指标。对PCB缺陷检测mAP50比mAP50-95更重要因为产线上只要框出来就算对但你也得看mAP50-95它反映定位精度。打开混淆矩阵图能发现哪些类别互相混淆。常见的是“毛刺”和“漏铜”混淆因为两者都在铜箔边缘外观相似。如果混淆严重可以考虑合并类别或者增加它们各自的样本量。导出ONNX是为了后续系统集成和部署。命令yolo export modelruns/detect/exp1/weights/best.pt formatonnx imgsz640。导出后可以用onnxruntime推理验证输出是否和PyTorch一致。注意imgsz要和训练一致否则输出形状不同。导出的ONNX包含NMS后处理部分这会让模型文件变大且部署时可能不适合边缘设备。更干净的做法是导出时加nmsFalse把NMS放到部署代码里自己做这样更容易控制置信度阈值和IoU阈值。4. 系统开发把模型包成可用的PCB缺陷检测系统4.1 系统架构图像输入、推理引擎与结果展示的三层设计毕业论文里的“系统开发”不是训练一个模型再写几百字介绍就完事的。你要拿出一套能交互的软件接收图像或摄像头画面输出检测结果和统计报表。常见架构分成三层第一层是输入层支持三类来源本地图片文件夹、单个图像文件、工业相机实时采集。如果接相机建议直接用OpenCV的VideoCapture它能兼容大多数USB和GigE相机如果是海康、大华的工业相机需要厂商SDK我建议毕设阶段先用图片文件夹避免被相机SDK拖死。第二层是推理层用ultralytics的YOLO类封装模型或者直接用onnxruntime加载导出的ONNX模型。推理层要做的事情包括图像尺寸调整、归一化、推理、NMS后处理、输出坐标映射回原图。建议单独写一个Detector类不要和界面混在一起这样以后换模型或换推理后端都方便。第三层是展示层最省事的是用PyQt5或PySide6写桌面端也可以用Gradio搭Web演示界面。毕设答辩时桌面端更直观能展示文件选择、检测结果、统计列表等。如果时间紧推荐用PyQt5代码量少控件直接拖。4.2 核心推理代码用PyQt5快速搭建检测界面下面给出一个最简单的PyQt5界面框架包含图片加载、推理和结果绘制三个功能足够作为系统雏形。代码里把推理部分放在Detector类中界面只负责调用。import sys import cv2 import torch from ultralytics import YOLO from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QFileDialog, QVBoxLayout, QWidget from PyQt5.QtGui import QImage, QPixmap class PCBDetector: def __init__(self, weights_path, conf_thres0.25, iou_thres0.45): self.model YOLO(weights_path) self.conf_thres conf_thres self.iou_thres iou_thres def detect(self, img_bgr): # 推理并返回结果图像和检测信息列表 results self.model.predict(img_bgr, confself.conf_thres, iouself.iou_thres)[0] annotated results.plot() # ultralytics自带画框函数 det_info [] for box in results.boxes: cls_id int(box.cls[0]) conf float(box.conf[0]) xyxy [float(v) for v in box.xyxy[0]] det_info.append({class: results.names[cls_id], conf: conf, bbox: xyxy}) return annotated, det_info class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(PCB缺陷检测系统) self.detector None # 稍后在打开模型时初始化 self.image_label QLabel(请加载图片) btn_load QPushButton(加载图片) btn_load.clicked.connect(self.load_image) # 这里省略布局代码仅演示核心逻辑 def load_image(self): path, _ QFileDialog.getOpenFileName(self, 选择图片, , Images (*.png *.jpg *.bmp)) if not path: return img_bgr cv2.imread(path) if self.detector is None: # 实际可从配置里读权重路径 self.detector PCBDetector(runs/detect/exp1/weights/best.pt) annotated, det_info self.detector.detect(img_bgr) # 将BGR转RGB并显示 img_rgb cv2.cvtColor(annotated, cv2.COLOR_BGR2RGB) h, w, ch img_rgb.shape qimg QImage(img_rgb.data, w, h, ch * w, QImage.Format_RGB888) self.image_label.setPixmap(QPixmap.fromImage(qimg)) print(f检测到 {len(det_info)} 个缺陷: {det_info}) if __name__ __main__: app QApplication(sys.argv) win MainWindow() win.show() sys.exit(app.exec_())这段代码有两个关键点第一PCBDetector类把YOLO的predict封装好外部无需关心推理细节第二results.plot()是ultralytics内置的画框方法它已经用不同颜色区分了类别但如果你觉得画框样式不好可以自己用cv2.rectangle重画。注意QImage转换时OpenCV的图像是BGR必须转成RGB否则显示颜色会偏蓝。这里还有一个性能上的坑predict默认会在BGR和RGB间做转换如果你已经opencv读入图像建议传参数imgsz和device避免每次推理都重新分配显存。4.3 结果统计与报表输出让系统有工程价值光把检测框画出来毕设答辩时老师只会觉得你接了个YOLO。要体现“系统开发”必须有结果统计和报表功能。我建议做两件事第一检测结果汇总表格。用QTableWidget显示每一处缺陷的类别、置信度、位置坐标。表格数据来源于Detector返回的det_info这个信息还可以导出为CSV文件。第二批量检测功能。选择整个文件夹遍历所有图片把每张图的缺陷数量、缺陷类型分布记录到一个字典里最后生成Excel或CSV报表。代码思路很简单遍历路径循环调用detect方法把结果写入pandas DataFrame再调用to_csv。额外提一句可以用matplotlib绘制缺陷类别柱状图放在报表里这样论文里就能直接引用这张图作为“系统统计功能”的展示。如果还想再进一步可以加一个“缺陷类型占比”的饼图或者把检测结果叠加到原图上生成一张带标注的缺陷分布图。这些功能对毕设来说都是加分项关键是代码结构清晰让答辩老师觉得你是真的在开发一套系统而不是在跑demo。5. 常见问题与避坑训练和部署PCB检测模型的七个翻车现场5.1 训练loss不降但mAP正常数据格式与增强的锅现象训练过程中loss曲线整体偏高且下降缓慢但mAP却正常上升看起来一切正常但最后的模型对某些类别效果很差。原因往往是数据加载时预处理不一致比如训练时启用了mixup或mosaic但验证时没有或者data.yaml中的类别数量和你训练脚本里的nc参数不一致。还有一个隐蔽原因图像文件名里带有中文导致ultralytics读取时编码混乱随机丢样本。解决训练前先用yolo detect train跑一个最小实验打开训练日志看第一行输出确认类别数和数据样本数。把数据集路径全部改成英文尤其是Windows系统下中文路径会让OpenCV的imread直接返回None。训练时关闭所有自动下载的预训练权重改成指定本地权重文件避免因为网络问题反复尝试下载。5.2 小目标缺陷漏检严重imgsz与anchor策略要调整现象验证集上mAP50还可以但mAP50-95很低或者单独看小目标类别的recall不到0.3。原因很简单YOLOv8的下采样倍数对大目标友好PCB缺陷往往只有十几个像素宽。解决第一个方案是把imgsz从640提高到800或960让模型在特征图上保留更多细节。第二个方案是调整anchorYOLOv8默认anchor是根据COCO数据集聚类得到的PCB缺陷的宽高比和COCO的物体差很多需要重新聚类。在ultralytics里设置anchor参数或直接修改模型配置中的anchors。第三个方案是增加一层更浅的预测头即修改yaml里的depth_multiple和head对应层但这样改动大毕设阶段不建议碰。我见过最有效的做法是对原始大图做切片推理把1000x1000的板子切成4张500x500分别推理再合并结果。这个方法的缺点是推理时间成倍增加但对小目标检测的提升是决定性的。如果想平衡速度可以只对缺陷可能性大的区域切片用传统图像分割先定位可疑区域但这就复杂了。5.3 误检把背景当缺陷注意PCB板面纹理干扰现象检测结果里出现大量假阳性把正常的走线交叉处、丝印文字边缘、反光白斑误判成缺陷。原因多半是训练数据里背景不够丰富模型记住了板子纹理而不是缺陷的本质。解决在准备数据时加入不同光源、不同角度、不同批次板子的负样本。负样本就是没有缺陷的正常板子局部图。YOLOv8训练时把负样本标注为空txt文件让模型学会“这里什么都没有”。另外做训练数据增强时不要过度使用hsv_h因为PCB颜色变化范围有限色相大变会让模型学到错误特征。我习惯把hsv_h设在0.01以内hsv_s和hsv_v可以到0.3左右这样既模拟光照变化又不破坏板子的本色。还有一个反直觉的坑训练时用了Mosaic增强推理时没有导致模型对整板图的背景尤其敏感。建议在训练的后半段把mosaic关闭比如设置mosaic0.0增强模式改为普通的随机裁剪这样模型对真实场景的适应能力更强。5.4 推理速度跟不上产线节奏从TensorRT到RK3588的部署选择现象系统用PyTorch推理单张640图像在GTX 1660 Ti上耗时60毫秒感觉不慢但产线上要求每秒处理5张还要同时做统计报表就显得捉襟见肘。解决第一步先转成ONNX用onnxruntime推理通常能比PyTorch快20%到30%。如果还不够用TensorRT。TensorRT在NVIDIA GPU上的加速非常明显FP16精度下能把YOLOv8m压到15毫秒以内。如果目标平台是RK3588这类边缘设备需要先把模型转成ONNX再用rknn-toolkit2转成RKNN格式。RK3588部署YOLOv8的流程网上资料多但有几个真正的坑一是RKNN只支持特定的算子比如SiLU在转换时可能会失败需要手动替换成ReLU并重新训练二是RKNN的输入输出格式和YOLOv8默认不同NMS需要自己写三是量化时要用实际图片做校准集最好把训练验证集里抽200张图片导出为校准集否则精度损失可能超过5个点。# 用rknn-toolkit2转换YOLOv8 ONNX到RKNN的示例伪代码依赖具体工具版本 # 1. 先导出ONNX yolo export modelbest.pt formatonnx imgsz640 # 2. 用Python脚本转换ONNX到RKNN # rknn RKNN() # rknn.config(target_platformrk3588, quantized_dtypew8a16) # rknn.load_onnx(modelbest.onnx) # rknn.build(do_quantizationTrue, datasetcalib.txt) # rknn.export_rknn(best.rknn)这段转换过程不是一次性成功的。我踩过的坑是ONNX导出时如果带着后处理RKNN转换会警告某些节点不支持导致输出的张量形状不对。因此导出ONNX时必须加nmsFalse并且把模型的置信度阈值调低把后处理全部留在RKNN之外。另外RK3588上的NPU输入必须固定为BGR还是RGB你训练时用的是BGR还是RGBultralytics训练默认把图像转成RGB后才送进网络但RKNN工具通常要求传入BGR你需要把预处理代码包括归一化和通道顺序单独抽出来写成可以在C或Python里调用的函数这样在板子上推理才能得到和PC上一致的结果。5.5 标注框偏移导致训练崩溃用可视化校验脚本排查现象训练刚开始没几个epoch就报错提示bbox坐标越界或非正数。原因多数是标注数据里某个框的宽高为负或者坐标超出了图像边界。有些标注工具导出时会把框坐标直接取整溢出尤其在放大缩小时算错比例。解决写一个简单的校验脚本遍历所有标注文件检查每个坐标是否在[0,1]范围内以及宽高是否大于0。同时生成带标注框的图片随机抽样可视化用肉眼检查框是否贴住缺陷边缘。我通常用OpenCV直接读txt画框几行代码就能搞定。毕业设计中这一步是“数据质量报告”的好素材文档里放几张可视化对比图能证明你的严谨性。6. 毕业论文里的工程技巧让检测系统的价值被看见6.1 系统架构图与控制流图怎么画毕业论文里画架构图最忌讳画成三层框加几条箭头就完事。建议画出系统启动时的初始化流程加载配置、加载模型、初始化界面运行时流程图像输入、预处理、推理、后处理、结果展示、数据存储。用Visio或draw.io画清楚每个模块之间的数据流标出关键参数传递比如图像分辨率、模型输入尺寸、置信度阈值。这样老师一眼能看出你的系统是分层解耦的而不是一坨script。6.2 对比实验表与消融实验的呈现方法YOLOv8论文里一定要有对比实验。你可以选择两三条线不同模型尺寸n/s/m/l在同一数据集上的精度和速度对比不同输入分辨率480/640/800的对比不同数据增强策略的对比。表格横轴放方案纵轴放mAP50、mAP50-95、参数量、FPS。消融实验放增强、切片、锚点调整这些因素的开关对比。注意实验表里的数据必须是真实跑出来的不能编造答辩老师会追问细节。6.3 用热力图和检测结果可视化支撑结论热力图是YOLOv8可视化非常实用的一招。用GradCAM显示模型关注区域能直观解释模型为什么把某个纹理误判成缺陷。在论文里放一组对比热力图漏检的样本热力图没有聚焦在真实缺陷区域改进后热力图正确聚焦了。这比单纯的指标数字更有说服力。检测结果可视化也很重要展示一组真实板图上的检测框标注置信度再配一张错误样本分析图把失败案例也放进去说明你的系统边界在哪里。这是论文增色的常规操作。最后说一个我自己的教训做PCB缺陷检测毕设不要前期花大量时间调模型后期没时间写系统。我当年就是模型调到95%的mAP结果系统界面只有一个按钮和一张图答辩时被老师问“你的系统完整性在哪里”所以如果你正在做这个方向我的建议是先用最快的路径把一套能跑的系统搭出来哪怕精度只有80%后面再往上迭代。论文里写的是“系统开发与实现”重点在“系统”二字模型精度只是其中一个模块。希望帮到你。本文还有配套的精品资源点击获取
返回列表