【深度学习】YOLOv5,金属表面的缺陷检测,GC10-DET数据集

ops/2024/11/19 15:26:36/

目录:

文章目录

  • 数据集
  • 数据集转换
  • 下载yolov5
  • 创建 dataset.yaml
  • 训练参数
  • 开始训练
  • 数据分布
  • 问询、帮助

数据集

数据集地址:

https://github.com/lvxiaoming2019/GC10-DET-Metallic-Surface-Defect-Datasets

数据集下载方式:

Download link:https://pan.baidu.com/s/1Zrd-gzfVhG6oKdVSa9zoPQ Verify Code:cdyt

其中有个excel,写了介绍:此数据集一共10种金属缺陷,每一种有多少张图也写在excel了:

在这里插入图片描述

数据集转换

数据集的lable文件夹下是每个图片的框和类别标记,是xml格式。

在这里插入图片描述

运行下面这个代码,可以直接将数据集直接转为yolov5格式:

import os
import shutildef listPathAllfiles(dirname):result = []for maindir, subdir, file_name_list in os.walk(dirname):for filename in file_name_list:apath = os.path.join(maindir, filename)result.append(apath)return result# 所有label文件转换后给到labels文件夹,txt文件
import xml.etree.ElementTree as ET
import os
import shutil
import random
import cv2classes = """1_chongkong
2_hanfeng
3_yueyawan
4_shuiban
5_youban
6_siban
7_yiwu
8_yahen
9_zhehen
10_yaozhe""".split("\n")xmldir = r"/ssd/xiedong/GC10-DET/lable"
img_src_dir = r"/ssd/xiedong/GC10-DET"txtdir = r"/ssd/xiedong/GC10-DET_yolov5/labels"
imgdir = r"/ssd/xiedong/GC10-DET_yolov5/images"
os.system("rm -rf " + txtdir)
os.system("rm -rf " + imgdir)
os.makedirs(txtdir, exist_ok=True)
os.makedirs(imgdir, exist_ok=True)def convert_annotation(img_id_filename):image_id = img_id_filename.split(".")[0]# in_file = open(xmldir + '%s.xml' % (image_id), encoding='UTF-8')in_file = open(os.path.join(xmldir, '%s.xml' % (image_id)), encoding='UTF-8')# out_file = open(txtdir + '%s.txt' % (image_id), 'w', encoding='UTF-8')out_file = open(os.path.join(txtdir, '%s.txt' % (image_id)), 'w', encoding='UTF-8')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')size_width = int(size.find('width').text)size_height = int(size.find('height').text)ix = 0for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = [float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text)]if size_width == 0 or size_height == 0:print("不合理的图,程序会删除这张图", image_id)continue# 标注越界修正if b[1] > size_width:b[1] = size_widthif b[3] > size_height:b[3] = size_heighttxt_data = [((b[0] + b[1]) / 2.0 - 1) / size_width, ((b[2] + b[3]) / 2.0 - 1) / size_height,(b[1] - b[0]) / size_width, (b[3] - b[2]) / size_height]out_file.write(str(cls_id) + " " + " ".join([str(a) for a in txt_data]) + '\n')in_file.close()out_file.close()xmllist = os.listdir(xmldir)
for img_id in xmllist:convert_annotation(img_id)img_sub_list_all = []
for i in range(1, 11):img_src_sub_dir = os.path.join(img_src_dir, str(i))img_sub_list = os.listdir(img_src_sub_dir)img_sub_list_all.extend(img_sub_list)all_imgs = listPathAllfiles(img_src_dir)
textlist = os.listdir(txtdir)
print(len(textlist))
for x in textlist:x1 = x.split(".")[0] + ".jpg"if x1 not in img_sub_list_all:print("不可能打印我")continuefor x2 in all_imgs:if x1 in x2:shutil.copy(x2, imgdir)imgdir_files = os.listdir(imgdir)
print(len(imgdir_files))

yolov5_137">下载yolov5

下载yolov5

git clone https://github.com/ultralytics/yolov5.git
cd yolov5/

创建环境:

conda create -n py310_yolov5 python=3.10 -y
conda activate py310_yolov5

装一个可以用的torch:


# CUDA 11.8
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidia

取消这2个:
在这里插入图片描述

然后安装一些别的包:

pip install -r requirements.txt  # install

随后更多内容参考官网这里的训练指导:

https://docs.ultralytics.com/zh/yolov5/tutorials/train_custom_data/#before-you-start

创建 dataset.yaml

创建文件:

cd yolov5/data
cp coco128.yaml jinshu.yaml

将fire_smoke.yaml修改为这样:

path: /ssd/xiedong/GC10-DET_yolov5
train: images
val: images
test: # test images (optional)# Classes
names:0: 1_chongkong1: 2_hanfeng2: 3_yueyawan3: 4_shuiban4: 5_youban5: 6_siban6: 7_yiwu7: 8_yahen8: 9_zhehen9: 10_yaozhe

训练参数

使用python train.py --help查看训练参数:

# python train.py --help
警告 ⚠️ Ultralytics 设置已重置为默认值。这可能是由于您的设置存在问题或最近 Ultralytics 包更新导致的。
使用 'yolo settings' 命令或查看 '/home/xiedong/.config/Ultralytics/settings.yaml' 文件来查看设置。
使用 'yolo settings key=value' 命令来更新设置,例如 'yolo settings runs_dir=path/to/dir'。更多帮助请参考 https://docs.ultralytics.com/quickstart/#ultralytics-settings。
用法: train.py [-h] [--weights WEIGHTS] [--cfg CFG] [--data DATA] [--hyp HYP] [--epochs EPOCHS] [--batch-size BATCH_SIZE] [--imgsz IMGSZ] [--rect] [--resume [RESUME]][--nosave] [--noval] [--noautoanchor] [--noplots] [--evolve [EVOLVE]] [--evolve_population EVOLVE_POPULATION] [--resume_evolve RESUME_EVOLVE][--bucket BUCKET] [--cache [CACHE]] [--image-weights] [--device DEVICE] [--multi-scale] [--single-cls] [--optimizer {SGD,Adam,AdamW}] [--sync-bn][--workers WORKERS] [--project PROJECT] [--name NAME] [--exist-ok] [--quad] [--cos-lr] [--label-smoothing LABEL_SMOOTHING] [--patience PATIENCE][--freeze FREEZE [FREEZE ...]] [--save-period SAVE_PERIOD] [--seed SEED] [--local_rank LOCAL_RANK] [--entity ENTITY] [--upload_dataset [UPLOAD_DATASET]][--bbox_interval BBOX_INTERVAL] [--artifact_alias ARTIFACT_ALIAS] [--ndjson-console] [--ndjson-file]选项:-h, --help            显示帮助信息并退出--weights WEIGHTS     初始权重路径--cfg CFG             模型配置文件路径--data DATA           数据集配置文件路径--hyp HYP             超参数路径--epochs EPOCHS       总训练轮数--batch-size BATCH_SIZE所有 GPU 的总批量大小,-1 表示自动批处理--imgsz IMGSZ, --img IMGSZ, --img-size IMGSZ训练、验证图像大小(像素)--rect                矩形训练--resume [RESUME]     恢复最近的训练--nosave              仅保存最终检查点--noval               仅验证最终轮次--noautoanchor        禁用 AutoAnchor--noplots             不保存绘图文件--evolve [EVOLVE]     为 x 代演进超参数--evolve_population EVOLVE_POPULATION加载种群的位置--resume_evolve RESUME_EVOLVE从上一代演进恢复--bucket BUCKET       gsutil 存储桶--cache [CACHE]       图像缓存 ram/disk--image-weights       在训练时使用加权图像选择--device DEVICE       cuda 设备,例如 00,1,2,3 或 cpu--multi-scale         图像大小变化范围为 +/- 50%--single-cls          将多类数据作为单类训练--optimizer {SGD,Adam,AdamW}优化器--sync-bn             使用 SyncBatchNorm,仅在 DDP 模式下可用--workers WORKERS     最大数据加载器工作进程数(每个 DDP 模式中的 RANK)--project PROJECT     保存到项目/名称--name NAME           保存到项目/名称--exist-ok            存在的项目/名称正常,不增加--quad                四通道数据加载器--cos-lr              余弦学习率调度器--label-smoothing LABEL_SMOOTHING标签平滑 epsilon--patience PATIENCE   EarlyStopping 耐心(未改善的轮次)--freeze FREEZE [FREEZE ...]冻结层:backbone=10, first3=0 1 2--save-period SAVE_PERIOD每 x 轮保存检查点(如果 < 1 则禁用)--seed SEED           全局训练种子--local_rank LOCAL_RANK自动 DDP 多 GPU 参数,不要修改--entity ENTITY       实体--upload_dataset [UPLOAD_DATASET]上传数据,"val" 选项--bbox_interval BBOX_INTERVAL设置边界框图像记录间隔--artifact_alias ARTIFACT_ALIAS要使用的数据集 artifact 版本--ndjson-console      将 ndjson 记录到控制台--ndjson-file         将 ndjson 记录到文件

开始训练

多卡训练:

python -m torch.distributed.run --nproc_per_node 2 train.py --weights yolov5s.pt --data jinshu.yaml --batch-size 100  --epochs 50 --img 640 --sync-bn --name jinshu --cos-lr --device 0,1

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据分布

在这里插入图片描述
在这里插入图片描述

问询、帮助

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

http://www.ppmy.cn/ops/17278.html

相关文章

UniAD:以规划为导向的端到端自动驾驶

文章链接 这个文章是CVPR2023 Best Paper https://arxiv.org/pdf/2212.10156 提出背景 以往的自动驾驶多数是为不同的任务场景设计部署单独的模型&#xff0c;这样子组成的系统会很复杂如图a。 图b这是多任务共享一个主干&#xff0c;但还是要分离训练&#xff0c;而且不是…

【ubuntu系统-部署MySQL】

在Ubuntu上安装MySQL并启动服务是一项相对直接的任务&#xff0c;可以通过几个简单的步骤来完成。下面是一步步的指导&#xff1a; 第1步&#xff1a;更新你的Ubuntu系统 首先&#xff0c;打开你的终端&#xff0c;并运行以下命令来更新你的包列表和系统。这确保你安装的软件…

自养号测评详解:成功助力亚马逊爆款必备手册

对于亚马逊商家而言&#xff0c;如何成功打造爆款产品无疑是他们日常运营中最为关注的核心议题。然而&#xff0c;尽管众多商家费尽心思去挑选和推广产品&#xff0c;但有时候却仍然难以选出真正的爆款。这不禁让人深思&#xff0c;究竟是什么原因导致商家在选品过程中屡屡碰壁…

DS:单链表的实现

欢迎各位来到 Harper.Lee 的编程学习小世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客 我将在这里分享我的学习过程等心得 创作不易&#xff0c;码字不易&#xff0c;兄弟们养成先赞后看的好习惯哦&#xff01; 想一同进步的uu&#xff0c;可以来后来找我哦&…

数据可视化(八):Pandas时间序列——动态绘图,重采样,自相关图,偏相关图等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

Node框架Express搭建服务器和API

新建一个空文件夹 初始化项目 yarn init -y > package.json 配置 .gitignore 文件 node_modules/ 安装Express插件 yarn add express 创建 app.js 用于搭建后端服务器 js ├── README.en.md ├── README.md ├── app.js ├── package.json └── yarn.lockcon…

企业遇到cc攻击后会怎么样

CC攻击是什么&#xff1f; CC攻击&#xff0c;全称Challenge Collapsar&#xff0c;也称为挑战黑洞攻击&#xff0c;是一种DDoS&#xff08;分布式拒绝服务&#xff09;攻击的常见类型。攻击者借助代理服务器生成指向受害主机的合法请求&#xff0c;实现对HTTP业务的攻击。这种…

在 Oracle 数据库中使用正则表达式

在 Oracle 数据库中使用正则表达式 0. 引言1. 什么是正则表达式&#xff1f;2. Oracle 数据库正则表达式支持3. 用于正则表达式的 Oracle 数据库 SQL 函数4. 正则表达式中支持的元字符5. 构建正则表达式 0. 引言 本文介绍 Oracle 数据库的正则表达式支持。本文涵盖以下主题&am…