VOC格式的焊缝缺陷目标检测数据集:5232张正版X射线底片,包含裂纹、气孔、夹渣、未融合、未...
最后在YOLOv5上跑出的效果:mAP@0.5达到87.4%,但实际部署时发现对密集气孔的误检率偏高。最近折腾了个X射线底片数据集,5232张带VOC格式标注,包含裂纹、气孔、夹渣、未融合四类缺陷。构建的焊缝缺陷目标检测数据集,扩增5232张,缺陷标注4类,裂纹 气孔 夹渣 未融合/未焊透,VOC格式,处理…注意边缘区域的缺陷要复制扩充,避免被截断。这套组合技重点保留缺陷区域特征,在保持标注框有效
X射线底片焊缝缺陷目标检测数据集,5232张,其他的都是盗版。 构建的焊缝缺陷目标检测数据集,扩增5232张,缺陷标注4类,裂纹 气孔 夹渣 未融合/未焊透,VOC格式,处理…

焊缝缺陷检测在工业质检领域绝对是个硬骨头。最近折腾了个X射线底片数据集,5232张带VOC格式标注,包含裂纹、气孔、夹渣、未融合四类缺陷。这玩意儿在焊接质检场景下比公开数据集更接地气,毕竟产线采集的数据自带真实噪声。

先上段数据增强的骚操作。面对焊缝X光片的特性,传统翻转旋转容易破坏缺陷形态特征。试了试Albumentations的组合拳:
import albumentations as A
transform = A.Compose([
A.GridDistortion(p=0.5), # 模拟底片畸变
A.RandomBrightnessContrast(
brightness_limit=(-0.1, 0.1), # 控制亮度变化幅度
contrast_limit=(-0.1, 0.1),
p=0.8),
A.CoarseDropout(
max_holes=8,
max_height=32,
max_width=32, # 模拟底片污渍
fill_value=155,
p=0.3),
], bbox_params=A.BboxParams(format='pascal_voc'))
这套组合技重点保留缺陷区域特征,在保持标注框有效性的同时,模拟真实底片的划痕、亮度不均等问题。特别要注意CoarseDropout的填充值不能直接用0,X光片的背景灰度通常在150-180之间。

处理标注时发现气孔类样本占60%,其他三类严重不足。写了个动态采样脚本平衡训练:
from collections import defaultdict
class_defects = defaultdict(int)
with open('Annotations/train.txt') as f:
for line in f:
xml_path = line.strip()
defects = parse_xml(xml_path)
for d in defects:
class_defects[d] += 1
sample_weights = {
'crack': 3.0, # 裂纹权重
'slag': 2.5, # 夹渣
'unfused': 2.0,
'porosity': 0.8 # 气孔降权
}
这法子比单纯过采样更灵活,训练时根据样本中的缺陷类型动态调整损失权重。实测在Faster R-CNN上提升mAP约5个点,特别是对小目标裂纹检测效果显著。

转换VOC到YOLO格式时踩过坑。原图尺寸4096x2400,直接resize到640x640会导致小缺陷消失。改用滑动窗口切割:
def split_large_image(img_path, tile_size=1024):
img = cv2.imread(img_path)
height, width = img.shape[:2]
tiles = []
for i in range(0, width, tile_size):
for j in range(0, height, tile_size):
tile = img[j:j+tile_size, i:i+tile_size]
# 处理边界不足tile_size的情况
if tile.shape[0] < tile_size or tile.shape[1] < tile_size:
tile = cv2.copyMakeBorder(tile, 0, tile_size-tile.shape[0],
0, tile_size-tile.shape[1],
cv2.BORDER_REPLICATE)
tiles.append(tile)
return tiles
切割后单张图平均包含1.3个缺陷,比整图训练时正样本比例提升近7倍。注意边缘区域的缺陷要复制扩充,避免被截断。

最后在YOLOv5上跑出的效果:mAP@0.5达到87.4%,但实际部署时发现对密集气孔的误检率偏高。后来在NMS阶段加入形态学约束——两个气孔框的中心距离小于10像素时合并,误检率直降12%。果然工业场景不能纯靠模型,业务规则还得结合着用。



更多推荐

所有评论(0)