不翻墙安装yolov8环境下的RT-DETR并实现PCB表面缺陷检测

目录

  • 一、新建conda环境
  • 二、安装yolov8环境
    • 1.克隆安装包
    • 2.安装依赖包
    • 3.测试模型
  • 任务2:基于RT-DETR实现PKU-PCB表面缺陷检测
    • 数据准备
  • 数据增强
      • 测试
  • 总结


一、新建conda环境

创建并激活conda环境:
在conda创建一个名为yolov8的新环境,并在其中安装python3.8,这个环境是独立的不会影响系统中的其他环境:

conda create -n PCBDet python=3.8
conda activate PCBDet

如何删除conda环境
conda remove --name yolov8cs --all

二、安装yolov8环境

1.克隆安装包

代码如下(示例):

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

2.安装依赖包

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述
国内的镜像源,不用翻墙,速度也非常快,达到2.2M,需要稍等一会儿下载与安装;

安装的依赖包如此之多:

Installing collected packages: pytz, py-cpuinfo, mpmath, zipp, urllib3, tzdata, typing-extensions, tqdm, sympy, six, pyyaml, pyparsing, psutil, pillow, packaging, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, kiwisolver, idna, fsspec, fonttools, filelock, cycler, charset-normalizer, certifi, triton, scipy, requests, python-dateutil, opencv-python, nvidia-cusparse-cu12, nvidia-cudnn-cu12, jinja2, importlib-resources, contourpy, pandas, nvidia-cusolver-cu12, matplotlib, torch, seaborn, ultralytics-thop, torchvision, ultralytics
Successfully installed MarkupSafe-2.1.5 certifi-2024.6.2 charset-normalizer-3.3.2 contourpy-1.1.1 cycler-0.12.1 filelock-3.15.3 fonttools-4.53.0 fsspec-2024.6.0 idna-3.7 importlib-resources-6.4.0 jinja2-3.1.4 kiwisolver-1.4.5 matplotlib-3.7.5 mpmath-1.3.0 networkx-3.1 numpy-1.24.4 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.20.5 nvidia-nvjitlink-cu12-12.5.40 nvidia-nvtx-cu12-12.1.105 opencv-python-4.10.0.84 packaging-24.1 pandas-2.0.3 pillow-10.3.0 psutil-6.0.0 py-cpuinfo-9.0.0 pyparsing-3.1.2 python-dateutil-2.9.0.post0 pytz-2024.1 pyyaml-6.0.1 requests-2.32.3 scipy-1.10.1 seaborn-0.13.2 six-1.16.0 sympy-1.12.1 torch-2.3.1 torchvision-0.18.1 tqdm-4.66.4 triton-2.3.1 typing-extensions-4.12.2 tzdata-2024.1 ultralytics-8.2.38 ultralytics-thop-2.0.0 urllib3-2.2.2 zipp-3.19.2

3.测试模型

需要下载RT-DETR.pt模型,直接放在ultralytics安装目录下;

模型下载链接:
https://github.com/ultralytics/assets/releases/download/v8.2.0/rtdetr-l.pt

第二步,新建一个运行脚本runRTDETR.py:

from ultralytics import RTDETR
from PIL import Image
import cv2# 加载预训练的COCO RT-DETR-l模型
model = RTDETR('rtdetr-l.pt')# 显示模型信息(可选)
model.info()# from PIL
im1 = Image.open("figures/bus.jpg")
results = model.predict(source=im1, save=True)  # save plotted images

通过以下命令行‘ python runRTDETR.py’测试模型是否运行成功:

python runRTDETR.py
rt-detr-l summary: 673 layers, 32970476 parameters, 0 gradients, 108.3 GFLOPs
0: 640x640 1 tv, 20.9ms
Speed: 2.9ms preprocess, 20.9ms inference, 1.5ms postprocess per image at shape (1, 3, 640, 640)
Results saved to /home/wqt/Projects/PCBDet/ultralytics/runs/detect/predict1

运行结果显示:
在这里插入图片描述

到这一步,表示整个安装流程成功!!!

任务2:基于RT-DETR实现PKU-PCB表面缺陷检测

数据准备

1、数据下载链接:https://pan.baidu.com/s/1hoPNd7_SAxOWa2XbBZZuTg(1)训练集划分主要是将数据集分类成训练代码和测试代码,默认数据集会随机按比例8:1:1分类在train,val,test三个文本文件中,运行代码之后路径ImageSets/Main会出现四个文件,主要是写入的内容是训练数据集和测试数据集的图片名称
import os
import random
import argparseparser = argparse.ArgumentParser()#xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='Annotations', type=str, help='input xml label path')#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path')opt = parser.parse_args()trainval_percent = 0.9
train_percent = 0.8
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')for i in list_index:name = total_xml[i][:-4] + '\n'if i in trainval:file_trainval.write(name)if i in train:file_train.write(name)else:file_val.write(name)else:file_test.write(name)file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

(2)用于yolo训练的txt格式代码,主要是将图片数据集标注后的xml文件中的标注信息读取出来并写入txt文件,运行后在labels文件夹中出现所有图片数据集的标注信息并且会在文件夹生成train.txt和val.txt,里面主要是训练集和测试集的图片路径。

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os
from os import getcwd
sets = ['train', 'val']
classes = ["missing_hole","mouse_bite","open_circuit","short","spur","spurious_copper"]  # 改成自己的类别
abs_path = os.getcwd()
print(abs_path)
def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, h
# Spur  Spurious_copper
def conver_annotation(image_id):in_file = open('Annotations/%s.xml' % (image_id), encoding='UTF-8')out_file = open('labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').text#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))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
wd = getcwd()
for image_set in sets:if not os.path.exists('labels/'):os.makedirs('labels/')image_ids = open('ImageSets/Main/%s.txt' % (image_set)).read().strip().split()list_file = open('%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write(abs_path + '/images/%s.jpg\n' % (image_id))conver_annotation(image_id)list_file.close()

2、工程怎么读:ultralytics/cfg/datasets下写一个读取数据集的yaml文件

	train: /home/wqt/Projects/data/PCB_DATASET2YOLO/train.txt #训练数据集的路径val: /home/wqt/Projects/data/PCB_DATASET2YOLO/val.txt #测试数据集的路经nc: 6 #缺陷标签数量names: ['missing_hole', 'mouse_bite', 'open_circuit', 'short', 'spur', 'spurious_copper'] #缺陷名称

3在根目录下建立一个运行脚本trainPCB.py:

from ultralytics import RTDETR
model = RTDETR('rtdetr-l.pt') # 加载预训练的COCO RT-DETR-l模型
model.train(model="rtdetr-l.yaml",data='PKUPCB.yaml', #输入上面建立读取数据集的yaml文件epochs=230, #循环230次batch=16,   #批处理,每次输入16个样本imgsz=640)  #输入图片归一化,统一输入尺度为640x640

开始训练:
通过以下命令行运行训练模型:

python  trainPCB.py #这里写自己训练脚本的名字

训练结果,保存到文档;

Validating /home/wqt/Projects/PCBDet/ultralytics/runs/detect/train/weights/best.pt...
Ultralytics YOLOv8.2.38 🚀 Python-3.8.19 torch-2.3.1+cu121 CUDA:0 (NVIDIA GeForce RTX 4090, 24209MiB)
rt-detr-l summary: 498 layers, 31996070 parameters, 0 gradients, 103.5 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 4/4 [00:00<00:00,  5.27it/s]all        125        533      0.957      0.965      0.967      0.507missing_hole         18         77      0.989          1      0.995      0.579mouse_bite         19         84      0.951      0.976      0.969       0.49open_circuit         22         92      0.966      0.978      0.971      0.528short         21         86      0.942      0.951      0.949       0.47spur         22         93      0.933      0.935      0.931      0.485spurious_copper         23        101       0.96      0.948      0.984      0.489
Speed: 0.1ms preprocess, 3.0ms inference, 0.0ms loss, 0.1ms postprocess per image
Results saved to /home/wqt/Projects/PCBDet/ultralytics/runs/detect/train #这个就是训练结果的绝对路径

数据增强

数据增强的方法主要有以下几种:

而RT-DETR中要进行数据增强可以通过改变ultralytics/cfg/default.yaml中的数据来达到数据增强的目的:

# degrees: 0.0 # (float) image rotation (+/- deg)
degrees: 10.0 # (float) image rotation (+/- deg)
translate: 0.1 # (float) image translation (+/- fraction)
# scale: 0.5 # (float) image scale (+/- gain)
scale: 0.25 # (float) image scale (+/- gain)
shear: 0.0 # (float) image shear (+/- deg)
perspective: 0.0 # (float) image perspective (+/- fraction), range 0-0.001
# flipud: 0.0 # (float) image flip up-down (probability)
flipud: 0.2 # (float) image flip up-down (probability)

这里主要是对数据集图片进行了10度的旋转(degrees),缩小成原图的0.75倍(scale),最后是百分之二十的上下翻转的概率。
然后在运行训练脚本。
训练结果:

Validating /home/wqt/Projects/PCBDet/ultralytics/runs/detect/train/weights/best.pt...
Ultralytics YOLOv8.2.38 🚀 Python-3.8.19 torch-2.3.1+cu121 CUDA:0 (NVIDIA GeForce RTX 4090, 24209MiB)
rt-detr-l summary: 498 layers, 31996070 parameters, 0 gradients, 103.5 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 4/4 [00:00<00:00,  5.43it/s]all        125        533      0.965      0.965      0.977       0.52missing_hole         18         77      0.977          1      0.995      0.594mouse_bite         19         84      0.964      0.964      0.973       0.52open_circuit         22         92      0.977       0.92      0.951      0.517short         21         86      0.977       0.97      0.985      0.479spur         22         93      0.939      0.957      0.971      0.488spurious_copper         23        101      0.957       0.98      0.985      0.524
Speed: 0.1ms preprocess, 3.0ms inference, 0.0ms loss, 0.1ms postprocess per image
Results saved to /home/wqt/Projects/PCBDet/ultralytics/runs/detect/train

正常测试的数据:
在这里插入图片描述
没有使用数据增强的训练:
在这里插入图片描述

数据增强的数据:
在这里插入图片描述

测试

利用训练好的模型来测试单张图片:


from ultralytics import RTDETR
from PIL import Image
import cv2modelPath = "runs/detect/train6/weights/best.pt"
# 加载预训练的COCO RT-DETR-l模型
model = RTDETR(modelPath)# 显示模型信息(可选)
model.info()imgPath = "resource/01_missing_hole_01.jpg"
# from PIL
im1 = Image.open(imgPath)
results = model.predict(source=im1, save=True)  # save plotted images

总结

通过不用翻墙就能实现yolo平台的RT-DETR使用,并迁移学习PCB表面缺陷检测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国际网络专线的开通流程

1. 选择服务商&#xff1a;首先&#xff0c;您需要选择一个可靠的服务商来提供国际网络专线服务。确保服务商具有良好的声誉和专业知识&#xff0c;以便为您提供高质量的网络连接和支持。 2. 评估需求&#xff1a;在与服务商沟通之前&#xff0c;您需要明确自己的网络需求。这…

dp经典问题:LCS问题

dp&#xff1a;LCS问题 最长公共子序列&#xff08;Longest Common Subsequence, LCS&#xff09;问题 是寻找两个字符串中最长的子序列&#xff0c;使得这个子序列在两个字符串中出现的相对顺序保持一致&#xff0c;但不要求连续。 力扣原题链接 1.定义 给定两个字符串 S1…

猫狗识别—视频识别

猫狗识别—视频识别 1. 导入所需的库&#xff1a;2. 创建Tkinter主窗口并设置标题&#xff1a;3. 设置窗口的宽度和高度&#xff1a;4. 创建一个Canvas&#xff0c;它将用于显示视频帧&#xff1a;5. 初始化一个视频流变量cap&#xff0c;用于存储OpenCV的视频捕获对象&#xf…

【速速收藏】适用于Linux系统的五个优秀PDF编辑器

PDF (Portable Document Format) 是便携文档格式的缩写&#xff0c;这是一种用于电子共享文档的标准格式&#xff0c;广泛应用于各种文档类型的存储和分发。然而&#xff0c;有时我们可能需要对PDF文档进行更改和编辑。本文将介绍五款在Linux平台上广受欢迎的PDF编辑器。 ​​…

陀螺仪LSM6DSV16X与AI集成(8)----MotionFX库解析空间坐标

陀螺仪LSM6DSV16X与AI集成.8--MotionFX库解析空间坐标 概述视频教学样品申请源码下载开启CRC串口设置开启X-CUBE-MEMS1设置加速度和角速度量程速率选择设置FIFO速率设置FIFO时间戳批处理速率配置过滤链初始化定义MotionFX文件卡尔曼滤波算法主程序执行流程lsm6dsv16x_motion_fx…

【分布式事务】Seata AT实战

目录 Seata 介绍 Seata 术语 Seata AT 模式 介绍 实战&#xff08;nacos注册中心&#xff0c;db存储&#xff09; 部署 Seata 实现 RM 实现 TM 可能遇到的问题 1. Seata 部署成功&#xff0c;服务启动成功&#xff0c;全局事务不生效 2. 服务启动报错 can not get …

[java]集合类stream的相关操作

1.对list中的map进行分组 下面例子中&#xff0c;根据高度height属性进行分组 List<Map<String, Float>>originalList new ArrayList<>();originalList.add(new HashMap<String,Float>() {{put("lng", 180.0f);put("lat",90f);…

C++使用Poco库封装一个FTP客户端类

0x00 Poco库中 Poco::Net::FTPClientSession Poco库中FTP客户端类是 Poco::Net::FTPClientSession , 该类的接口比较简单。 上传文件接口&#xff1a; beginUpload() , endUpload() 下载文件接口&#xff1a; beginDownload() , endDownload() 0x01 FTPCli类说明 FTPCli类…

CSS规则——font-face

font-face 什么是font-face&#xff1f; 想要让网页文字千变万化&#xff0c;仅靠font-family还不够&#xff0c;还要借助font-face&#xff08;是一个 CSS 规则&#xff0c;它允许你在网页上使用自定义字体&#xff0c;而不仅仅是用户系统中预装的字体。这意味着你可以通过提…

jemeter基本使用

后端关验签&#xff0c;设置请求头编码和token 配置编码和token

Linux安装minio及mc客户端(包含ARM处理器架构)

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

练习实践:ubuntu18.04安装、配置Nginx+PHP环境,两种配置方式,多站点

参考来源&#xff1a; https://help.aliyun.com/document_detail/464753.html https://www.cnblogs.com/laosan007/p/12803287.html https://blog.csdn.net/qq_55364077/article/details/132207083 【安装同版本7.2的php】 需要知道对应php和nginx的安装版本 需要安装php-fpm…

<sa8650>QCX Usecase 使用详解—如何在 QCX 框架中添加新的自定义Usecase/Pipeline

<sa8650>QCX Usecase 使用详解—如何在 QCX 框架中添加新的自定义Usecase/Pipeline 一、前言二、为 Usecase/Pipeline 创建新文件夹三、Create Usecase XML四、为 camxAutoo_Test 管道创建拓扑五、添加Usecase/Pipeline编译六、 使用 Qcarcam_Test 应用程序运行Usecase一、前…

【总线】AXI4第五课时:信号描述

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

【高性能计算笔记】

第1章 - 高性能计算介绍 1. 概念&#xff1a; 高性能计算(High performance computing&#xff0c;缩写HPC)&#xff1a; 指通常使用很多处理器&#xff08;作为单个机器的一部分&#xff09;或者某一集群中组织的几台计算机&#xff08;作为单个计算资源操作&#xff09;的…

零门槛用AI,302.AI让人工智能变得简单易用

当下人工智能火爆&#xff0c;提到AI&#xff0c;几乎每个人都能说上几句&#xff0c;但是你真的会使用AI吗&#xff1f; 当涉及到如何实际使用AI时&#xff0c;许多人可能会觉得它太过高深莫测&#xff0c;从而产生一种距离感&#xff0c;不知如何开始。我和大家也一样&#x…

Android性能优化-内存优化

&#xff11;、为什么进行内存优化&#xff08;如果不进行内存优化&#xff09; APP运营内存限制&#xff0c;OOM导致APP崩溃 APP性能&#xff0c;流畅性&#xff0c;响应速度和体验 2、Android内存管理方式: Android系统内存分配与回收方式 APP内存限制机制 切换应用时&…

AGV选型要点及步骤,保证企业选择的AGV小车更实用

AGV AGV小车作为智能化物流仓储不可或缺的工具&#xff0c;在制造业得到了广泛的应用&#xff0c;市场需求呈现出井喷式增长。但是AGV市场还存在着很多问题&#xff0c;制造企业在产品选型时往往缺乏正确的引导。 AGV智能仓储 毫无疑问,我们的自动化物流系统已离不开AGV小车了,…

链在一起Chained Together没中文 超好用的一键汉化工具推荐

《链在一起》一款新的可联机冒险跑酷类游戏&#xff0c;游戏里玩家将与你的同伴被链在一起&#xff0c;然后开始你的旅程&#xff0c;在地狱的深处&#xff0c;任务是通过尽可能高的攀登逃离地狱。 每一次跳跃都需要完美的协调才能攀上平台并逃离灼热&#xff0c;穿越众多世界&…

服务器win10server,python安装paddleocr的踩坑日记

最近由于需要图像文字识别的简单业务&#xff0c;研究了一下&#xff0c;一是用大厂的文字识别api&#xff0c;如百度腾讯等&#xff0c;但这种免费版只有有限的调用次数&#xff0c;如百度只有每月只有1000次调用额度&#xff0c;个人也够用&#xff0c;但由于业务量大&#x…