缺陷检测数据集GC10-DET的数据处理

文章介绍了GC10-DET数据集的处理过程,包括去除无标签数据和替换错误的标签名。数据集是针对真实工业表面缺陷的图像,包含10种类型,如冲孔、焊缝和油斑等。作者提供了数据处理的步骤,如创建新文件夹存储有标签的图像,以及使用Python脚本定位并修正错误的标签名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GC10-DET数据集数据处理

PS:前几天写机器视觉课程作业用的,留个记录,便于复习查找;
数据集介绍CV自:地址

目录

简介:

GC10-DET是在真实工业中收集的表面缺陷数据集。一个真实的行业。它包含十种类型的表面缺陷,即冲孔(Pu)、焊缝(Wl)、新月形缝隙(Cg)、水斑(Water Spot)。油斑(Os)、丝斑(Ss)、夹杂物(In)、轧坑(Rp)、折痕(Cr)、腰部折痕 (Wf)。所收集的缺陷都在钢板的表面。该数据集包括3570张灰度 图像。

数据集介绍

GC10-DET数据集可以在github上获得(https://github.com/lvxiaoming2019/GC10-DET-Metallic-Surface-Defect-Matasets)

GC10-DET是在真实工业中收集的表面缺陷数据集。一个真实的行业。它包含十种类型的表面缺陷,即冲孔(Pu)、焊缝(Wl)、新月形缝隙(Cg)、水斑(Water Spot)。(Cg)、水斑(Ws)、油斑(Os)、丝斑(Ss)、夹杂物(In)、轧坑(Rp)、折痕(Cr)、腰部折痕 (Wf)。所收集的缺陷都在钢板的表面。该数据集包括3570张灰度 图像。

  • 冲孔:在钢带的生产线上,钢带需要根据产品规格进行冲孔。产品规格;机械故障可能导致不必要的冲孔,从而导致冲孔 缺陷。
  • 焊接线。当带钢被更换时,需要对带钢的两卷进行焊接,并产生 焊接线就产生了。严格说来,这不是一个缺陷,但需要自动 检测和跟踪,以便在后续切割中规避。
  • 月牙形间隙。在钢带生产中,切割有时会产生缺陷,就像半个 一个圆。
  • 水斑。水斑是由生产中的干燥产生的。在不同的产品和 不同的产品和工艺,对这种缺陷的要求是不同的。然而,由于水斑一般对比度较低,并且与油斑等其他缺陷相似,因此通常被视为 一般来说,水斑的对比度较低,而且与其他缺陷(如油斑)相似,所以它们通常会被误测。
  • 油斑。油斑通常是由机械润滑剂的污染引起的,这将影响产品的外观。影响产品的外观。丝斑。带材表面的局部或连续的波浪状斑块,可能出现在上、下表面,在整个带材长度方向上密度不均匀。在整个带材长度方向上,密度不均匀。一般来说。主要原因是辊子的温度不均匀和压力不均匀。
  • 夹杂物。夹杂物是金属表面缺陷的一种典型缺陷,通常表现为小斑点。鱼鳞状、条状、块状不规则地分布在带钢的上、下表面 全局或局部),并常伴有粗糙的麻点表面。有些内含物是 松散,容易脱落,有的则被压入板中。
  • 轧制坑。轧制凹坑是钢板表面的周期性隆起或凹坑,呈点状。片状,或条状。它们分布在整个带钢长度或截面上,主要是由工作辊或张力辊损坏造成的。工作辊或张力辊损坏造成的。
  • 折痕。折痕是一种垂直的横向折痕,有规则的或不规则的间距,横跨带钢,或在带钢的边缘。在板带的边缘。主要原因是在开卷过程中,沿板带移动方向的局部屈服 在开卷过程中的局部屈服。
  • 腰部褶皱。缺陷部位有明显的褶皱,比较流行,有点像 皱纹,说明缺陷的局部变形太大。其原因是由于 低碳。

1.去除无标签数据

可以看出,原数据集的data 和 label 文件名是完全对应的

数据集是多标签数据没有必要分10个文件夹啦,放一起得了~

对比数量发现部分样本无标签,需要清除没有标签的数据,并把有标签数据复制一份到新的文件夹;文件名就不改了。

步骤如下:

  1. 手动创建个文件夹(Newdata_GC10-DET,然后里面创个子文件夹‘IMAGES’)用来保存处理好的图片数据
  2. 创个空列表label
  3. 遍历label文件夹,把所有的有标签文件名写到列表里(存个名单喽);
  4. 开始对着label名单,遍历 数据文件里的子文件夹(我是手动一个一个改的从1~10);
  5. 在label名单里的图片就给它复制到新文件夹里
    在这里插入图片描述
    在这里插入图片描述
import os
import shutil

label = [] # 创建个空列表用于存储有标签文件名单
for root, dirs, files in os.walk('E:\\机器视觉\\DataGC10-DET\\lable', topdown=False):
    for name in files:
        # a是.xml格式的标签文件名
        a = str(os.path.join(name))
        # print(os.path.join(name)) 
        b = a.split('.')
        label.append(b[0]) # b[0]是不含.xml后缀的文件名
        

for root, dirs, files in os.walk('E:\\机器视觉\\DataGC10-DET\\data\\10', topdown=False):
    non_label = 0
    for name in files:
        # a1是读取的带后缀的图片文件名()
        a1 = str(os.path.join(name))
        b1 = a1.split('.') # b1[0]是不含.jpg后缀的文件名
       
        if b1[0] in label:
            # old 是图片原地址 
            old = 'E:\\机器视觉\\DataGC10-DET\\data\\'+'10\\'+ a1
            # new 是新地址
            new = 'E:\\机器视觉\\DataGC10-DET\\Newdata_GC10-DET\\data\\'+a1
            shutil.copyfile(oldname, newname,follow_symlinks=False)
        else:
            non_label += 1

2. 替换错误的标签名

根据说明文件,这个数据集一共有10个类别

调试的时候发现有118个标签文档里的’10_yaozhe’被标成了’10_yaozhed’(如文件img_07_4405133600_00033.xml)
在这里插入图片描述

(还有个标签’d’,这个我直接找出来删掉了)

**目标:**找到错误标签并修改

代码如下:

import os
import glob

folder_path = 'E:\\机器视觉\\DataGC10-DET\\newdata\\Annotations'  # 目标文件夹路径
search_str = '10_yaozhed'  # 要搜索的字符串
# search_str = '10_yaozhe'
replace_str = '10_yaozhe'  # 要替换的字符串

# 查找含有search_str字符串的文件,并将文件名放入列表中
file_list = glob.glob(os.path.join(folder_path, '*.xml'))
search_result = []
for file_path in file_list:
    with open(file_path, 'r') as f:
        content = f.read()
        if search_str in content:
            search_result.append(file_path)
            # print(file_path)
for i in range(6):
    print(search_result[i])

# 逐一打开文件并替换字符串
for file_path in search_result:
    with open(file_path, 'r') as f:
        content = f.read()
    content = content.replace(search_str, replace_str)
    with open(file_path, 'w') as f:
        f.write(content)

3.下载链接

原数据集:

AI studio:工业金属表面缺陷数据集(GC10-DET) - 飞桨AI Studio (baidu.com)

百度云:

链接:https://pan.baidu.com/s/1LlSGmSaWdoht_-gEBuXzWA?pwd=6666
提取码:6666

处理好的数据集:

AI studio:钢铁缺陷检测数据集 - 飞桨AI Studio (baidu.com)

百度云:

链接:https://pan.baidu.com/s/1G0S0nmdYmL6gK-rMkAlPVA?pwd=8888
提取码:8888

### 将 GC10-DET 数据集转换为 YOLO 格式的具体方法 为了将 GC10-DET 数据集转换为适用于目标检测模型(如 YOLOv8 或 YOLOv5)的格式,需要遵循特定的数据结构和标注文件的标准。以下是详细的说明: #### 1. **数据目录结构调整** YOLO 模型通常要求数据按照以下目录结构组织[^1]: ``` gc10_det_dataset/ ├── images/ │ ├── train/ │ │ └── image_1.jpg │ │ └── ... │ ├── val/ │ │ └── image_val_1.jpg │ │ └── ... │ └── test/ │ └── image_test_1.jpg └── labels/ ├── train/ │ └── image_1.txt │ └── ... └── val/ └── image_val_1.txt └── ... ``` 其中 `images` 文件夹存储原始图片,而 `labels` 文件夹则对应每张图片的目标框标签。 --- #### 2. **标签文件格式转换** YOLO 的标签文件采用 `.txt` 格式,每一行表示一个边界框,其格式如下: ``` <class_id> <x_center> <y_center> <width> <height> ``` 各字段的具体含义为: - `<class_id>`:类别索引,从 0 开始计数。 - `<x_center>` 和 `<y_center>`:目标中心点相对于整幅图像宽度和高度的比例坐标,范围为 `[0, 1]`。 - `<width>` 和 `<height>`:目标宽高相对于整幅图像宽度和高度的比例尺寸,范围也为 `[0, 1]`。 假设原数据集中提供了 VOC 格式的 XML 文件,则可以通过脚本将其转换为上述 YOLO 格式。下面是一个 Python 脚本示例[^3]: ```python import xml.etree.ElementTree as ET import os def convert(size, box): dw = 1./size[0] dh = 1./size[1] x = (box[0] + box[1]) / 2.0 y = (box[2] + box[3]) / 2.0 w = box[1] - box[0] h = box[3] - box[2] x = x * dw w = w * dw y = y * dh h = h * dh return (x, y, w, h) def convert_annotation(xml_file, output_dir, class_names): tree = ET.parse(xml_file) root = tree.getroot() size = root.find('size') width = int(size.find('width').text) height = int(size.find('height').text) with open(output_dir, 'w') as out_file: for obj in root.iter('object'): difficult = obj.find('difficult').text cls_name = obj.find('name').text if cls_name not in class_names or int(difficult) == 1: continue cls_id = class_names.index(cls_name) xml_box = obj.find('bndbox') b = ( float(xml_box.find('xmin').text), float(xml_box.find('xmax').text), float(xml_box.find('ymin').text), float(xml_box.find('ymax').text) ) bb = convert((width, height), b) out_file.write(f"{cls_id} {' '.join([f'{i:.6f}' for i in bb])}\n") # 示例调用 input_xml_folder = './gc10_det_dataset/annotations' output_label_folder = './gc10_det_dataset/labels/train' if not os.path.exists(output_label_folder): os.makedirs(output_label_folder) classes = ['type1', 'type2', ..., 'type10'] # 替换为实际类名列表 for file in os.listdir(input_xml_folder): if file.endswith('.xml'): convert_annotation( os.path.join(input_xml_folder, file), os.path.join(output_label_folder, f"{file.split('.')[0]}.txt"), classes ) ``` 此脚本会读取每个 XML 文件中的对象信息并写入对应的 TXT 文件中。 --- #### 3. **验证数据一致性** 完成转换后,建议通过可视化工具确认标签是否正确加载到图片上。可以利用 OpenCV 或其他库绘制边框来检查结果。 --- #### 4. **配置文件准备** 最后,在训练前需创建 YAML 配置文件指定数据路径及类别名称。例如: ```yaml path: ./gc10_det_dataset train: images/train val: images/val test: images/test names: 0: type1 1: type2 ... 9: type10 ``` 保存该文件以便后续传递给 YOLO 训练命令。 --- ###
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值