基于yolov10的PCB检测算法研究

内容:项目将YOLOV10创新后的PCB检测算法成功部署到GD32H757上,实现PCB缺陷的工业产线实时检测。

项目主要支持开源代码:HomiKetalys/gd32ai-modelzoo: Provide deployable deep learning models on gd32 (github.com)

(想了解将AI模型部署到边缘MCU设备上,比如STM32/GD32,可以跟着这个开源项目学习)

目前有图像分类,目标检测模型。这个模型库有如下特点:

  • 开箱即用,深度适配keil5工程,可以将模型直接部署进keil5工程中,无需复杂的配置keil5工程即可使用部署的模型,支持ARMCC和GCC。
  • 完全免费的推理框架TinyEngine,运行速度在F4和H7系列上处与业内前沿,支持GCC和ARMCC(AC6)。
  • 支持X-CUBE-AI。
  • 模型运行时的内存占用峰值可调,内存占用峰值远低于同类模型库。
  • 稀疏块式推理,静态场景下可以自动根据目标稀疏性减少推理时间,目标检测模型推理时间低于同类模型库。
  • 提供了训练脚本,模型可重新训练,同时提供了预训练模型,可以通过迁移学习以适应不同应用。

注意:项目大大,人非常好,会认真及时回复问题和技术难题。

1、yolov10算法选择与创新

由图所示,能够帮助我们更清楚地了解各模型在实际应用中的性能表现,选择YOLOv10n模型用于PCB缺陷检测模型创新的基础模型PCB表面缺陷存在缺陷复杂且呈现的形状多样,缺陷特征信息少分辨率低和缺陷特征与背景特征相似的特征,因此还需要根据PCB缺陷的特性进一步改进YOLOv10n以实现快速和精确的检测。

为了实现对PCB缺陷的快速和精确检测、适应PCB缺陷形态的多样性,首先,重构了YOLOv10的CSPLayer_2Conv模块,引入了可变形卷积的优势,并设计了CSPLayer_2DCNv3模块。其次,采用SPDConv的下采样,保留了浅层特征中丰富的细粒度信息,有效应对了PCB表面缺陷的小面积比例和与背景相似的特性。最后针对模型复杂,参数量大的问题,简化了骨干网络的结构,特征融合方式采用加权融合,减少计算量和参数量。

2、系统整体研究方案

本系统功能主要是PCB质检功能、缺陷实时预警两大功能。系统整体研究方案包括:数字孪生大屏的设计与实现、质检交互界面的设计与实现、缺陷检测算法研究、缺陷检测模型轻量化与部署和边缘设备搭建和代码实现。

该研究方案框架不仅涵盖了从数据处理到模型优化的全流程,还结合了最新的技术方法,确保系统在资源受限的环境中依然能够高效运行,满足工业应用的需求。

图3-1系统整体研究方案

2.1 系统整体硬件设计方案

该系统的整体硬件结构包括相机、通信模组、光源、传感器部分、数字大屏、GD32H757MCU、传送带、PC端和服务器。

系统质检功能数据流:实现对印制电路板(PCB)的质检检测和检测报告生成的功能,该过程主要在本地PC端进行。首先,通过质检交互界面获取需要质检的PCB图像所在的文件路径,并读取该路径下所有PCB板的视觉图像信息。接着,将这些图像信息输入到缺陷检测模型中进行推理,并将推理结果实时显示在质检交互界面和数字孪生大屏上。随后,检测人员在质检界面填写相关信息,系统即可一键生成详细的质检报告,并将数据同步至云端,实现高效的质检管理和数据共享。

系统实时监控预警功能数据流:首先,PCB通过传动机构移动至摄像头和光源下方。摄像头捕捉PCB图像,并在充足光照条件下确保图像清晰度。捕捉到的图像数据传输至MCU(微控制单元),MCU对图像数据进行模型推理,识别并定位可能存在的缺陷。推理结果实时显示在TFT_LCD显示屏上,若检测到缺陷,则触发预警信号。同时,MCU将图像数据和检测结果传输至PC端,PC端对接收的数据进行进一步的分析和处理。通过这种方式,系统实现了PCB缺陷检测的实时预警和数据处理,显著提高了检测效率和准确性。

3、硬件设计方案及其电路实现

本研究是基于兆易创新开发板GD32H7系列实现的边缘AI检测设备。我们对YOLOv10_SD模型实现轻量化之后部署到GD32H757开发板上,并成功完成了对PCB的缺陷检测。我们设计了一套硬件实现方案,可以实现基于低功耗MCU边缘端检测流程,使用较低成本的方案完成对PCB板缺陷检测流程,为基于低功耗MCU的边缘AI计算发展提供有力的解决方案。

图5-1 PCB缺陷检测硬件设计方案

本方案所需的硬件包括主控MCU、摄像头模组、通信模块、显示屏模块和服务器;在MCU上部署轻量化后的YOLOv10_SD模型,通过摄像头实时捕获图像,经过AI模型的推理后生成检测结果,通过通信模块实现MCU和服务器之前的数据读写;完成了目标图像数据的实时采集、推理和显示,并将处理的数据日志通过通信模块上传到云服务器端,用户可以通过访问云服务器或者实体服务器来访问和下载检测日志。

4、AI模型的部署到MCU的流程

从浮点CNN模型(使用Keras等框架设计和训练)起步,用户生成优化的C代码(使用STM32Cube.AI工具),并将其集成到计算机视觉框架中,以便在GD32H7上构建计算机视觉应用。在生成C代码时,用户可以选择以下两种选项之一:

  1. 直接从浮点CNN模型生成浮点C代码
  2. 或者对浮点CNN模型进行量化以得到8位模型,然后生成相应的量化C代码

对于大多数CNN模型,第二种选择可以减少资源占用(Flash和RAM)以及推理时间。对最终输出精度的影响取决于CNN模型和量化过程(主要是测试数据集和量化算法)

torch训练好的模型转为通用的ONNX模型,利用STM32Cube.AIonnx模型文件转换为优化的C代码。其过程如下:

图6-4 模型转换为C代码过程

我们将转换的C代码打包并命名为Edge_AI,我们创建了一个头文件用于构建AI模型的接口,并且可以根据宏定义分配输入输出数据的内存位置。我们在.C文件中创建了一个初始化函数,用于初始化AI模型的参数,包括宽度、高度和类型。捕获的图像数据通过数据转换和预处理函数送至模型中进行推理。

4、系统作品图

 


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

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

相关文章

信息打点-红队工具篇FofaQuakeKunyuSuize水泽Arl灯塔

知识点: 1、网络空间四大引擎-Fofa&Quake&Shodan&Zoomeye 2、自动化信息收集项目-ARL灯塔&Suize水泽&Kunyu坤舆 3、单点功能信息收集项目-企查&子域名&指纹识别&社工信息 黑暗引擎: https://fofa.info https://qua…

GPT-4 vs LLaMA3.1:核心技术架构与应用场景对比

目录 前言 一、GPT-4 的核心技术架构 1.1 Transformer 结构概述 1.2 GPT-4 的主要组成部分 1.3 GPT-4 的创新与改进 二、LLaMA3.1 的核心技术架构 2.1 模型概述 2.2 LLaMA3.1 的主要组成部分 2.3 LLaMA3.1 的创新与改进 三、GPT-4 和 LLaMA3.1 的主要差异 3.1 模型规…

Native开发与逆向第五篇 - hook log打印

开发demo 新建native项目&#xff0c;实现log打印字符串。 下载地址&#xff1a;https://download.csdn.net/download/u013170888/89698015 #include <android/log.h> #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, "JNI_LOG", __VA_ARGS__)exte…

WireShark网络分析~部署方式

一、《Wireshark网络分析就这么简单》 第一章学习 声明&#xff1a;文章只限于网络学习和实验&#xff0c;请遵守《网络安全法》。 第一章问题一&#xff1a;两台服务器A和B的网络配置如下(见图1)&#xff0c;B的子网掩码本应该是255.255.255.0&#xff0c;被不小心配成了255.…

深入解析C#中的锁机制:`lock(this)`、`lock(privateObj)`与`lock(staticObj)`的区别

前言 在C#的多线程编程中&#xff0c;lock关键字是确保线程安全的重要工具。它通过锁定特定的对象&#xff0c;防止多个线程同时访问同一块代码&#xff0c;从而避免数据竞争和资源冲突。然而&#xff0c;选择适当的锁对象对于实现高效的线程同步至关重要。本文将深入探讨使用…

无人机之电池篇

无人机电池作为无人机的重要组成部分&#xff0c;其性能、使用、保养及选择都至关重要。以下是对无人机电池的综合介绍&#xff1a; 一、无人机电池的基本参数 电池容量&#xff1a;电池容量直接影响无人机的续航能力。大容量电池&#xff0c;如5000mAh的电池&#xff0c;能提…

Python模块内容总结

参考&#xff1a; Python 模块 | 菜鸟教程 (runoob.com) Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾&#xff0c;包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代…

「OC」初识MVC —— 简单学习UITableView的解耦

「OC」初识MVC —— 简单学习UITableView的解耦 文章目录 「OC」初识MVC —— 简单学习UITableView的解耦写在前面认识MVC解耦数据源代理 创建cell的基础类创建section的相关类分离数据源分离代理总结参考资料 写在前面 最近在学习了解MVC&#xff0c;然后开始发现&#xff0c…

搭建数据库启前后端环境

1、 安装postgre&#xff0c;修改pg_hba.conf文件 2、安装dbeaer 3、任务管理器-服务&#xff1a;查看是否启动postgresql-x64-11 4、连接测试&#xff1a;新建数据库连接 http://127.0.0.1:14269/browser/# pgAdmin等于dbeaver 5、创建数据库&#xff1a; 6、启动后端…

【读书笔记-《30天自制操作系统》-12】Day13

本篇的内容仍然是定时器的相关讲解。上一篇内容中对于中断程序做了许多优化&#xff0c;但是这些优化到底起了多少作用呢&#xff1f;本篇用一种测试方法来进行测试。然后本篇继续引入链表与哨兵的概念&#xff0c;进一步加快超时的中断处理。 1. 主程序简化 开发过程到了这…

反向迭代器:reverse_iterator的实现

目录 前言 特点 注意事项 实现 构造函数 功能函数 在list与vector中的使用 vector list 前言 反向迭代器是一种在序列容器的末尾开始&#xff0c;并向前移动至序列开始处的迭代器。在C中&#xff0c;反向迭代器由标准库中的容器类提供&#xff0c;比如vector、list、d…

问题记录之Qt Creator下qDebug中文乱码

前言 环境如下 Windows11Qt5.14.2 MingWQt Creator 4.11.1 现象如下,调试模式下qDebug输出中文乱码 运行模式下&#xff0c;qDebug输出中文正常显示 解决记录 第一步 升级Qt Creator&#xff0c;由Qt Creator 4.11.1升级为Qt Creator 13.0.2 &#xff0c;此时效果如下…

【深入理解SpringCloud微服务】深入理解微服务配置中心原理,并手写一个微服务配置中心

【深入理解SpringCloud微服务】深入理解微服务配置中心原理&#xff0c;并手写一个微服务配置中心 为什么要使用配置中心配置中心原理如何手写一个配置中心使用PropertySourceLocator监听配置变更&#xff0c;刷新配置 实现一个微服务配置中心服务端库表ConfigCenterController…

Redis从入门再再到入门(下)

文章目录 1.Redis远程连接1.1 Redis远程连接配置1.2 通过桌面版图形化界面连接Redis1.3 通过IDEA中的插件连接Redis 2.Jedis的基本使用2.1 jedis概述2.2 jedis的基本操作2.3 jedis连接池 3.Spring整合Redis3.1 新建maven工程,引入相关依赖3.2 redis.properties3.3 spring-redis…

Python基础性知识(中部分)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1、Python中的语句1.1 顺序语句1.2 条件语句1.3 循环语句1.3.1 while循环1.3.2 for循环1.3.3 break与continue语句 1.4 综合三大语句制作小游戏--人生重开模拟器…

算法设计与分析:实验五 图论——桥问题

实验内容&#xff1a; 1. 桥的定义 在图论中&#xff0c;一条边被称为“桥”代表这条边一旦被删除&#xff0c;这张图的连通块数量会增加。等价地说&#xff0c;一条边是一座桥当且仅当这条边不在任何环上。一张图可以有零或多座桥。 2. 求解问题 找出一个无向图中所有的桥…

若依,前后端分离项目,部署到服务器

1.后端项目用maven打包 正式服的话&#xff0c;测试不用加。 application.yml加上context-path: /prod-api 一定要选择root的ruoyi&#xff0c;他会把你自动打包其他模块的依赖 全部成功。然后去ruoyi-admin拿到这个包&#xff0c;java -jar ruoyi-admin.jar就可以了 将jar上…

Linux上启动redis

1.默认启动方式:在系统的任意位置执行 redis-server即可启动 ps:这是前端界面启动&#xff0c;无法直接连接redis&#xff0c;想要连接的话只能另外启动一个窗口&#xff0c;因此下面我们介绍后台启动redis 2.指定配置启动&#xff1a; redis的配置文件位置&#xff1a…

数学建模--皮尔逊相关系数、斯皮尔曼相关系数

目录 1.总体的皮尔逊相关系数 2.样本的皮尔逊相关系数 3.对于皮尔逊相关系数的认识 4.描述性统计以及corr函数 ​编辑 5.数据导入实际操作 6.引入假设性检验 6.1简单认识 6.2具体步骤 7.p值判断法 8.检验正态分布 8.1jb检验 8.2威尔克检验&#xff1a;针对于p值进行…

Java基础(6)- Java代码笔记3

目录 一、二维数组 1.二维数组定义 a.动态初始化 b.静态初始化 c.简单静态初始化 2.获取数组长度 二、方法 1.无参无返回值方法 2.有参无返回值方法 3.无参有返回值方法 4.有参有返回值方法 5.形式参数和实际参数 6.三层架构思想 7.方法注意事项 8.数组作为方法…