不翻墙安装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.rhkb.cn/news/359522.html

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

相关文章

外贸行业 - 收汇日期

“收汇日期”指的是外贸业务中&#xff0c;出口方从进口方收到货款的具体日期。在外贸交易中&#xff0c;特别是使用信用证&#xff08;Letter of Credit, L/C&#xff09;、电汇&#xff08;Telegraphic Transfer, T/T&#xff09;、付款交单&#xff08;Documents against Pa…

《2024云安全资源池 能力指南》

《2024云安全资源池 能力指南》这份报告不仅梳理了云安全资源池的发展历程,还深入探讨了其在当前云计算环境下的重要性和必要性。报告详细分析了云安全资源池的市场需求、技术架构、关键技术以及行业应用案例,为政企用户提供了全面的云安全解决方案。通过资料收集、问卷调研、企…

深入了解 GPT-4 和 ChatGPT 的 API---OpenAI Playground

文章目录 基本概念OpenAI API 提供的可用模型在 OpenAI Playground 中使用 GPT 模型 掌握GPT-4 和 ChatGPT 的 API 的使用方法&#xff0c;以便有效地将它们集成到 Python 应用程序中。首先&#xff0c;需要了解 OpenAI Playground。这将使你在编写代码之前更好地了解模型。接着…

如何将一个web端程序打包成一个pc端程序(exe文件)?

如何将一个Web端程序打包成一个PC端程序&#xff0c;例如一个可执行的EXE文件&#xff0c;是许多开发者常见的需求。下面将详细解释如何使用Nativefier工具将Web端程序打包成PC端程序的具体步骤。 目录 下载并安装Node.js验证Node.js和npm的安装安装Nativefier使用Nativefier打…

鸿蒙Harmony角落里的知识:从ECMA规范到ArkTS接口(一)

前言&#xff1a; 在深入理解和使用ArkTS中的数组操作之前&#xff0c;我们有必要先了解ECMAScript&#xff08;ECMA&#xff09;规范中的规定。ECMA规范是JavaScript语言的官方标准&#xff0c;而ArkTS作为JavaScript的超集&#xff0c;也遵守了这些规定。本系列文章旨在探讨…

学期结束如何发布期末成绩?

当期末的试卷最后一张被收起&#xff0c;当教室里的喧嚣逐渐沉寂&#xff0c;学生们的心中充满了对成绩的期待与忐忑。期末成绩&#xff0c;关乎着学生的心情&#xff0c;更关系到他们的未来学习动力。那么&#xff0c;如何在保护学生隐私的同时&#xff0c;高效地公布成绩呢&a…

文件怎么加密?电脑文件加密,分享5个实用方法

通常情况下&#xff0c;人们对手机数据的保护比对电脑数据更为重视。许多人使用指纹和密码来防止他人窥视聊天记录和照片。然而&#xff0c;电脑上的数据却常常被忽视。大多数用户仅设置了电脑登录密码&#xff0c;认为这样就足以保护电脑和其中的文件。然而如果你也是这样认为…

chatglm系列知识

一、目录 chatglm 是什么语言模型与transformer decoder 的区别解释prefix LM与Cause LMchatglm&#xff08;prefix LM&#xff09;与decoder-only LM 核心区别glm 架构chatglm 预训练方式chatglm 微调chatglm与chatglm2、chatglm3的区别chatglm 激活函数采用gelu, 为什么chat…

办理北京公司注册地址异常变更要求和流程

在北京注册公司时选择注册地址是非常重要的一环&#xff0c;注册地址不仅体现在营业执照上&#xff0c;在网上也有公示信息&#xff0c;一般选用的是商用地址和商住两用地址&#xff0c;在公司经营过程中&#xff0c;因为经营需要变更注册地址&#xff0c;也要依法变更&#xf…

详解Spring AOP(一)

目录 1. AOP概述 2.Spring AOP快速入门 2.1引入AOP依赖 2.2编写AOP程序 3.Spring AOP核心概念 3.1切点&#xff08;PointCut&#xff09; 3.2连接点&#xff08;Join Point&#xff09; 3.3通知&#xff08;Advice&#xff09; 3.4切面&#xff08;Aspect&#xff09; …

时间?空间?复杂度??

1.什么是时间复杂度和空间复杂度&#xff1f; 1.1算法效率 算法效率分析分为两种&#xff1a;第一种是时间效率&#xff0c;第二种是空间效率。时间效率被称为时间复杂度&#xff0c;而空间效率被称为空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度&#xff0c;而空…

CentOS 8.5 - 配置ssh的免密登录

文章目录 生成ssh密钥公钥内容放入服务器 生成ssh密钥 在本地主机安装 ssh工具&#xff0c;并生成公钥、私钥。 # 命令行输入 ssh-keygen -r rsa# 会在当前用户的家目录下生成一个.ssh目录公钥内容放入服务器 将上一步生成的id_rsa.pub公钥的内容复制到远程服务器 # 编辑文…

Day17--654.最大二叉树+617.合并二叉树+700.二叉搜索树中的搜索+ 98.验证二叉搜索树

一、654.最大二叉树 题目链接&#xff1a;https://leetcode.cn/problems/maximum-binary-tree/ 文章讲解&#xff1a;https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1MG411G7ox…

SpringMVC系列四: Rest-优雅的url请求风格

Rest请求 &#x1f49e;Rest基本介绍&#x1f49e;Rest风格的url-完成增删改查需求说明代码实现HiddenHttpMethodFilter机制注意事项和细节 &#x1f49e;课后作业 上一讲, 我们学习的是SpringMVC系列三: Postman(接口测试工具) 现在打开springmvc项目 &#x1f49e;Rest基本介…

Part 5.2 KMP

KMP 算法可以用来解决模式串匹配问题。 【模板】KMP 题目描述 给出两个字符串 s 1 s_1 s1​ 和 s 2 s_2 s2​&#xff0c;若 s 1 s_1 s1​ 的区间 [ l , r ] [l, r] [l,r] 子串与 s 2 s_2 s2​ 完全相同&#xff0c;则称 s 2 s_2 s2​ 在 s 1 s_1 s1​ 中出现了&…

「动态规划」如何求最长递增子序列的长度?

300. 最长递增子序列https://leetcode.cn/problems/longest-increasing-subsequence/description/ 给你一个整数数组nums&#xff0c;找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其…

使用Apache Flink实现实时数据同步与清洗:MySQL和Oracle到目标MySQL的ETL流程

使用Apache Flink实现实时数据同步与清洗&#xff1a;MySQL和Oracle到目标MySQL的ETL流程 实现数据同步的ETL&#xff08;抽取、转换、加载&#xff09;过程通常涉及从源系统&#xff08;如数据库、消息队列或文件&#xff09;中抽取数据&#xff0c;进行必要的转换&#xff0…

2024最新版Node.js下载安装及环境配置教程(非常详细)

一、进入官网地址下载安装包 官网&#xff1a;Node.js — Run JavaScript Everywhere 其他版本下载&#xff1a;Node.js — Download Node.js (nodejs.org) 选择对应你系统的Node.js版本 二、安装程序 &#xff08;1&#xff09;下载完成后&#xff0c;双击安装包&#xf…

Go的GUI Fyne开发环境搭建—Windows 11

安装go 到官网下载安装go安装包 https://go.dev/learn/ 通过如下命令检验安装是否成功&#xff0c;出现版本号则安装成功 go version安装国内go依赖包代理 go env -w GOPROXYhttps://goproxy.cn安装gcc编译器 直接用官网提供的安装建议第二条&#xff0c;到这个地址进行下载…

二刷算法训练营Day41 (Day40休息) | 动态规划(3/17)

目录 详细布置&#xff1a; 1. 背包问题理论基础 1.1 01背包 2. 46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; 一维dp数组&#xff08;滚动数组&#xff09; 3. 416. 分割等和子集 详细布置&#xff1a; 1. 背包问题理论基础 但说实话&#xff0c;背包九讲…