DL00612-基于YOLOv8的钢材表面缺陷检测含数据集处理 东北大学(NEU)表面缺陷数据集,收集了热轧带钢6种典型的表面缺陷,即轧内垢(RS)、斑块(Pa)、裂纹(Cr)、点蚀面(PS)、夹杂物(In)和划痕(Sc)。 该数据库包括1800张灰度图像:6种不同类型的典型表面缺陷各300个样本。 6种典型表面缺陷的样本图像,每张图像的原始分辨率为200×200像素。 从图中,我们可以清楚地观察到类内缺陷在外观上存在较大差异,例如划痕(最后一列)可能是水平划痕、垂直划痕和倾斜划痕等。 与此同时,类间缺陷也具有相似的特征,如滚积垢、裂纹和坑状表面。 此外,由于光照和材料变化的影响,类内缺陷图像的灰度会发生变化。 总之,NEU表面缺陷数据库包含两个难题,即类内缺陷存在较大外观差异,类间缺陷具有相似方面,缺陷图像受到光照和材料变化的影响。
在钢材生产过程中,表面缺陷检测至关重要。今天咱们来聊聊基于YOLOv8的钢材表面缺陷检测,特别是其中数据集处理这块,用到的是东北大学(NEU)表面缺陷数据集。
一、NEU表面缺陷数据集剖析
这个数据集收集了热轧带钢6种典型的表面缺陷,分别是轧内垢(RS)、斑块(Pa)、裂纹(Cr)、点蚀面(PS)、夹杂物(In)和划痕(Sc) 。整个数据库一共有1800张灰度图像,每种缺陷类型刚好300个样本。而且每张图像原始分辨率为200×200像素。
从这些样本图像里,能发现不少有趣又棘手的情况。比如说类内缺陷在外观上差异很大,就拿划痕来说,有水平的、垂直的,还有倾斜的。像下面代码可以简单展示读取并查看划痕样本图像:
import cv2 import os # 假设划痕图像存储在'scratches'文件夹 image_path = 'scratches/scratch_1.jpg' img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) cv2.imshow('Scratch Image', img) cv2.waitKey(0) cv2.destroyAllWindows()这段代码用OpenCV库读取了一张划痕图像,并展示出来。通过观察不同划痕图像,能直观感受到类内差异。
同时,类间缺陷还有相似特征,像滚积垢、裂纹和坑状表面。而且因为光照和材料变化,类内缺陷图像的灰度也会变。总结一下,这个数据库存在两个大难题:类内缺陷外观差异大,类间缺陷特征相似,再加上光照和材料变化对缺陷图像的影响。
二、YOLOv8应对策略
YOLOv8作为目标检测领域的利器,面对这样复杂的数据集,得好好施展拳脚。在处理数据阶段,我们可能需要对图像进行一些预处理。例如,为了应对光照变化,我们可以进行直方图均衡化:
import cv2 img = cv2.imread('defect_image.jpg', cv2.IMREAD_GRAYSCALE) equ = cv2.equalizeHist(img) cv2.imshow('Equalized Image', equ) cv2.waitKey(0) cv2.destroyAllWindows()这段代码对一张缺陷图像进行了直方图均衡化,使得图像灰度分布更均匀,一定程度上减少光照变化带来的影响。
在标注数据方面,我们要按照YOLOv8的格式,为每张图像的缺陷标注类别和位置信息。比如对于一张有裂纹缺陷的图像,我们要精确标记出裂纹在图像中的坐标等信息。
基于YOLOv8的钢材表面缺陷检测,数据集处理是关键的第一步。面对NEU这样具有挑战性的数据集,通过合适的预处理和标注等操作,能为后续准确的缺陷检测奠定良好基础,在实际钢材生产质量把控中发挥重要作用。