【编码】表面缺陷检测

【编码】表面缺陷检测 Tony 2023-06-27 15:27:42 283

1.数据集情况

将数据集划分为训练集、测试集和验证集
原始数据集地址Kolektor Surface-Defect Dataset (KolektorSDD/KSDD) | ViCoS Lab
原始数据集共两个文件夹,0:359 (无缺陷) 1:40(有缺陷)
该数据集收集了电子换向器的缺陷图像。具体地,在电子换向器的塑料包埋表面上,存在微小的破损或裂缝。
图像是在受控条件下【光照均匀等】采集的。
为缺陷图像提供了缺陷的像素级标注。【原数据标注为语义分割的标注】
该数据集包括对50个缺陷电子换向器的每个换向器表面采集8张不重叠的图像,得到共399张图像,其中包括:

  1. - 52张缺陷图像。
  2. -347张无缺陷图像。

2.数据集划分

参考:图片数据集划分为训练集、测试集、验证集

  1. # -*- coding: utf-8 -*-
  2. """
  3. 将数据集划分为训练集,验证集,测试集
  4. """
  5. import os
  6. import random
  7. import shutil
  8. # 创建保存图像的文件夹
  9. def makedir(new_dir):
  10. if not os.path.exists(new_dir):
  11. os.makedirs(new_dir)
  12. random.seed(1) # 随机种子
  13. # 1.确定原图像数据集路径
  14. #dataset_dir = "D:/test2021/train_val_test0811/" ##原始数据集路径
  15. dataset_dir = "C:/Users/whd/Desktop/1临时/data3(1)/data_biaomian/" ##原始数据集路径
  16. # 2.确定数据集划分后保存的路径
  17. split_dir = "C:/Users/whd/Desktop/1临时/data3(1)/biaomianafter/" ##划分后保存路径
  18. train_dir = os.path.join(split_dir, "train")
  19. valid_dir = os.path.join(split_dir, "val")
  20. test_dir = os.path.join(split_dir, "test")
  21. # 3.确定将数据集划分为训练集,验证集,测试集的比例
  22. train_pct = 0.8
  23. valid_pct = 0.2
  24. test_pct = 0
  25. # 4.划分
  26. for root, dirs, files in os.walk(dataset_dir):
  27. for sub_dir in dirs: # 遍历0,1,2,3,4,5...9文件夹
  28. imgs = os.listdir(os.path.join(root, sub_dir)) # 展示目标文件夹下所有的文件名
  29. imgs = list(filter(lambda x: x.endswith('.jpg'), imgs)) # 取到所有以.png结尾的文件,如果改了图片格式,这里需要修改
  30. random.shuffle(imgs) # 乱序图片路径
  31. img_count = len(imgs) # 计算图片数量
  32. train_point = int(img_count * train_pct) # 0:train_pct
  33. valid_point = int(img_count * (train_pct + valid_pct)) # train_pct:valid_pct
  34. for i in range(img_count):
  35. if i < train_point: # 保存0-train_point的图片到训练集
  36. out_dir = os.path.join(train_dir, sub_dir)
  37. elif i < valid_point: # 保存train_point-valid_point的图片到验证集
  38. out_dir = os.path.join(valid_dir, sub_dir)
  39. else: # 保存valid_point-结束的图片到测试集
  40. out_dir = os.path.join(test_dir, sub_dir)
  41. makedir(out_dir) # 创建文件夹
  42. target_path = os.path.join(out_dir, imgs[i]) # 指定目标保存路径
  43. src_path = os.path.join(dataset_dir, sub_dir, imgs[i]) #指定目标原图像路径
  44. shutil.copy(src_path, target_path) # 复制图片
  45. print('Class:{}, train:{}, valid:{}, test:{}'.format(sub_dir, train_point, valid_point-train_point,img_count-valid_point))

结果展示


上面的程序亲测可用,另外后面的两个可用的数据集划分资料,质量也非常高。

3.加预训练后,准确率明显提升

  1. python tools/test.py configs/resnet/resnet50_8xb32_in1k_biaomian_pretrain.py work_dirs/resnet50_8xb32_in1k/epoch_100.pth --out result.pkl --show-dir output_cls

运行结果如下:98.7654%

会生成一个文件(result.pkl)和一个文件夹(output_cls)。其中result.pkl文件保存的是总体的识别结果(也可以是其他指标,需需要在配置文件里修改),output_cls保存的是对测试集的每个图片的识别结果,并标记到图片上(注意这个图不是原图,是随机裁减并归一化之后的图)。
如下图所示:

4.openmmlab提供模型部署功能

包括目标分类模型和目标检测模型。

5.实验结果可视化

  1. python tools/analysis_tools/analyze_logs.py plot_curve your_log_json --keys loss --legend loss
  1. python tools/analysis_tools/analyze_logs.py plot_curvework_dirs/resnet50_8xb32_in1k/20230409_101443/20230409_101443.log --keys accuracy_top-1 accuracy_top-2 --legend top1 top2 --out results.jpg

6 Deep Learning深度学习可视化工具

其他

-1. 其他的工业缺陷数据集。
-2.其他的数据集划分的参考资料。
(1)https://github.com/jfilter/split-folders
(2)Python划分图像文件夹为训练集、验证集和测试集

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
Tony
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
Tony
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区