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

news2024/11/15 19:47:29

目录

  • 一、新建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 argparse
 
parser = 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 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    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
# 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').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_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 = w
        if b4 > h:
            b4 = h
        b = (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 GFLOPs
                 Class     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.507
          missing_hole         18         77      0.989          1      0.995      0.579
            mouse_bite         19         84      0.951      0.976      0.969       0.49
          open_circuit         22         92      0.966      0.978      0.971      0.528
                 short         21         86      0.942      0.951      0.949       0.47
                  spur         22         93      0.933      0.935      0.931      0.485
       spurious_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 GFLOPs
                 Class     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.52
          missing_hole         18         77      0.977          1      0.995      0.594
            mouse_bite         19         84      0.964      0.964      0.973       0.52
          open_circuit         22         92      0.977       0.92      0.951      0.517
                 short         21         86      0.977       0.97      0.985      0.479
                  spur         22         93      0.939      0.957      0.971      0.488
       spurious_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 cv2

modelPath = "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.coloradmin.cn/o/1858012.html

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

相关文章

os7安装gitlab

gitlab安装要求&#xff1a;os7以上版本&#xff0c;4G内存&#xff0c;磁盘50GB 1.克隆 由于我这里不想影响原来的&#xff0c;所以这里克隆一个os系统。如果其他是第一次安装则不用。 2.修改ip地址 cd /etc/sysconfig/network-scriptsvi ifcfg-ens33 按&#xff1a;insert…

02-样式设置【翻译官网案例】

原文链接&#xff1a;https://nextjs.org/learn/dashboard-app/css-styling 01-nextjs起步03-处理字体和图片04-创建layouts 和pages 页面05-页面之间的导航跳转更多 目前&#xff0c;您的主页没有任何样式。让我们来看看您可以用哪些不同的方式来设计Next.js应用程序的样式。…

如何使用mapXplore将SQLMap数据转储到关系型数据库中

关于mapXplore mapXplore是一款功能强大的SQLMap数据转储与管理工具&#xff0c;该工具基于模块化的理念开发&#xff0c;可以帮助广大研究人员将SQLMap数据提取出来&#xff0c;并转储到类似PostgreSQL或SQLite等关系型数据库中。 功能介绍 当前版本的mapXplore支持下列功能…

对于GPT-5的些许期待

目录 1.概述 2.GPT-5技术突破预测 3.智能系统人类协作 3.1. 辅助决策 3.2. 增强创造力 3.3. 处理复杂任务 3.4.人机协同的未来图景 4.迎接AI技术变革策略 4.1.教育方面 4.2.职业发展方面 4.3.政策制定方面 4.4.人才与技能培养 1.概述 GPT-5作为下一代大语言模型&a…

AI交互及爬虫【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

《2024全球人才趋势研究报告-生命科学行业洞察》

这份报告由美世发布&#xff0c;深入分析了生命科学行业在2024年的现状,并从业务性质的变化、组织文化的演变、员工身心健康问题的整体解决方案、人与数字的融合等方面,洞察了行业趋势和业务驱动力。报告指出,随着全球化和技术创新的不断推进,生命科学行业正经历着翻天覆地的变…

GIS开发如何高质量就业?这几点是关键!

高质量就业&#xff0c;包含薪资和其他福利待遇&#xff0c;在讨论如何高质量就业之前&#xff0c;我们先来看下GIS开发岗位的前景、薪资水平如何&#xff1f;最后讨论一下GIS开发工程师到底需要学习哪些技术&#xff1f; 01 GIS开发岗位呈持续上升趋势 从GIS开发岗位趋势也可…

【Linux】多线程的相关知识点

一、线程安全 1.1 可重入 VS 线程安全 1.1.1 概念 线程安全&#xff1a;多个线程并发执行同一段代码时&#xff0c;不会出现不同的结果。常见对全局变量或者静态变量进行操作&#xff0c;并且没有锁的保护的情况下&#xff0c;会出现问题。重入&#xff1a;同一个函数被不同…

Android性能优化-内存优化

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

【日常开发之Windows共享文件】Java实现Windows共享文件上传下载

文章目录 Windows 配置代码部分Maven代码 Windows 配置 首先开启服务&#xff0c;打开控制面板点击程序 点击启用或关闭Windows功能 SMB1.0选中红框内的 我这边是专门创建了一个用户 创建一个文件夹然后点击属性界面&#xff0c;点击共享 下拉框选择你选择的用户点击添加…

自建消息推送工具 Gotify 实现消息私有化通知

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 之前分享了如何通过 Webhook 将 VPS 与 NAS 上部署的应用消息推送到钉钉、飞书、企业微信,但是对于部分用户来说,可能因为以下种种原因,不方便使用常见的办公 IM 软件来进行消息推送: 消息涉及隐私敏感信息,不希…

艺术签名生成工具哪个好?5个工具定制个性化签名

在追求个性化的现代社会&#xff0c;艺术签名已经成为一种时尚和趋势&#xff0c;越来越多的人开始关注和尝试学习如何设计自己的艺术签名。 这不仅是一种表达自我的方式&#xff0c;也是一种展现个性和独特性的方式。今天让我们一起探索5款艺术签名在线生成工具&#xff0c;让…

【高性能计算笔记】

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

百度Agent初体验(制作步骤+感想)

现在AI Agent很火&#xff0c;最近注册了一个百度Agent体验了一下&#xff0c;并做了个小实验&#xff0c;拿它和零一万物&#xff08;Yi Large&#xff09;和文心一言&#xff08;ERNIE-4.0-8K-latest&#xff09;阅读了相同的一篇网页资讯&#xff0c;输出资讯摘要&#xff0…

shell的正则表达------awk

一、awk&#xff1a;按行取列 1.awk原理&#xff1a;根据指令信息&#xff0c;逐行的读取文本内容&#xff0c;然后按照条件进行格式化输出。 2.awk默认分隔符&#xff1a;空格、tab键&#xff0c;把多个空格自动压缩成一个。 3.awk的选项&#xff1a; awk ‘操作符 {动作}’…

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

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

不同匿名程度的代理本质区别是什么?

区别主要在于匿名的程度不同&#xff0c;就看你自己对匿名要求高不高了。 有三种主要代理类型&#xff1a; 1、透明代理 透明代理的特点就是不提供匿名性&#xff0c;你用它的时候网站是可以直接读取到你的真实IP地址的&#xff0c;需要提供的就可以直接排除它了。 2、匿名…

JVM专题八:JVM如何判断可回收对象

在JVM专题七&#xff1a;JVM垃圾回收机制中提到JVM的垃圾回收机制是一个自动化的后台进程&#xff0c;它通过周期性地检查和回收不可达的对象&#xff08;垃圾&#xff09;&#xff0c;帮助管理内存资源&#xff0c;确保应用程序的高效运行。今天就让我们来看看JVM到底是怎么定…

Shopee API接口:获取搜索栏生成的商品结果列表

一、引言 此接口可以高效获取搜索栏生成的商品结果列表。本文将详细介绍这一核心功能&#xff0c;并探讨其在实际应用中的价值。 二、核心功能介绍——获取搜索栏生成的商品结果列表 请求API及返回示例 http://api.xxxx.com/sp/ll/search/item?keywordiphone&page1&am…

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

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