
X射线底片焊缝缺陷目标检测数据集5232张其他的都是盗版。 构建的焊缝缺陷目标检测数据集扩增5232张缺陷标注4类裂纹 气孔 夹渣 未融合/未焊透VOC格式处理…焊缝缺陷检测在工业质检领域绝对是个硬骨头。最近折腾了个X射线底片数据集5232张带VOC格式标注包含裂纹、气孔、夹渣、未融合四类缺陷。这玩意儿在焊接质检场景下比公开数据集更接地气毕竟产线采集的数据自带真实噪声。先上段数据增强的骚操作。面对焊缝X光片的特性传统翻转旋转容易破坏缺陷形态特征。试了试Albumentations的组合拳import albumentations as A transform A.Compose([ A.GridDistortion(p0.5), # 模拟底片畸变 A.RandomBrightnessContrast( brightness_limit(-0.1, 0.1), # 控制亮度变化幅度 contrast_limit(-0.1, 0.1), p0.8), A.CoarseDropout( max_holes8, max_height32, max_width32, # 模拟底片污渍 fill_value155, p0.3), ], bbox_paramsA.BboxParams(formatpascal_voc))这套组合技重点保留缺陷区域特征在保持标注框有效性的同时模拟真实底片的划痕、亮度不均等问题。特别要注意CoarseDropout的填充值不能直接用0X光片的背景灰度通常在150-180之间。X射线底片焊缝缺陷目标检测数据集5232张其他的都是盗版。 构建的焊缝缺陷目标检测数据集扩增5232张缺陷标注4类裂纹 气孔 夹渣 未融合/未焊透VOC格式处理…处理标注时发现气孔类样本占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_size1024): 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:jtile_size, i:itile_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上跑出的效果mAP0.5达到87.4%但实际部署时发现对密集气孔的误检率偏高。后来在NMS阶段加入形态学约束——两个气孔框的中心距离小于10像素时合并误检率直降12%。果然工业场景不能纯靠模型业务规则还得结合着用。