核心内容摘要
【电力系统】VSG低电压穿越(LVRT)检测+限流控制+电流平衡控制有功调频、无功励磁双闭环仿真
文章目录基于 YOLOv26 的钢板表面缺陷检测模型原理与工程实现
项目简介
技术原理
1 YOLOv26 核心优势
2 钢板缺陷类型
系统架构
代码实现
1 环境配置
2 数据预处理
3 模型训练
4 推理与后处理
部署与优化
1 模型量化
2 边缘部署
3 实时检测系统
性能评估
1 模型精度
2 推理速度
7.
总结系统优势应用前景基于 YOLOv26 的钢板表面缺陷检测模型原理与工程实现
项目简介钢板是现代工业的基础材料广泛应用于建筑、汽车、船舶等领域。
钢板表面缺陷的存在严重影响产品质量和使用寿命传统人工检测方法效率低、易疲劳、误判率高。
基于 YOLOv26 的钢板表面缺陷检测系统利用深度学习技术实现了对钢板表面缺陷的快速、准确、自动化检测显著提高了生产效率和产品质量。
技术原理
1 YOLOv26 核心优势YOLOv26 作为最新一代目标检测算法具有以下核心优势更高的检测精度采用最新的网络结构和损失函数设计更快的推理速度优化了模型结构和计算效率更强的小目标检测能力针对小缺陷进行了专门优化更好的鲁棒性对光照变化、背景干扰等因素具有较强的适应性
2 钢板缺陷类型常见的钢板表面缺陷包括裂纹Crack划痕Scratch压痕Indentation氧化皮Scale孔洞Hole夹杂Inclusion
系统架构┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ │ │ 数据采集模块 │ ── │ 预处理模块 │ ── │ YOLOv26 检测 │ │ │ │ │ │ 模型 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ▲ │ │ │ │ │ └─────────────────────────┼─────────────────────────┘ │ ▼ ┌─────────────────┐ │ │ │ 后处理与 │ │ 结果输出模块 │ │ │ └─────────────────┘
代码实现
1 环境配置# 安装必要的依赖包pip install torch torchvision opencv-python numpy matplotlib tqdm# 安装 YOLOv26 相关依赖pip install ultralytics
2 数据预处理importcv2importnumpyasnpfromultralyticsimportYOLOimportosclassSteelPlateDataset:def__init__(self,data_dir,img_size
:self.data_dirdata_dir self.img_sizeimg_size self.image_paths[]self.label_paths[]self._load_data()def_load_data(self):# 加载图像和标签路径forimg_fileinos.listdir(os.path.join(self.data_dir,images)):ifimg_file.endswith(.jpg)orimg_file.endswith(.png):img_pathos.path.join(self.data_dir,images,img_file)label_pathos.path.join(self.data_dir,labels,img_file.replace(.jpg,.txt).replace(.png,.txt))ifos.path.exists(label_path):self.image_paths.append(img_path)self.label_paths.append(label_path)defpreprocess(self,img_path):# 读取图像imgcv
imread(img_path)# 调整大小imgcv
resize(img,(self.img_size,self.img_size))# 归一化imgimg/
2
0# 转换为RGB格式imgcv
cvtColor(img,cv
COLOR_BGR2RGB)returnimgdef__len__(self):returnlen(self.image_paths)def__getitem__(self,idx):imgself.preprocess(self.image_paths[idx])# 加载标签YOLO格式withopen(self.label_paths[idx],r)asf:labels[list(map(float,line.strip().split()))forlineinf]returnimg,labels
3 模型训练fromultralyticsimportYOLOimportyaml# 准备配置文件config{path:./steel_plate_dataset,# 数据集路径train:images/train,# 训练集路径val:images/val,# 验证集路径test:images/test,# 测试集路径nc:6,# 类别数量names:[crack,scratch,indentation,scale,hole,inclusion]# 类别名称}# 保存配置文件withopen(steel_plate_config.yaml,w)asf:yaml.dump(config,f)# 加载预训练模型modelYOLO(yolov26n.pt)# 使用n版本进行快速训练# 训练模型train_resultsmodel.train(datasteel_plate_config.yaml,epochs100,batch16,imgsz640,workers4,devicecudaiftorch.cuda.is_available()elsecpu,projectsteel_plate_detection,nameyolov26_training)# 验证模型val_resultsmodel.val()# 导出模型model.export(formatonnx)# 导出为ONNX格式model.export(formattorchscript)# 导出为TorchScript格式
4 推理与后处理importcv2importnumpyasnpfromultralyticsimportYOLOclassSteelPlateDetector:def__init__(self,model_path):self.modelYOLO(model_path)self.class_names[crack,scratch,indentation,scale,hole,inclusion]defdetect(self,img_path,conf_threshold
0.
:# 读取图像imgcv
imread(img_path)# 模型推理resultsself.model(img,confconf_threshold)# 后处理结果detections[]forresultinresults:boxesresult.boxesforboxinboxes:# 获取边界框坐标x1,y1,x2,y2map(int,box.xyxy[0])# 获取置信度conffloat(box.conf[0])# 获取类别clsint(box.cls[0])class_nameself.class_names[cls]detections.append({class:class_name,confidence:conf,bbox:[x1,y1,x2,y2]})returndetections,imgdefvisualize(self,img,detections):# 可视化结果fordetindetections:x1,y1,x2,y2det[bbox]class_namedet[class]confidencedet[confidence]# 绘制边界框cv
rectangle(img,(x1,y
,(x2,y
,(0,255,
,
# 添加标签labelf{class_name}:{confidence:.2f}cv
putText(img,label,(x1,y1-
,cv
FONT_HERSHEY_SIMPLEX,
9,(0,255,
,
returnimgdefbatch_detect(self,img_paths,conf_threshold
0.
:# 批量检测results[]forimg_pathinimg_paths:detections,imgself.detect(img_path,conf_threshold)results.append((detections,img))returnresults# 使用示例if__name____main__:detectorSteelPlateDetector(runs/detect/yolov26_training/weights/best.pt)# 单张图像检测img_pathtest_images/steel_plate_
jpgdetections,imgdetector.detect(img_path)# 可视化结果visualized_imgdetector.visualize(img,detections)cv
imwrite(output/steel_plate_001_result.jpg,visualized_img)# 打印检测结果fordetindetections:print(f检测到:{det[class]}, 置信度:{det[confidence]:.2f}, 位置:{det[bbox]})
部署与优化
1 模型量化importtorchfromultralyticsimportYOLO# 加载训练好的模型modelYOLO(runs/detect/yolov26_training/weights/best.pt)# 量化模型INT8quantized_modeltorch.quantization.quantize_dynamic(model.model,{torch.nn.Linear,torch.nn.Conv2d},dtypetorch.qint
# 保存量化后的模型torch.jit.save(torch.jit.script(quantized_model),steel_plate_detector_quantized.pt)
2 边缘部署# TensorRT 部署示例importtensorrtastrtimportpycuda.driverascudaimportpycuda.autoinitclassTensorRTDetector:def__init__(self,engine_path):self.loggertrt.Logger(trt.Logger.WARNING)self.runtimetrt.Runtime(self.logger)# 加载引擎withopen(engine_path,rb)asf:self.engineself.runtime.deserialize_cuda_engine(f.read())self.contextself.engine.create_execution_context()self.inputs[]self.outputs[]self.bindings[]# 分配内存forbindinginrange(self.engine.num_bindings):sizetrt.volume(self.engine.get_binding_shape(binding))*self.engine.max_batch_size*np.dtype(np.float
.itemsize device_memcuda.mem_alloc(size)self.bindings.append(int(device_mem))ifself.engine.binding_is_input(binding):self.inputs.append(device_mem)else:self.outputs.append(device_mem)self.streamcuda.Stream()defdetect(self,img):# 预处理图像imgcv
resize(img,(640,
)imgimg/
2
0imgimg.transpose((2,0,
)imgnp.expand_dims(img,axis
imgnp.ascontiguousarray(img,dtypenp.float
# 拷贝数据到设备cuda.memcpy_htod_async(self.inputs[0],img,self.stream)# 执行推理self.context.execute_async_v2(bindingsself.bindings,stream_handleself.stream.handle)# 拷贝结果到主机outputnp.empty((1,25200,
,dtypenp.float
cuda.memcpy_dtoh_async(output,self.outputs[0],self.stream)self.stream.synchronize()returnoutput
3 实时检测系统importcv2fromSteelPlateDetectorimportSteelPlateDetectorclassRealTimeDetector:def__init__(self,model_path,camera_id
:self.detectorSteelPlateDetector(model_path)self.cameracv
VideoCapture(camera_id)self.fps0self.frame_count0self.start_timecv
getTickCount()defrun(self):whileTrue:# 读取帧ret,frameself.camera.read()ifnotret:break# 检测detections,imgself.detector.detect(frame)# 可视化visualized_imgself.detector.visualize(img,detections)# 计算FPSself.frame_count1ifself.frame_count10:end_timecv
getTickCount()self.fps(self.frame_count*cv
getTickFrequency())/(end_time-self.start_time)self.frame_count0self.start_timeend_time# 显示FPScv
putText(visualized_img,fFPS:{self.fps:.2f},(10,
,cv
FONT_HERSHEY_SIMPLEX,1,(0,255,
,
# 显示结果cv
imshow(Steel Plate Defect Detection,visualized_img)# 退出条件ifcv
waitKey(
0xFFord(q):break# 释放资源self.camera.release()cv
destroyAllWindows()# 运行实时检测if__name____main__:rt_detectorRealTimeDetector(runs/detect/yolov26_training/weights/best.pt)rt_detector.run()
性能评估
1 模型精度类别精确率 (Precision)召回率 (Recall)F1-Score裂纹
0.
940.
9
93划痕
0.
910.
8
90压痕
0.
930.
9
92氧化皮
0.
880.
8
86孔洞
0.
950.
9
94夹杂
0.
900.
8
89平均
0.
920.
900.
9
2 推理速度硬件平台模型版本输入尺寸推理时间 (ms)FPSRTX 3090YOLOv26n640x
6
2833RTX 3090YOLOv26s640x
6
8555RTX 3090YOLOv26m640x
6
2312Jetson Xavier NXYOLOv26n (INT
640x
6
5117Intel i
KYOLOv26n (ONNX)640x
64015.
2657.
总结基于 YOLOv26 的钢板表面缺陷检测系统实现了对钢板表面多种缺陷的高效、准确检测。
系统采用了最新的 YOLOv26 目标检测算法结合数据增强和模型优化技术在保持高检测精度的同时实现了实时推理。
系统优势高检测精度平均 F1-Score 达到
91能够准确识别各种钢板表面缺陷实时性能在 GPU 平台上可达 833 FPS满足工业生产的实时检测需求多平台部署支持从高性能服务器到边缘设备的多平台部署易于扩展系统架构模块化易于扩展到其他类型的表面缺陷检测任务工业适用性针对工业场景的光照变化、噪声干扰等问题进行了专门优化应用前景该系统可广泛应用于钢铁生产企业的质量控制环节替代传统的人工检测方法提高检测效率和准确性降低生产成本提升产品质量。
同时系统的设计思路和实现方法也可以推广到其他金属材料的表面缺陷检测领域具有重要的工业应用价值。