YOLOv8钢材表面缺陷检测与Qt GUI实战:从数据集训练到工程落地
简介面向工业质检与计算机视觉竞赛/项目的YOLOv8钢材缺陷检测完整方案提供训练好的权重、已标注数据集和可运行Qt界面可直接用于识别钢材表面多种缺陷。模型附带PR曲线与loss曲线便于评估检测精度与训练过程。资源包共2000个文件大小94.62MB以txt标签、jpg图像、Python脚本、yaml配置为主另有pt权重与ui文件其中数据集使用LabelImg标注同时提供xml和txt两种标签格式分别保存在独立目录方便按需转换与训练。PyQt界面支持图片、视频和摄像头实时检测切换对应选项即可部署门槛低。已有605人学习/下载适合快速落地钢材缺陷识别任务也可在权重与GUI基础上二次开发用于毕业设计、课程实验、产线验证或算法研究配套PyTorch权重与yaml配置可直接加载数据划分、显存配置等细节也在包内说明。1. 先说结论这套组合拳做的是质检工位上的「机器换人」钢材表面缺陷检测过去大多靠老师傅肉眼盯着产线监控屏看纹理、看反光、凭经验喊停。这套方案的思路是把人眼换成摄像头和模型用 YOLOv8 训练一个能够定位缺陷位置和类别的缺陷检测权重用带标注的工业数据集去喂模型最后把推理过程封装进一个 Qt 界面 GUI让现场操作员不用敲命令就能看图、跑检测、出结果。它解决的核心问题不是“能不能跑通”而是“质检流程能不能脱离算法工程师独立运转”。适合正在做产线质检自动化评估的工程师、学校实验室接横向项目的团队以及想把深度学习模型落地成桌面工具的开发者。2. 数据集选型与预处理别让模型从脏数据里学坏2.1 公开数据集怎么选NEU-DET 是默认起点但别指望直接复用到现场钢材缺陷检测领域最常用的公开数据集是东北大学的 NEU-DET。它包含六大类典型缺陷裂纹crazing、夹杂inclusion、斑块patches、麻点pitted_surface、氧化皮rolled-in_scale、划痕scratches每类大概两百多张样本图片尺寸约 300×300。这个数据集的特点是类别标注齐全、缺陷形态典型适合用来验证网络结构能不能学出区分度也适合新手走通“数据 → 训练 → 评估”的完整流程。但有两个问题你得心里有数。第一NEU-DET 的图片拍摄条件理想背景干净、光照均匀和真实产线上的暗光、水雾、油污、运动模糊完全是两个世界第二它的样本量偏小直接拿去训练 YOLOv8哪怕调参调得再好mAP 数字也只能说明模型在这个数据集上表现好不能证明它能扛住现场干扰。所以我的习惯是把 NEU-DET 当作 baseline 数据集用来验证流程、调超参数、跑通 GUI 串接真要落地到具体钢厂必须再采集现场图片补数据做迁移学习。如果是做毕业设计或者实验室横向项目没有条件去现场采集也有另一条路结合你们课题里常见的钢材类型比如中厚板、热轧带钢、焊管表面去搜一下是否有对应的开源缺陷数据集。市面上确实存在一些细分方向的钢表面数据集比如带钢表面缺陷、钢板缺陷检测等有些是学术机构公开的有些是赛事留下的。用之前一定要看标注格式是 VOC 的 XML、COCO 的 JSON还是 YOLO 的 txt这会直接决定你要不要做格式转换。2.2 标注格式转换把 VOC 转成 YOLO 训练格式的脚本与边界坑我们用的 YOLOv8 训练格式很简单一张图片对应一个同名 txt 文件每一行是一类缺陷格式为class_id x_center y_center width height坐标值是相对图片宽高的归一化小数。而从公开数据集下载的标注大多是 VOC 或 COCO 格式第一步就是把它们统一成 YOLO 格式。下面是一个把 VOC XML 标注转成 YOLO txt 的脚本只依赖xml.etree.ElementTree和os不需要额外装库import os import xml.etree.ElementTree as ET def voc_to_yolo(xml_path, out_dir, class_map): tree ET.parse(xml_path) root tree.getroot() img_w int(root.find(size/width).text) img_h int(root.find(size/height).text) lines [] for obj in root.findall(object): name obj.find(name).text if name not in class_map: continue # 跳过不在类别表里的目标 cls_id class_map[name] box obj.find(bndbox) xmin float(box.find(xmin).text) ymin float(box.find(ymin).text) xmax float(box.find(xmax).text) ymax float(box.find(ymax).text) # 过滤异常框坐标颠倒或超出图像范围 if xmax xmin or ymax ymin: continue if xmin 0 or ymin 0 or xmax img_w or ymax img_h: continue x_center ((xmin xmax) / 2) / img_w y_center ((ymin ymax) / 2) / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) if lines: base os.path.splitext(os.path.basename(xml_path))[0] with open(os.path.join(out_dir, base .txt), w) as f: f.write(\n.join(lines)) # 用法示例 class_map {crazing: 0, inclusion: 1, patches: 2, pitted_surface: 3, rolled-in_scale: 4, scratches: 5} xml_dir Annotations out_dir labels os.makedirs(out_dir, exist_okTrue) for xml_file in os.listdir(xml_dir): if xml_file.endswith(.xml): voc_to_yolo(os.path.join(xml_dir, xml_file), out_dir, class_map)逻辑说明脚本先从 XML 里读出图片宽高再遍历每个目标对象提取类别名和 bndbox 四坐标转成归一化的中心点加宽高格式。这里有两个容易被忽略的边界一是要过滤掉 xmax≤xmin 或 ymax≤ymin 的异常框有些标注工具会输出退化框二是要检查坐标是否超出图片范围尤其是从网上爬来的数据集经常有标注框比图片还大一圈的情况不过滤会导致训练时 loss 突然跳高。参数说明class_map是类别名到 id 的映射必须和你后续 data yaml 里的names顺序一致否则训练出来的类别全部错位。out_dir建议和图片目录同级YOLO 训练时靠文件前缀名关联图片和标签目录层级放错了不影响读取但肉眼排查时会很不方便。2.3 数据划分与类别不平衡直接 random split 会翻车数据准备好了之后先别急着训练。要做的第一件事是划分 train/val 集合常见比例是 8:2 或者 9:1。但这里有一个隐蔽的坑有些缺陷类别样本极少比如 NEU-DET 里的 crazing 可能只有几十张如果随机划分某一类缺陷的训练样本和验证样本分布会严重失衡导致验证集指标波动很大。我一般会按类别做分层抽样保证每一类缺陷在训练集和验证集中所占比例接近。还有就是建议把同一张图片的增强版本归到同一集合否则数据增强后的相似图片同时出现在训练集和验证集里mAP 会虚高。操作上可以用 sklearn 的train_test_split配合stratify参数或者直接用文件列表手动切分重点是你心里要清楚验证集的意义是模拟模型没见过的新样本不是让模型“开卷考试”。类别不平衡问题的另一个信号是训练日志里某些类别 AP 数值特别低比如 rolled-in_scale 能到 0.85而 crazing 只有 0.3。解决思路有三个一是对少样本类别做离线增强比如亮度变化、随机旋转、裁剪缩放二是在 loss 权重上做调整YOLOv8 本身支持按类别设置 loss 权重三是从训练策略上给少样本类别更多的学习机会比如更长的训练轮数。最粗暴的方法是把少样本类别重复复制几遍也能起效但不如增强来得稳定。3. 训练缺陷检测权重参数、日志与最佳权重选择3.1 环境配置与最小训练命令用 ultralytics 包跑通第一轮训练 YOLOv8 最常见的方式是安装ultralytics这个 Python 包。环境配置的坑主要在版本上ultralytics 迭代快和 PyTorch 版本之间存在兼容性窗口建议用 conda 建独立环境Python 3.9 或 3.10 配 PyTorch 2.x 通常是稳妥组合。装好之后验证一下 GPU 是否可用别在 CPU 上直接开训。准备训练需要两个文件数据集配置文件data yaml和模型配置文件如果是官方模型就用 yolov8n.pt / yolov8s.pt 这类预训练权重。下面是我常用的 data yaml 文件内容# steel_defect.yaml path: D:/datasets/steel_NEU # 数据集根目录绝对路径或相对路径 train: images/train # 训练图片目录 val: images/val # 验证图片目录 # 类别名一定要和转换脚本里的 class_map 一致 nc: 6 names: [crazing, inclusion, patches, pitted_surface, rolled-in_scale, scratches]逻辑说明path是根目录train和val是相对于path的图片目录路径。YOLOv8 会自动在同级目录下找对应的 labels 文件夹也就是说images/train对应的标注目录必须存在于labels/train。这一步不少人搞错检查顺序是先确认图片目录层级再确认 labels 目录是否存在同名 txt 文件。训练命令就一条yolo detect train datasteel_defect.yaml modelyolov8n.pt epochs100 batch16 imgsz640 projectruns namesteel_defect_yolov8n参数说明modelyolov8n.pt表示加载官方预训练权重作为初始权重这样做的好处是利用了 COCO 上的通用特征训练收敛快尤其是在样本量小的钢表面数据集上特别明显。batch16取决于显存大小6GB 显存跑 n 模型配 16 没问题s 模型建议降到 8。imgsz640是训练时喂给网络的输入分辨率NEU-DET 原图只有 300×300做 640 分辨率训练会自动上采样缺陷细节可能会被放大失真但能获得更多的特征信息具体效果需要对比实验。3.2 三个必须调的核心参数epochs、batch、imgsz 的联动关系先说 epochs。钢表面缺陷数据集样本量小模型很容易在几十个 epoch 内就过拟合。官方默认 100 个 epoch我的建议是第一次训练直接跑 200但打开早停patience机制让它自动在验证集指标不再提升时停掉。早停后模型会自动保存验证集表现最好的权重best.pt这就是你后续要用于 GUI 推理的“成品权重”。batch 和显存的关系很直接batch 越大梯度更稳定收敛更平滑但对显存需求线性增加。YOLOv8 有个很实用的参数batch-1会自动探测显存能容纳的最大 batch 大小。但自动探测的结果往往偏高训练时如果出现 CUDA out of memory程序会直接崩掉所以保守一点好6GB 以下显存建议手动设到 8。注意 batch 大小和图片分辨率是联动的imgsz提高到 1280显存占用就不是翻倍而是翻四倍因为特征图的宽高都放大了。imgsz对钢材缺陷检测的影响特别微妙。表面缺陷很多是细长的划痕、裂纹这类小目标在下采样过程中最容易丢失信息。训练分辨率设低模型推理速度是快了但对小缺陷的召回率通常不理想设高召回率上去了但推理延迟也上去了在 Qt 界面里做实时检测时体验会变差。我的实测经验是600×600 到 800×800 之间是比较均衡的范围落地时先用 640 跑一轮再往上试 960对比验证集 mAP 提升幅度如果 mAP 只涨了一个点但推理耗时翻了倍就不划算。3.3 看训练日志判断模是否学到位别只看 mAP 数字训练过程中会生成results.csv和一组results.png曲线图。新手最容易犯的错是只看最终的 mAP50忽略了 precision 和 recall 的变化趋势。对钢材缺陷检测来说漏检的代价通常比误检大——一条裂纹漏过去了意味着次品流到下游所以在权衡阈值时我会优先保证 recall再通过调置信度阈值把 precision 拉回来。训练完成后去runs/steel_defect_yolov8n/目录下看results.png重点看三条曲线train/box_loss 应该持续下降且和 val/box_loss 的差距不大val/cls_loss 如果先降后升说明过拟合已经开始mAP50 曲线如果出现剧烈震荡多半是 batch 太小或者验证集样本太少。yolov8 画损失函数曲线图这个需求其实不用自己写脚本results.csv里已经按行记录了每个 epoch 的全部指标直接 import pandas 画一遍就行要看趋势的话results.png够了。权重选择上有一个常见误用直接拿last.pt去部署。last.pt是最后一个 epoch 的权重通常不是验证集表现最好的那个best.pt才是。GUI 和后续部署统一用best.pt除非你明确知道 last 权重的指标更好。另外如果训练中途因为显存崩过一次自动保存的 last.pt 可能是崩之前的残次权重保险起见可以重新训或者手动删掉不明的 last.pt 文件。4. 给权重套上 Qt 界面从命令行到图形化的关键改造4.1 界面功能划分把使用场景拆成加载、推理、展示、导出四块命令行跑检测只需要一句话但现场操作员不懂 Python你要做的是把这句话藏到按钮背后。基于 Qt 的 GUI 设计我建议按功能划分界面区域文件加载区、图片或视频显示区、结果列表区、参数控制区和导出区。加载区解决“数据从哪来”支持选择单张图片、批量选择目录、拖拽文件显示区解决“缺陷在哪”绘制检测框、标注类别和置信度结果列表区解决“有多少缺陷”用表格展示每一处缺陷的位置、类别、置信度参数控制区解决“怎么检测”置信度阈值、NMS 阈值、推理设备选择导出区解决“结果怎么交差”把当前检测结果保存为带框图片或者导出整个批次的统计 CSV。这四个模块对新手来说刚好对应了 Qt 的四个基础组件QFileDialog、QLabel 加 QPainter、QTableWidget、QPushButton。不要一上来就做视频流实时检测。钢材缺陷检测的落地形态很多场景其实是离线抽检或在线抓拍后单帧判定。先把单张图片和批量图片的检测流程做扎实再加入摄像头或者工业相机的接入这个顺序能省掉大量联调时间。4.2 从模型到界面PySide6 的线程与信号槽别踩死锁坑PySide6 是 Qt 的 Python 绑定和 PyQt5 在 API 上九成相似。界面里推理最忌讳做的事是点击按钮直接在主线程里调用model.predict()。YOLOv8 模型加载权重和推理都是耗时操作小模型在 CPU 上跑一张图也要几百毫秒到一两秒界面会直接卡成“未响应”。解决方法是把推理放到 QThread 里通过 Signal 把结果传回主线程。# inference_worker.py from PySide6.QtCore import QThread, Signal from ultralytics import YOLO class InferenceThread(QThread): result_ready Signal(list) # 把检测结果传回主线程 error_occurred Signal(str) def __init__(self, model_path, image_path, conf0.25, iou0.45): super().__init__() self.model YOLO(model_path) self.image_path image_path self.conf conf self.iou iou def run(self): try: results self.model.predict( sourceself.image_path, confself.conf, iouself.iou, verboseFalse ) boxes [] for r in results: for box in r.boxes: cls_id int(box.cls[0]) conf float(box.conf[0]) xyxy box.xyxy[0].tolist() boxes.append({cls_id: cls_id, conf: conf, xyxy: xyxy}) self.result_ready.emit(boxes) except Exception as e: self.error_occurred.emit(str(e))逻辑说明这个线程类把模型加载放在构造函数里实际推理在run()方法中执行通过result_ready信号把检测框列表传回主线程。参数conf和iou对应检测置信度阈值和 NMS 阈值这两个参数在界面上做成可调控件用户不需要改代码就能调整检测灵敏度。信号传输的 list 里是普通 Python 对象没有涉及跨线程的 QObject 传递所以不会触发 Qt 的线程关联错误。参数说明model.predict()里verboseFalse很关键否则每次推理都会往控制台打印一堆日志在 GUI 程序里表现为信息栏被刷屏。conf默认 0.25 是我建议的起始值钢材缺陷小目标多调高到 0.5 会漏掉很多置信度较低但真实存在的缺陷落地到现场时一般设 0.20.3宁可多报几个误检框让人来筛不能漏检。4.3 图像显示与结果绘制OpenCV 和 Qt 的图像格式转换从文件读图到显示中间有一个格式转换的坑。OpenCV 读进来的是 BGR 的 NumPy 数组而 Qt 的 QLabel 显示需要 QImage 或 QPixmap。方案是先把 BGR 转成 RGB再通过QImage(data, width, height, bytesPerLine, format)构造# display_utils.py from PySide6.QtGui import QImage, QPixmap from PySide6.QtCore import Qt import cv2 import numpy as np def cv_to_qpixmap(img_bgr): img_rgb cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) h, w, ch img_rgb.shape bytes_per_line ch * w qimage QImage(img_rgb.data, w, h, bytes_per_line, QImage.Format_RGB888) return QPixmap.fromImage(qimage) # 显示时做缩放保持长宽比 pixmap cv_to_qpixmap(img_bgr) pixmap pixmap.scaled(label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation) label.setPixmap(pixmap)逻辑说明scaled这一步不只是为了好看钢材表面缺陷在原图中可能只占几个像素点如果直接把原图塞进去界面显示会非常小且看不清缩放后界面能看全图但不能替代放大镜功能最好是再加一个“局部放大”交互比如鼠标滚动缩放指定区域。bytes_per_line要按实际通道数乘宽度来算否则绘制出来的图像会产生颜色偏移和错位这是 OpenCV 转 Qt 最常见的一个翻车点。参数说明Qt.KeepAspectRatio保持长宽比缩放避免缺陷框位置和实际图像位置错位。如果你把绘制好的带框图像直接作为显示结果就不需要单独维护坐标映射关系但如果是原图上做叠加绘制再缩放显示要记得缩放倍率会改变标注框的显示尺寸绘制时要在同一坐标系下操作。5. 实战避坑数据、训练、GUI 三端最容易翻车的 5 个场景5.1 数据端类别漏标和标签错位比缺数据更致命现象训练完的模型对某一类缺陷完全不识别每次推理结果都把夹杂的框标成了麻点或者 ground truth 里明明有 six 个类别训练时却只报出五个类别的 AP。原因数据标注过程本身可能埋了两个雷。第一是漏标同一张图里一处缺陷只标了一半特别是大缺陷和密集缺陷标注员容易只标最明显的区域模型学到的目标位置不完整推理时就会一个目标分两半框或者框一半。第二是类别错位之前写好的 class_map 顺序和 data yaml 里的 names 顺序不一致这种情况在切换数据集时最容易出现比如你改了names列表但忘了改标签 txt 里的 class_id。解决训练前做一个一致性校验脚本随机抽 510 张图把 YOLO 标签反向绘制到原图上人工检查一次。具体做法是把 txt 里的归一化坐标还原成像素坐标用 OpenCV 的 rectangle 画框。这一步能同时验证类别对应和坐标归一化是否正确属于性价比最高的排错手段。再从类别分布上检查一下各类别样本数低于 50 张的类别优先做增强。5.2 训练端显存溢出与过拟合的排查顺序现象训练跑到第 30 个 epoch 时直接报 CUDA out of memory进程退出白跑了一上午。或者 val/mAP50 在第 60 个 epoch 后持续下降但 train/loss 还在降。原因显存溢出大概率是 batch 和 imgsz 的联乘效果超标特别是当你把模型从 yolov8n 换成 yolov8m 后忘了调低 batch。过拟合则是因为样本太少、模型复杂度太高或者增强不够。钢材缺陷类别间纹理差异大模型很容易“背”下训练集里的具体纹理而不是学到“裂纹是一种细长的断裂纹理”这个抽象概念。解决显存溢出按三步排查第一把 batch 减半第二把 imgsz 降一档第三换更小的模型结构从 m 退回 s 或 n。过拟合的排查顺序是先加增强特别是随机旋转和亮度变化再考虑减少模型参数量最后检查验证集构成是否存在和训练集同源的图片让 mAP 虚高。还有一个容易忽略的因素patience设得太高模型过拟合后还在继续训练最后保存的 best.pt 可能被后续的局部波动超越实际泛化能力反而变差。5.3 GUI 端模型加载慢、界面卡死和路径含中文现象启动界面后点击检测按钮窗口转圈转了几秒然后 macOS 弹窗提示“未响应”或者模型在本地 Python 脚本里跑得好好的换到 Qt 界面程序里就报找不到标签文件。原因模型加载和推理都在主线程执行的经典问题。YOLOv8 在 CPU 上加载 n 模型约需 12 秒首次推理还要做前处理预热时间翻倍如果加载的是 s 或 m 模型光加载权重就可能需要 5 秒以上。另一个坑是 Windows 下路径含中文字符ultralytics 底层调用 OpenCV 读取文件时有些版本对非 ASCII 路径处理不完善图片和标签要么读不到要么乱码。此外权重文件放在带中文的目录下也可能触发问题。解决首先把推理线程独立出来确认模型加载和预测都在 QThread 的 run 方法里Signal 只传结果数据不要让界面等待推理阻塞。其次Qt 文件选择对话框里主动限制默认路径或者选完文件后做一次路径检查和转码必要时把文件复制到英文目录下再推理。第三为避免反复加载模型拖慢界面响应模型在启动时就加载到内存中只加载一次后续推理复用同一个 model 实例。5.4 推理端置信度阈值不是越高越好现象把 UI 里的置信度阈值拽到 0.7检测结果干净了但现场实际有缺陷的钢板没报出来。原因表面缺陷的对比度普遍偏低边缘模糊的裂纹在模型中输出的置信度往往只有 0.30.5远低于一个清晰的划痕框0.8。把阈值调高等于人为过滤掉了模型认为“大概率是缺陷”但把握不足的框这在质检场景里是致命的。解决先用默认 0.25 在验证集上跑一轮画出 precision-recall 曲线找到一个平衡点。如果现场允许人工复检阈值设低一点如果全自动判定阈值设 0.30.4 并接受一定的误检率。关键是不要用“界面上数字看起来美观”来选阈值要用验证集的统计结果来选。5.5 结果端输出缺陷列表但算不出缺陷面积和长度现象界面表格里能显示每个缺陷框的位置和类别但现场工艺工程师追问“这个缺陷面积多大、裂纹多长”时答不上来。原因YOLOv8 是目标检测网络输出的是矩形边界框不是缺陷的实例分割掩码所以拿边界框面积估算缺陷面积会有误差尤其裂纹这种细长形缺陷框的面积远大于实际缺陷面积。解决在界面中提示结果仅为缺陷位置与类别面积为边界框面积不替代真实缺陷面积。如果需要精确面积和长度就要把方案升级成 YOLOv8-seg 实例分割模型用掩码计算真实像素面积和最小外接矩形的长宽。对于大多数质检判定来说位置和类别已经足够完成“有无缺陷、属于哪类”的分流但交付前一定要说清检测能力边界避免验收时会扯皮。6. 让 GUI 真正可交付批量推理、结果导出与部署优化界面能跑单张图片基本算“能用”但要真正交付给现场还需要补最后三件套批量推理不卡、结果导出成报表、推理速度匹配生产节拍。批量推理的 UI 逻辑是点“选择文件夹”后用 QThread 遍历目录下的所有图片逐个推理进度条更新结果汇总到 QTableWidget。这里要注意一次性读入所有图片路径列表每处理一帧信号发射一次进度不要让 UI 等全部跑完才刷新。推理速度优化有两个方向一是把模型导出成 ONNX 并用 ONNX Runtime 推理在 CPU 上通常能比原生 PyTorch 快 1.52 倍二是 GPU 设备优先用model.to(cuda)推理过程基本能做到实时。以下是导出 ONNX 的命令# 导出 ONNX 和 FP16 半精度模式 yolo export modelbest.pt formatonnx dynamicFalse simplifyTrue python -c from ultralytics import YOLO; YOLO(best.pt).export(formatonnx, halfTrue)导出 ONNX 后 GUI 推理代码把YOLO换成YOLO(best.onnx)即可API 一致但推理后端变成了 ONNX Runtime。注意dynamicFalse固定输入尺寸如果你在界面上支持了任意尺寸图片缩放且不打算重新 resize 输入就需要改成dynamicTrue。结果导出我建议直接输出 CSV用 Python 标准库的 csv 模块写字段包括文件名、缺陷类别、置信度、x1、y1、x2、y2。现场人员可以用 Excel 直接打开筛选统计各缺陷类别出现频率。用于归档的更完整方案是把带框图片统一保存到一个 labeled 输出目录文件名后缀_detected方便追溯。做过两次钢材缺陷项目的现场交付后我最大的教训是检测模型的质量占七成但界面和交付细节决定这个系统有没有人真的用起来。一个卡死频繁、路径不支持中文、结果导不出的 GUI模型 mAP 再高也会被一线操作员吐槽到弃用。把模型权重训练好只是第一步把这些没人写进论文里的工程细节磨平才是这套方案真正落地的那道坎。希望这篇笔记能帮你少走几步弯路祝顺利。本文还有配套的精品资源点击获取

相关新闻

红外微小目标检测实战:YOLOv5权重、数据集训练与PyQt部署全流程

红外微小目标检测实战:YOLOv5权重、数据集训练与PyQt部署全流程

简介:面向红外场景下的低空微小目标检测任务,该压缩包提供训练好的YOLOv5模型权重及4000余张红外数据集,覆盖无人机、直升机、飞机、飞鸟四类目标,适合无人机反制、低空安防、遥感图像分析等方向的开发者和课程项目实践者。数据集…

2026/10/11 0:56:08 阅读更多 →
LOL英雄联盟目标检测数据集实战:YOLOv8训练与避坑指南

LOL英雄联盟目标检测数据集实战:YOLOv8训练与避坑指南

简介:一份面向LOL英雄联盟角色检测任务的高质量标注数据集资源,素材规模约3000张游戏截图,覆盖队友小兵、己方小兵、敌方小兵、防御塔、LUX、VAYNE 6个类别,标注框总数达24665个。资源包共2000个文件,核心为1999个Pasc…

2026/10/11 0:56:08 阅读更多 →
TensorRT部署YOLO实例分割与目标检测:从PyTorch到C++/Python跨平台实战

TensorRT部署YOLO实例分割与目标检测:从PyTorch到C++/Python跨平台实战

简介:这是一套基于 TensorRT 与 YOLO 算法深度整合的工程化部署资源,面向需要将目标检测与实例分割能力落地到实际项目中的开发者、算法研究人员及企业技术团队。资源同时提供 C 与 Python 两套实现路径,并兼容 Linux 与 Windows 双平台&…

2026/10/11 0:56:08 阅读更多 →

最新新闻

主动悬架真正难的并不是算法

主动悬架真正难的并不是算法

前言 做主动悬架时间久了,有一个很深的感受: 主动悬架真正难的,往往不是算法。 刚开始接触这个领域时,很容易把注意力集中在控制算法上。Skyhook、LQR、H∞、MPC,甚至更复杂的预测控制和整车协同控制,看起来…

2026/10/11 1:50:41 阅读更多 →
translators_CN-zotero:Zotero中文元数据本地化中间件

translators_CN-zotero:Zotero中文元数据本地化中间件

简介:本资源是专为中文文献管理优化的Zotero插件包translators_CN,面向高校师生、科研人员及需高频使用CNKI数据库的学术工作者,解决Zotero原生识别器对CNKI题录解析失败、字段缺失等核心痛点。压缩包共31个文件,以21个JavaScript…

2026/10/11 1:50:41 阅读更多 →
Rocky linux9安装Jenkins最新版本2.585

Rocky linux9安装Jenkins最新版本2.585

目录 前言: 一、安装步骤 1.下载jenkins yum源 2.执行yum源更新 3.安装jenkins所依赖的jdk 4.安装jenkins软件包 5.加载服务 二、启动jenkins 1.设置开机启动 2.启动jenkins服务,并查看其状态 3.打开首页 三、插件安装 1.调用可用插件菜单 …

2026/10/11 1:50:41 阅读更多 →
编译期常量查找表(LUT)的极致生成:constexpr 物理数学模拟器实战

编译期常量查找表(LUT)的极致生成:constexpr 物理数学模拟器实战

在数字信号处理(DSP)、实时物理仿真以及大语言模型非线性激活函数(如 GELU、Swish、Sigmoid、Softplus)的高频计算中,浮点超越函数(Transcendental Functions,如 $\exp$、$\sin$、$\text{erf}$&…

2026/10/11 1:50:41 阅读更多 →
字段级数据血缘追踪:从源头 Kafka Topic 到终端报表的全链路图谱

字段级数据血缘追踪:从源头 Kafka Topic 到终端报表的全链路图谱

在大数据团队里,最让人心惊肉跳的场景莫过于此:数仓工程师小李在 ODS 层清理了一个自认为没人用的冷门字段,十分钟后,CEO 手机上的高管核心看盘看板赫然出现整片空白,报警电话瞬间打爆整个组。 当事后复盘时&#xff0…

2026/10/11 1:50:41 阅读更多 →
做了10年计划排产,最后靠这三张表把排产管住了!

做了10年计划排产,最后靠这三张表把排产管住了!

很多计划员最怕的,不是订单多,而是计划永远赶不上变化。早上刚排好的计划,中午销售插单;下午采购说关键料没到;车间临时停机;老板又追着问订单为什么还没交。计划员只能不停改表、调设备、挪订单、发通知。…

2026/10/11 1:49:40 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →