基于 YOLO11 的钢材表面六类缺陷智能检测系统 | 完整源码分享
基于 YOLO11 的钢材表面六类缺陷智能检测系统把热轧钢板、冷轧钢板表面的裂纹、夹杂、麻面、划痕……这些工业缺陷从靠老师傅打手电变成镜头一拍就出报表。一、背景1.1 行业痛点钢材是工业制造的骨头但产线上的钢板/钢卷绕不开一件事——表面缺陷。这些缺陷既是质量门槛也是合规底线裂纹轧制应力或冷却不均产生的细长裂纹关系强度与寿命夹杂钢材中的非金属杂质或氧化物会显著降低疲劳寿命斑块成片色差或纹理异常常见于热轧氧化或表面污染麻面密集小坑多由腐蚀或脱落造成氧化皮压入氧化皮被轧辊压进基体剥落后形成凹坑划痕搬运/轧制过程中尖锐物刮擦的线性损伤。传统的人工目检工序快、缺陷小老师傅在线一天看 8 小时眼睛都能看花不同班组打分口径不一致质量数据难沉淀一旦漏检流到下游冲压、焊接环节返工成本极高。本项目用 YOLO11n 做六类钢材表面缺陷的目标检测配套 Streamlit 前端让一线质检员从打手电笔记本变成上传图片 → 自动出缺陷位置 类别 风险等级。视频演示与源码下载https://www.bilibili.com/video/BV1rHH96VE57/包含完整项目源码预训练模型权重️数据集1.2 项目运行效果1.3 项目介绍核心创新点维度说明六类全覆盖裂纹 / 夹杂 / 斑块 / 麻面 / 氧化皮压入 / 划痕对齐 NEU-DET 公开数据集风险分级高/中/低三档风险UI 自动用不同颜色标识多输入单图 / 批量 / 视频 / 摄像头四种输入与产线相机、巡检视频自然对接工程化5MB 级模型 ONNX 导出可部署到边缘 AI 盒子或工业 PC配置驱动类别说明、风险等级、UI 配色全部从configs/project.yaml注入风险等级写进 UI 图例与悬浮提示类别风险说明裂纹high直接影响材料强度氧化皮压入high剥落后形成凹坑夹杂medium影响疲劳寿命麻面medium易成腐蚀源斑块low表面外观异常划痕low线性机械损伤技术栈层选型检测模型YOLO11nultralytics 官方预训练 yolo11n.pt训练框架ultralytics ≥ 8.3后端推理Python 3.10 PyTorchCPU / MPS / CUDA 自适应前端Streamlit Plotly视频解码OpenCV imageio-ffmpeg部署形态Streamlit / Docker可导出 ONNX 给工业边缘盒子二、设计框架┌──────────────────────────────────────────────┐ │ 产线相机 / 质检员手机 / 巡检 PAD │ │ 单图 / 批量 / 视频 / 摄像头 │ └──────────────┬───────────────────────────────┘ ▼ HTTP默认 8501 ┌──────────────────────────────────────────────┐ │ Streamlit 应用 app/streamlit_app.py │ │ ├─ infer_image_path() 单帧推理 │ │ ├─ 类别 → 风险等级high / medium / low映射 │ │ └─ render_batch_analysis() 缺陷分布 风险图 │ └──────────────┬───────────────────────────────┘ ▼ ultralytics.YOLO ┌──────────────────────────────────────────────┐ │ YOLO11n 推理引擎 │ │ model/best.pt6 类钢材表面缺陷 │ └──────────────────────────────────────────────┘YOLO11 网络结构一图速通输入 640×640 │ ┌───▼──── BackboneC3k2 SPPF ────┐ │ 纹理 / 边缘 / 微小斑点特征提取 │ └───┬───────────────────────────────┘ │ ┌───▼──── NeckFPN PAN ─────────┐ │ 小目标裂纹/夹杂 大目标斑块│ └───┬───────────────────────────────┘ │ ┌───▼── HeadDecoupled DFL ─────┐ │ 6 类分类 DFL 边框回归 │ └───┬───────────────────────────────┘ │ 输出N×(x1,y1,x2,y2,conf,缺陷类)为什么选 YOLO11n钢材缺陷大多是长宽比悬殊的小目标细长裂纹、点状夹杂、线状划痕YOLO11 的多尺度特征 DFL 回归对这种形态非常友好5MB 级模型也方便下沉到产线边缘 AI 盒子。检测流程钢板图 ──▶ letterbox 640 ──▶ YOLO11n 推理 │ ▼ conf ≥ 0.25 NMSIoU 0.7 │ ▼ result.plot() 画框 │ ▼ class_name → 风险等级 → 缺陷位置/严重程度报告三、代码结构核心 50 行# app/streamlit_app.py节选frompathlibimportPathimportstreamlitasst,pandasaspd,yamlfromultralyticsimportYOLO ROOTPath(__file__).parent.parent MODEL_PATHROOT/model/best.ptCFGyaml.safe_load(open(ROOT/configs/project.yaml,encodingutf-8))APPCFG.get(app,{})SEVERITYAPP.get(class_severity,{})# ① 风险等级映射st.cache_resource(show_spinnerFalse)defload_model(p:str)-YOLO:returnYOLO(p)# ② 缓存权重definfer_image_path(model:YOLO,image_path:Path,conf:float):resultmodel.predict(str(image_path),confconf,verboseFalse)[0]# ③ 推理annotatedresult.plot()rows[]ifresult.boxesisnotNone:forboxinresult.boxes:cls_idint(box.cls.item())x1,y1,x2,y2[float(v)forvinbox.xyxy[0].tolist()]cls_nameresult.names[cls_id]rows.append({class_name:cls_name,severity:SEVERITY.get(cls_name,low),# ④ 自动打风险等级confidence:round(float(box.conf.item()),4),x1:round(x1,1),y1:round(y1,1),x2:round(x2,1),y2:round(y2,1),})returnannotated[:,:,::-1],pd.DataFrame(rows)# ---------- Streamlit 入口 ----------st.set_page_config(page_titleAPP.get(title,Steel Defect AI),layoutwide)confst.sidebar.slider(置信度阈值,0.1,0.9,0.25,0.05)modelload_model(str(MODEL_PATH))modest.radio(输入类型,[单张图片,批量图片,视频,摄像头],horizontalTrue)ifmode单张图片:upst.file_uploader(上传待检测钢板图片,type[jpg,jpeg,png,webp,bmp])ifupisnotNone:annotated,dfinfer_image_path(model,Path(up.name),conf)col1,col2st.columns(2)col1.image(up.getvalue(),caption原图)col2.image(annotated,caption检测结果)# 高风险计数high_nint((df[severity]high).sum())ifnotdf.emptyelse0st.metric(高风险缺陷数,high_n)st.dataframe(df)5 段解析SEVERITY—— 把裂纹/氧化皮压入 high夹杂/麻面 medium斑块/划痕 low做成可配置的字典业务专家想调整无需动 Python 代码。st.cache_resource—— Streamlit 会话级缓存权重刷新页面只加载一次。model.predict(...)[0]—— ultralytics 一行完成 letterbox、NMS、置信度过滤。在结果 DataFrame 里当场打上 severity 字段下游高风险缺陷数卡片、风险柱状图、CSV 导出全部基于这一字段。st.metric(高风险缺陷数, high_n)—— 把看几张图能看出来什么这件事从图片直接转成数字 KPI质检主管一眼就能看到产线状态。四、训练效果模型基于yolo11n.pt、imgsz640、batch16在 NEU-DET 六类钢材缺陷数据集上训练。模型在测试集上检测效果良好可稳定识别裂纹、夹杂、斑块、麻面、氧化皮压入、划痕这六类钢材表面缺陷已能满足产线初筛、巡检与质检数字化等场景的使用需要。五、项目总结做对了什么任务对齐工业语义检测结果不止有类名还自动带高/中/低风险等级直接可对接质检系统的告警与放行规则。轻量 边缘友好5MB 级权重可导出 ONNX 给产线工业 PC、嵌入式 AI 盒子。配置驱动 UI类别说明、风险等级、配色等都从configs/project.yaml注入把换品类如铝材表面缺陷这件事压成一份 yaml 一份新权重。还能怎么做同时输出缺陷面积比基于检测框面积 / 钢板可视区域比例计算单板缺陷率更对得上工业 PPM 指标多模态融合可见光 表面轮廓激光 / 红外对低对比度的氧化皮压入、麻面更稳追加缺陷分割检测框只定位再叠一个轻量分割头能给出像素级缺陷面积直接对接退货/降级规则数据扩充加入更多车间真实工况图像提升模型在不同光照、不同钢种下的鲁棒性。一句话总结用 YOLO11n 把钢板表面缺陷在哪什么类多大风险这套质检小流程跑通是 5MB 模型撬动一条产线在线质检的典型样例。