新闻详情

新闻详情

首页 / 资讯中心 / 详情

工业质检小样本实战:YOLO模型训练与数据增强全流程解析

发布时间:2026/9/3 11:45:27来源:尧图网络
工业质检小样本实战:YOLO模型训练与数据增强全流程解析
简介本资源是一个面向计算机视觉初学者与工业质检算法开发者的小型香烟缺陷检测专用数据集聚焦于空头kongtou与异物yiwu两类典型缺陷的定位识别任务适用于YOLO系列、Faster R-CNN等目标检测模型的训练与验证。压缩包共593个文件包含197张高质量JPG图像、197份Pascal VOC格式XML标注文件含精确矩形框坐标与类别标签及197份对应YOLO格式TXT文件归一化坐标全部由labelImg规范标注无分割路径冗余信息结构简洁易接入主流训练框架。资源大小为150.3MB目录组织清晰支持开箱即用。目前已有350人学习下载配套双格式标注显著降低数据预处理门槛特别适合快速搭建缺陷检测baseline、开展小样本实验或作为课程设计/毕业设计的数据基础。1. 项目概述一个专为工业质检打造的“小样本”数据集最近在整理硬盘里的老项目翻出来一个挺有意思的数据集——“香烟缺陷检测数据集VOCYOLO格式197张2类别.zip”。别看它只有197张图片在动辄数万张的公开数据集面前显得有点“寒酸”但对于想快速上手工业缺陷检测特别是想验证YOLO模型在具体小场景下表现的朋友来说这绝对是个宝藏。这个数据集的核心价值在于它的“针对性”和“即用性”。它瞄准的是香烟包装这个非常具体的工业质检环节。在卷烟生产线上包装缺陷如玻璃纸破损、封口不严、印刷错位等的检测是保证产品出厂质量的关键。传统人工目检不仅效率低而且容易因疲劳产生漏检。基于深度学习的视觉检测方案正是为了解决这个问题。这个数据集已经贴心地将197张现场采集的香烟图像标注成了可以直接喂给YOLO模型训练的格式包含了“正常good”和“缺陷defect”两个类别。你不需要再花时间去网上爬虫、清洗、标注解压后就能直接开练。对于初学者这是一个绝佳的“麻雀虽小五脏俱全”的练手项目。你可以完整地走一遍目标检测的流程数据准备、环境搭建、模型训练、评估验证。对于有经验的从业者这个小样本数据集是进行算法快速原型验证、尝试模型轻量化、或者研究小样本学习、数据增强策略的绝佳试验田。毕竟在实际工业落地中初期往往就是只有几百张标注好的样本如何利用好它们是第一个要面对的挑战。2. 数据集深度解析从文件结构到标注细节拿到一个数据集第一步不是急着跑代码而是先把它彻底“拆开”看明白。这个香烟缺陷数据集的目录结构是标准的VOC格式与YOLO格式的混合体这种组织方式在实践中非常常见兼顾了通用性和训练便捷性。2.1 文件目录结构剖析解压后你通常会看到类似如下的核心文件夹香烟缺陷检测数据集/ ├── Annotations/ # VOC格式的XML标注文件197个 ├── JPEGImages/ # 原始的图像文件197张 ├── ImageSets/ │ └── Main/ # 存放训练集、验证集、测试集划分的文本文件 └── labels/ # YOLO格式的TXT标注文件由Annotations转换而来这里的关键在于理解两种标注格式的共存Annotations/与JPEGImages/这是PASCAL VOC数据集的经典结构。每一个.jpg图像在Annotations/下都有一个同名的.xml文件。XML文件里以结构化的方式存储了图片尺寸、每个目标物体的类别名称以及其边界框Bounding Box的坐标通常是左上角和右下角的xmin, ymin, xmax, ymax。这种格式可读性好被许多标注工具如LabelImg默认支持。labels/这是YOLO模型训练直接需要的格式。每个TXT文件与图像同名其中每一行代表图像中的一个目标格式为[class_id] [x_center] [y_center] [width] [height]。这里的坐标是归一化后的即除以图片宽高数值在0到1之间。class_id是类别的索引比如0代表“defect”1代表“good”。注意很多开源数据集只提供一种格式。这个数据集同时提供两种非常友好。但你需要确保labels/下的TXT文件确实是由Annotations/转换而来且类别ID映射正确。一个简单的检查方法是用脚本读取一个XML文件计算其归一化后的中心坐标和宽高再与对应TXT文件的第一行数据进行比对。2.2 数据内容与标注质量评估在开始训练前花半小时对数据本身做一个“体检”至关重要。这能帮你提前发现潜在问题避免模型训练走上歧路。样本数量与类别分布197张图2个类别。你需要立刻用脚本统计一下每个类别的实例数。一个典型的结果可能是“defect”框有150个“good”框有300个。这立刻暴露了一个问题类别不平衡。“正常”样本的数量远多于“缺陷”样本。在训练时模型可能会倾向于将多数类预测得更好而对少数类缺陷的检测能力变弱。这是小样本缺陷检测的常态也是你后续需要重点处理的例如通过数据增强重点增强缺陷样本或在损失函数中引入类别权重。缺陷类型可视化随机打开几十张带有“defect”标注的图片观察缺陷的具体形态。香烟包装的缺陷可能包括玻璃纸褶皱/破损局部纹理异常边缘不规则。封口翘边/开裂在包装边缘出现的小范围结构异常。印刷污渍/漏印颜色或图案与周围区域不一致。包装整体歪斜目标物体的角度发生偏移。 了解这些具体形态有助于你后续设计或选择更合适的模型架构和数据增强策略。例如对于纹理异常可以加强颜色抖动和模糊增强对于边缘缺陷可以尝试Cutout或随机擦除增强。标注框质量抽查检查标注框是否紧密贴合目标物体有无明显过大或过小的情况有无漏标特别是那些不明显的缺陷。YOLO模型的学习非常依赖于标注框的质量一个粗糙的框会教给模型错误的位置信息。图像背景与环境观察图片的背景是否一致比如都是同一条产线的传送带光照条件是否稳定。这关系到模型的泛化能力。如果背景单一那么模型可能学到的更多是背景特征而非目标特征一旦换到新环境可能效果骤降。这就需要你在数据增强时考虑加入随机背景、亮度对比度剧烈变化等模拟复杂环境的手段。3. 从VOC到YOLO数据准备与增强实战有了对数据的深刻理解我们就可以开始为训练做准备了。核心工作有两块格式转换与数据划分、以及针对性的数据增强。3.1 格式转换与数据集划分脚本编写虽然数据集提供了YOLO格式的labels/但理解转换过程能让你应对更多自定义数据。同时一个合理的训练集train、验证集val、测试集test划分是评估模型真实性能的基础。这里提供一个Python脚本的核心逻辑你可以保存为prepare_data.pyimport os import xml.etree.ElementTree as ET import random import shutil def convert_annotation(voc_img_dir, voc_anno_dir, output_label_dir, class_list): 将VOC格式的XML标注转换为YOLO格式的TXT文件。 if not os.path.exists(output_label_dir): os.makedirs(output_label_dir) for anno_file in os.listdir(voc_anno_dir): if not anno_file.endswith(.xml): continue tree ET.parse(os.path.join(voc_anno_dir, anno_file)) root tree.getroot() # 获取图片尺寸 size root.find(size) img_w int(size.find(width).text) img_h int(size.find(height).text) txt_lines [] for obj in root.iter(object): cls_name obj.find(name).text if cls_name not in class_list: continue cls_id class_list.index(cls_name) xmlbox obj.find(bndbox) x1 float(xmlbox.find(xmin).text) y1 float(xmlbox.find(ymin).text) x2 float(xmlbox.find(xmax).text) y2 float(xmlbox.find(ymax).text) # 转换为YOLO格式归一化中心坐标和宽高 x_center (x1 x2) / 2.0 / img_w y_center (y1 y2) / 2.0 / img_h width (x2 - x1) / img_w height (y2 - y1) / img_h # 确保坐标在0-1之间防止标注错误导致越界 x_center max(0, min(1, x_center)) y_center max(0, min(1, y_center)) width max(0, min(1, width)) height max(0, min(1, height)) txt_lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}) # 写入TXT文件 txt_filename os.path.splitext(anno_file)[0] .txt with open(os.path.join(output_label_dir, txt_filename), w) as f: f.write(\n.join(txt_lines)) def split_dataset(image_dir, label_dir, output_dir, train_ratio0.7, val_ratio0.2, test_ratio0.1): 划分数据集并生成YOLO训练所需的.txt索引文件。 all_images [f for f in os.listdir(image_dir) if f.endswith((.jpg, .png, .jpeg))] random.shuffle(all_images) # 随机打乱 total len(all_images) train_num int(total * train_ratio) val_num int(total * val_ratio) train_list all_images[:train_num] val_list all_images[train_num:train_num val_num] test_list all_images[train_num val_num:] sets {train: train_list, val: val_list, test: test_list} for set_name, img_list in sets.items(): # 创建存放图片和标签的符号链接或副本这里以生成路径文件为例 list_file_path os.path.join(output_dir, f{set_name}.txt) with open(list_file_path, w) as f: for img_name in img_list: # 写入图片的绝对路径或相对路径根据你的训练环境调整 img_path os.path.abspath(os.path.join(image_dir, img_name)) f.write(img_path \n) print(f{set_name} set: {len(img_list)} images) # 创建data.yaml配置文件YOLOv5/v8等需要 yaml_content f path: {os.path.abspath(output_dir)} # 数据集根目录 train: train.txt # 训练集索引文件相对于path的路径 val: val.txt # 验证集索引文件 test: test.txt # 测试集索引文件可选 # 类别信息 names: 0: defect 1: good with open(os.path.join(output_dir, data.yaml), w) as f: f.write(yaml_content) print(data.yaml配置文件已生成。) # 使用示例 if __name__ __main__: # 定义你的路径和类别 VOC_IMG_DIR ./香烟缺陷检测数据集/JPEGImages VOC_ANNO_DIR ./香烟缺陷检测数据集/Annotations YOLO_LABEL_DIR ./香烟缺陷检测数据集/labels_yolo # 可以新建一个或覆盖原labels OUTPUT_SPLIT_DIR ./datasets/cigarette CLASSES [defect, good] # 类别顺序必须与data.yaml中的names对应 # 执行转换 convert_annotation(VOC_IMG_DIR, VOC_ANNO_DIR, YOLO_LABEL_DIR, CLASSES) # 执行划分 (假设图片和转换后的标签文件已经按相同文件名对应好) # 注意这里需要将图片和标签文件组织成YOLO要求的格式即images/train/, labels/train/等 # 更完整的组织脚本略核心是生成索引文件。实操心得对于197张的小数据集划分比例可以更激进一些。例如采用150张训练25张验证22张测试。确保测试集完全“未见”用于最终评估。验证集用于训练过程中的超参数调整和早停Early Stopping。3.2 针对小样本缺陷检测的数据增强策略数据增强是解决小样本问题的“银弹”。但增强不是乱增强必须贴合缺陷本身的特性。基础增强在YOLO的训练配置中通常内置Mosaic将四张图片拼成一张。极大地丰富了背景并让模型学习在不同尺度下检测目标。对于小数据集效果提升显著。MixUp将两张图像线性混合。能起到正则化作用减轻模型过拟合。随机仿射变换旋转、缩放、平移、剪切模拟摄像头角度微小变化或物体摆放位置的变化。针对香烟包装缺陷的增强技巧针对“缺陷”类别的过采样在加载数据时如果随机到的图片中没有“缺陷”框可以以一定概率重新采样直到抽到包含缺陷的图片。这样可以增加缺陷样本在训练中的曝光度。颜色与亮度扰动模拟生产线光照变化。可以适当加大hsv_h色相、hsv_s饱和度、hsv_v明度的扰动幅度让模型不依赖于特定的颜色和亮度来判断缺陷。模糊与噪声添加高斯模糊、运动模糊或高斯噪声模拟摄像头对焦不准或传输过程中的图像质量下降。这对于检测纹理类缺陷如褶皱尤为重要能提升模型的鲁棒性。Cutout或Random Erasing随机擦除图像中的一小块矩形区域。这可以强迫模型不只依赖最明显的局部特征而去关注目标的整体上下文信息防止模型因为某个固定位置的特征而做出判断。Copy-Paste增强进阶从其他缺陷图片中截取缺陷区域粘贴到正常图片上同时生成新的标注框。这是小样本缺陷检测的“大杀器”能极大地增加缺陷样本的多样性。但需要注意边缘融合的自然度以及粘贴后与背景的合理性。在YOLOv8的配置文件中如args.yaml或data.yaml你可以调整这些增强参数# 示例增强参数 (在YOLO的训练命令中通过--augment或配置字典传递) augmentations: hsv_h: 0.015 # 色相增强幅度 hsv_s: 0.7 # 饱和度增强幅度可以调高 hsv_v: 0.4 # 明度增强幅度可以调高 degrees: 10.0 # 旋转角度 translate: 0.2 # 平移比例 scale: 0.9 # 缩放比例 shear: 2.0 # 剪切幅度 perspective: 0.001 # 透视变换 flipud: 0.0 # 上下翻转概率根据实际情况香烟通常不会上下颠倒 fliplr: 0.5 # 左右翻转概率 mosaic: 1.0 # Mosaic增强概率训练初期可以设为1.0 mixup: 0.2 # MixUp增强概率 copy_paste: 0.3 # Copy-Paste增强概率如果实现4. 模型选择、训练与调优实战数据准备好了接下来就是选择模型和训练。对于197张图片我们的核心目标是防止过拟合追求轻量化与速度同时保证足够的精度。4.1 模型选型与训练配置模型选择YOLOv8nNano或YOLOv8sSmall是首选。它们的参数量少速度快在这样的小数据集上不容易过拟合。YOLOv5s也是一个成熟稳定的选择。切忌一上来就用YOLOv8x或YOLOv9这类大型模型它们参数过多会迅速记住你这197张图片的所有细节包括噪声导致在验证集和测试集上表现很差。训练命令示例以YOLOv8为例# 安装ultralytics pip install ultralytics # 使用YOLOv8n模型从零开始训练 yolo taskdetect modetrain modelyolov8n.pt data./datasets/cigarette/data.yaml epochs150 imgsz640 batch16 patience30 # 使用预训练权重推荐能加速收敛 yolo taskdetect modetrain modelyolov8n.pt data./datasets/cigarette/data.yaml epochs150 imgsz640 batch16 patience30 pretrainedTrue # 更详细的参数配置 yolo taskdetect modetrain \ modelyolov8n.pt \ data./datasets/cigarette/data.yaml \ epochs200 \ imgsz640 \ batch16 \ workers4 \ patience50 \ # 早停耐心值50个epoch验证指标没提升就停止 lr00.01 \ # 初始学习率 lrf0.01 \ # 最终学习率因子 (lr0 * lrf) momentum0.937 \ weight_decay0.0005 \ warmup_epochs3.0 \ warmup_momentum0.8 \ box7.5 \ # 框损失权重 cls0.5 \ # 分类损失权重对于二分类可以适当调低 dfl1.5 \ # DFL损失权重 augmentTrue \ # 启用增强 hsv_h0.015 \ hsv_s0.7 \ hsv_v0.4 \ degrees10.0 \ translate0.2 \ scale0.9 \ shear2.0 \ perspective0.001 \ fliplr0.5 \ mosaic1.0 \ mixup0.2关键参数解读与调优建议epochs小数据集容易过拟合但训练不足也会欠拟合。建议从150-200开始配合patience早停使用。如果验证损失在50个epoch内不再下降训练会自动停止并保存最佳模型。imgsz图像输入尺寸。640是平衡速度和精度的常用尺寸。如果缺陷非常细小可以尝试增大到800或1024但会显著增加显存消耗和训练时间。batch批大小。根据你的GPU显存调整。在显存允许的情况下较大的batch如16、32有助于训练稳定。如果出现OOM显存不足减小batch同时可以适当增大workers数据加载进程数来加速数据读取。lr0初始学习率这是最重要的超参数之一。对于小数据集学习率不宜过大否则损失会震荡甚至发散。从0.01开始是安全的。如果使用预训练权重甚至可以更小如0.001。cls分类损失权重我们的任务是二分类缺陷/正常。分类任务相对简单可以适当降低分类损失的权重从默认的0.5降到0.3或0.2让模型更专注于框位置的回归box损失和分布焦点dfl损失。augment和相关增强参数如前所述这是小样本训练的生命线。可以大胆尝试调整hsv_s、hsv_v、degrees、mosaic等参数观察验证集指标的变化。4.2 训练过程监控与评估指标解读训练开始后不要干等。Ultralytics会启动一个本地Web服务器默认http://localhost:port展示实时训练曲线。必须重点关注的指标损失曲线Loss Curvestrain/box_loss,train/cls_loss,train/dfl_loss训练损失。理想情况是平滑下降。val/box_loss,val/cls_loss,val/dfl_loss验证损失。这是判断过拟合的关键。如果训练损失持续下降但验证损失在某个点后开始上升或持平这就是典型的过拟合信号。此时需要立即停止训练早停会帮你做并考虑加强正则化如增加Dropout层权重、加大权重衰减weight_decay、或增加数据增强的强度。性能指标Metricsmetrics/mAP50-95(mAP0.5:0.95)这是核心评估指标。在IoU阈值从0.5到0.95步长0.05的平均精度均值。值越高越好对于工业检测能达到0.6以上就算不错0.7以上很好。metrics/mAP50(mAP0.5)IoU阈值为0.5时的平均精度。这个指标更宽松通常值会高很多。metrics/precision和metrics/recall精确率和召回率。需要根据业务需求权衡。在香烟缺陷检测中我们通常追求高召回率Recall即宁可错杀不可放过因为漏检一个缺陷产品流入市场的代价很高。在保证一定召回率的基础上再优化精确率。模型评估与测试 训练结束后使用最佳模型保存在runs/train/exp/weights/best.pt在测试集上进行最终评估yolo taskdetect modeval model./runs/train/exp/weights/best.pt data./datasets/cigarette/data.yaml splittest查看输出的混淆矩阵、PR曲线等分析模型在“defect”和“good”两个类别上的具体表现。特别是混淆矩阵能清晰看出模型把多少缺陷误判为正常这是最危险的错误。5. 部署推理与工程化思考模型训练好了精度也达标了接下来就是把它用起来。这里涉及模型导出和简单的推理脚本。5.1 模型导出为部署格式YOLOv8训练出的.pt文件是PyTorch格式适用于Python环境。为了部署到其他平台如C、移动端、边缘设备需要导出。# 导出为ONNX格式通用性强支持多种推理引擎 yolo export model./runs/train/exp/weights/best.pt formatonnx imgsz640 # 导出为TensorRT格式NVIDIA GPU上极致性能 yolo export model./runs/train/exp/weights/best.pt formatengine device0 imgsz640 # 导出为OpenVINO格式Intel CPU/GPU上优化 yolo export model./runs/train/exp/weights/best.pt formatopenvino imgsz6405.2 编写推理脚本与结果可视化一个基本的Python推理脚本如下from ultralytics import YOLO import cv2 import os def infer_on_images(model_path, source_dir, output_dir, conf_threshold0.25): 对目录下的所有图片进行推理并保存结果。 # 加载训练好的模型 model YOLO(model_path) if not os.path.exists(output_dir): os.makedirs(output_dir) for img_name in os.listdir(source_dir): if not img_name.lower().endswith((.png, .jpg, .jpeg)): continue img_path os.path.join(source_dir, img_name) # 进行推理 results model(img_path, confconf_threshold) # conf为置信度阈值 # 获取带标注的结果图像 annotated_frame results[0].plot() # 自动绘制框和标签 # 保存结果 output_path os.path.join(output_dir, img_name) cv2.imwrite(output_path, annotated_frame) print(fProcessed: {img_name}) # 打印检测信息 for box in results[0].boxes: cls_id int(box.cls) conf float(box.conf) xyxy box.xyxy[0].tolist() print(f Class: {model.names[cls_id]}, Conf: {conf:.2f}, Box: {xyxy}) # 使用示例 if __name__ __main__: best_model ./runs/train/exp/weights/best.pt test_images_dir ./datasets/cigarette/images/test # 你的测试图片路径 output_result_dir ./inference_results infer_on_images(best_model, test_images_dir, output_result_dir, conf_threshold0.3) # 阈值可以调高以减少误报工程化考量置信度阈值conf_threshold调优这是平衡误检False Positive和漏检False Negative的关键杠杆。在测试集上通过绘制不同置信度阈值下的精确率-召回率曲线PR Curve选择一个能满足业务召回率要求例如Recall 0.95的最高置信度阈值。非极大值抑制NMS参数iou_threshold控制重叠框的合并程度。默认0.45通常够用。如果同一个缺陷被重复检测出多个框可以适当降低这个值如0.3。性能优化对于实时检测需要关注每秒帧数FPS。使用TensorRT或OpenVINO等加速引擎并调整imgsz到更小的尺寸如416可以大幅提升推理速度。错误分析仔细查看模型在测试集上漏检和误检的案例。是缺陷太小光照条件与训练集差异太大还是缺陷形态过于罕见这些分析是迭代改进数据集和模型的关键输入。可能需要针对性地补充一些困难样本Hard Samples到训练集中。6. 常见问题排查与避坑指南在小样本缺陷检测项目中以下几个坑几乎每个人都会遇到问题1训练很快但验证集mAP始终很低例如低于0.3。可能原因1数据划分错误。训练集和验证集的数据分布不一致例如训练集全是A产线的图验证集全是B产线的图。确保数据划分是随机打乱的。可能原因2标注错误或类别ID不匹配。检查data.yaml中的names顺序是否与标注文件中的class_id对应。用脚本可视化一些训练样本的标注框看是否正确。可能原因3学习率过大。小数据集上大学习率容易导致优化“过冲”无法收敛到好的位置。尝试将lr0降低一个数量级如从0.01降到0.001。排查命令使用yolo val仔细检查验证集上的具体预测结果看模型到底预测出了什么。问题2训练损失正常下降验证损失却剧烈震荡。可能原因批大小Batch Size太小。当Batch Size很小时梯度估计的噪声很大导致验证损失不稳定。在显存允许的情况下尽量增大batch。如果无法增大可以尝试使用梯度累积Gradient Accumulation来模拟大Batch的效果YOLO训练命令中通常有相关参数。问题3模型对“缺陷”的召回率Recall很低很多缺陷检不出来。可能原因1缺陷样本太少类别严重不平衡。解决方案使用前文提到的“缺陷类别过采样”大幅增加针对缺陷样本的数据增强如Copy-Paste在损失函数中为“缺陷”类别设置更高的权重YOLOv8中可以通过修改cls_loss的类别权重实现需要修改源码。可能原因2缺陷目标太小。在640x640的输入下有些微小缺陷可能只有几个像素。尝试增大imgsz如到800或1024或者在模型结构中使用更浅层、更高分辨率的特征图进行检测如修改YOLO的检测头配置这属于模型微调范畴。可能原因3置信度阈值设得太高。降低conf_threshold让模型输出更多预测框虽然会增加误检但可以先保证召回率。问题4训练后期验证集指标不再提升甚至下降。标准操作启用早停Patience。设置patience30或50让训练在指标停滞时自动停止并保存最佳模型。这是防止过拟合最简单有效的方法。进阶操作检查学习率调度。可以尝试使用余弦退火Cosine Annealing等更复杂的学习率策略帮助模型跳出局部最优。问题5导出的ONNX或TensorRT模型推理结果与PyTorch模型不一致。可能原因导出时操作不一致。确保导出命令中的imgsz、batch等参数与训练/推理时一致。对于TensorRT还要确保导出和推理时的精度FP32/FP16/INT8一致。标准流程导出后务必用同一张图片分别用PyTorch模型和导出模型进行推理逐像素比对输出结果如检测框的坐标和置信度确保误差在可接受范围内通常浮点数误差在1e-5级别。这个香烟缺陷检测数据集虽然不大但它像一面镜子映照出工业视觉项目从数据准备到模型部署的全流程中会遇到的核心挑战和解决方案。处理它的过程远比跑通一个在COCO数据集上预训练好的模型更有价值。每一次调整参数、分析错误、尝试新的增强方法都是对实际问题解决能力的一次锤炼。当你把这个小数据集玩透了面对更大、更复杂的真实项目时你手里握着的就不是几行代码而是一套完整的方法论和解决问题的直觉。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

数据的运算:C运算符与类型转换 2026/9/3 17:02:00

数据的运算:C运算符与类型转换

C运算符与类型转换 写在前面:本文承接《数据的表现形式》,继续整理C语言中“数据如何参与运算”这一部分内容。文章从初学阶段最常见的运算符出发,说明它们的基本用法、优先级、结合性以及混合运算中的类型转换。部分较复杂、暂不影响后续学…

阅读更多 →
火山方舟 Coding Plan 模型与计费说明 2026/9/3 17:02:00

火山方舟 Coding Plan 模型与计费说明

说明:以下价格为官方公开信息整理,最终以火山引擎控制台实时价格为准 一、当前可用模型(本机 opencode 配置) 当前模型:doubao-seed-2.1-turbo(Coding Plan Pro) 配置文件:~/.conf…

阅读更多 →
基于SpringBoot的崂山绿茶产地直供电商平台的设计与实现毕业设计项目源码 2026/9/3 17:02:00

基于SpringBoot的崂山绿茶产地直供电商平台的设计与实现毕业设计项目源码

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

阅读更多 →
超厉害!{fmt}开源格式化库快速安全性能优,众多知名项目都在用! 2026/9/3 17:02:00

超厉害!{fmt}开源格式化库快速安全性能优,众多知名项目都在用!

{fmt}开源格式化库:快速安全,性能卓越,众多知名项目都在用!{fmt} 是一个开源的格式化库,为 C 语言的 stdio 和 C 的 iostreams 提供了一种快速且安全的替代方案。文档与问答可在 StackOverflow 上使用标签 fmt 提问&am…

阅读更多 →
HTTPS一键升级脚本实战:从原理到验证的完整指南 2026/9/3 17:02:00

HTTPS一键升级脚本实战:从原理到验证的完整指南

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

阅读更多 →
SAP UI5 有没有 Angular Constructor 依赖注入,真正接近它的并不是 sap.ui.define 2026/9/3 16:58:58

SAP UI5 有没有 Angular Constructor 依赖注入,真正接近它的并不是 sap.ui.define

在一个典型的 SAPUI5 项目里打开 App.controller.js,很容易看到这样的结构,Controller 依赖 sap/ui/core/mvc/Controller、sap/m/MessageToast、sap/ui/model/Filter,这些模块写进 sap.ui.define 的依赖数组,UI5 Loader 加载完成后,又按照顺序把 Controller、MessageToast…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞