ZYNQ7045之YOLO部署——FPGA-ZYNQ Soc实战笔记1
一、简介
1、目标检测概念
2、目标检测应用
3、目标检测发展历程
二、YOLO V1
1、输入
必须为448x448分辨率
2、网络结构
卷积 池化 卷积 池化
3、输出
最终7x7x30表示,7x7个各自,每个格子有30个数据,30个数据包含两个部分
1:位置信息(第一个候选框中心点x) 2:预测中心点纵坐标 y 3:候选框W宽度 4:高度H
5:第一个候选框置信度
6:位置信息(第二个候选框中心点x) 7:预测中心点纵坐标 y 8:候选框W宽度 9:高度H
10:第一个候选框置信度
11~20:类别信息
-->/300 / 300
-->x2 x2 --> /300 /300
数据举例:
4、损失函数
(1)中心点误差:
真实值与预测值的平方差
我们有多少网格单元 B有多少个候选框 含有物体
为1 不含物体为0 不含物体损失函数直接为0
中心点误差只针对含有物体的候选框进行计算 计算与真实中心点之间的距离
(2)高度宽度误差:
使用根号目的减小误差
(3)置信度误差:
含有物体的时候:
不含有物体的时候:
(4)类被误差 :
5、YOLO V1总结
输入时固定的,因为存在全连接层,网络有24层卷积,2个全连接层,包含大量1x1卷积,最终7x7x30表示,7x7个各自,每个格子有30个数据,30个数据包含两个部分
1:位置信息(第一个候选框中心点x) 2:预测中心点纵坐标 y 3:候选框W宽度 4:高度H
5:第一个候选框置信度
6:位置信息(第二个候选框中心点x) 7:预测中心点纵坐标 y 8:候选框W宽度 9:高度H
10:第一个候选框置信度
11~20:类别信息
以及最后的损失函数
三、YOLO V2
1、模型的输入
不同与V1 引入了ImageNet448 x 448的训练 同时引入高精度的分类器 多尺度训练
2、网络部分
BN层:
无全连接层!!
3、输出部分
13*13*5 不同于V1的 7*7*2
4、损失函数
M = 5 第一行置信度损失 第二行前12800次计算收敛先验框 第三行正样本位置损失 第四行正样本置信损失 第五行类别损失
1、第一行负责检测物体置信度损失
2、预测框与先验框损失
3、预测框负责预测的位置损失
4、预测框负责预测物体他的置信度损失
5、物体的类别损失(分类损失)
四、YOLO V3
1、输入 网络 输出
2、损失函数
3、网络结构
(1)特征提取 backbone
五、ZYNQ部署思路
HLS 01 向量加法器设计:
1、目标——两个向量对应元素相加
#include "vector_add.h"#define MAXNUM 50void vector_add_top(float A[MAXNUM],float B[MAXNUM],float C[MAXNUM]){for(int i = 0;i < MAXNUM ; i++){C[i] = A[i] + B[i];}
}
2、开发问题——数据类型对生成电路的影响
float型
int型 (最优)
fixed型
3、如何并行加速?
bug1当数组过大,采用unroll展开循环报错
bug2减小数组,采用unroll展开循环,仍不能同时进行每个元素的对应加法
原因:受限于RAM端口数量,RAM最多双端口,最多支持两个数据同时读写
将ABC进行展开:
#include "vector_add.h"#define MAXNUM 50void vector_add_top(D32 A[MAXNUM],D32 B[MAXNUM],D32 C[MAXNUM]){
#pragma HLS ARRAY_PARTITION variable=A complete dim=1
#pragma HLS ARRAY_PARTITION variable=B complete dim=1
#pragma HLS ARRAY_PARTITION variable=C complete dim=1for(int i = 0;i < MAXNUM ; i++){
#pragma HLS UNROLLC[i] = A[i] + B[i];}
}
将ABC进行分块:
#include "vector_add.h"#define MAXNUM 50void vector_add_top(D32 A[MAXNUM],D32 B[MAXNUM],D32 C[MAXNUM]){
#pragma HLS ARRAY_PARTITION variable=A block factor=2 dim=1
#pragma HLS ARRAY_PARTITION variable=B block factor=2 dim=1
#pragma HLS ARRAY_PARTITION variable=C block factor=2 dim=1for(int i = 0;i < MAXNUM ; i++){
#pragma HLS UNROLLC[i] = A[i] + B[i];}
}
4、对乘法进行测试
#include "vector_add.h"#define MAXNUM 50void vector_add_top(float A[MAXNUM],float B[MAXNUM],float C[MAXNUM]){for(int i = 0;i < MAXNUM ; i++){C[i] = A[i] + B[i];}
}
float型
int型 (最优)
fixed型(精度有保障)
5、如何与PS交互?AXI接口
5.1AXI->HP->DDR
5.2AXIS->DMA->HP->DDR
6、存储测试
(1) RAM_2P_BRAM:
#pragma HLS RESOURCE variable=A_buffer core=RAM_2P_BRAM
#pragma HLS RESOURCE variable=B_buffer core=RAM_2P_BRAM
#pragma HLS RESOURCE variable=C_buffer core=RAM_2P_BRAM
(2) RAM_T2P_BRAM:
#pragma HLS RESOURCE variable=A_buffer core=RAM_T2P_BRAM
#pragma HLS RESOURCE variable=B_buffer core=RAM_T2P_BRAM
#pragma HLS RESOURCE variable=C_buffer core=RAM_T2P_BRAM
(3) RAM_S2P_BRAM:
(4) RAM_2P_LUTRAM:
#pragma HLS RESOURCE variable=A_buffer core=RAM_2P_LUTRAM
#pragma HLS RESOURCE variable=B_buffer core=RAM_2P_LUTRAM
#pragma HLS RESOURCE variable=C_buffer core=RAM_2P_LUTRAM
(5) RAM_S2P_LUTRAM:
#pragma HLS RESOURCE variable=A_buffer core=RAM_S2P_LUTRAM
#pragma HLS RESOURCE variable=B_buffer core=RAM_S2P_LUTRAM
#pragma HLS RESOURCE variable=C_buffer core=RAM_S2P_LUTRAM
相关文章:

ZYNQ7045之YOLO部署——FPGA-ZYNQ Soc实战笔记1
一、简介 1、目标检测概念 2、目标检测应用 3、目标检测发展历程 二、YOLO V1 1、输入 必须为448x448分辨率 2、网络结构 卷积 池化 卷积 池化 3、输出 最终7x7x30表示,7x7个各自,每个格子有30个数据,30个数据包含两个部分 1:…...

Spring中的资源以及分类
Spring中的资源都被封装成 Resource 对象 以上是我测试代码的项目编译后的目录结构,target 所在的目录是 D:\\IdeaProjects\\study-spring\\ public void printStream(InputStream inputStream) throws IOException {Reader reader new InputStreamReader(input…...

初步认识Java,及使用
JAVA 特点 简单性 面向对象 分布式 健壮性 安全性 体系结构中立(平台无关) 可移植性 解释执行 高性能 多线程 动态 发展史 JDK,Eclipse下载,…...
C,C++被static标记的变量和函数分别是什么意思
被static关键字标记的变量和函数的含义 在C中,static关键字可以用于变量和函数的声明,它具有不同的语义和用途:static变量 1.全局静态变量:当全局变量被声明为static时,其作用域被限制为声明它的文件,即使使…...
Map 不常用方法介绍
getOrDefault 尝试获取key对应的值,如果未获取到,就返回默认值。 例子: private static void testGetOrDefault() {Map<String, String> map new HashMap<>(4);map.put("123", "123");String key "…...

论文翻译:ICLR 2024.DETECTING PRETRAINING DATA FROM LARGE LANGUAGE MODELS
文章目录 检测大型语言模型的预训练数据摘要1 引言2 预训练数据检测问题2.1 问题定义和挑战2.2 WIKIMIA:动态评估基准 3 MIN-K% PROB:简单的无参考预训练数据检测方法4 实验4.1 数据集和指标4.2 基线检测方法4.3 实现和结果4.4 分析 5 案例研究ÿ…...

Spring 框架精髓:从基础到分布式架构的进阶之路
一、概述 (一)Spring框架概念 1.概念: Spring框架是一个用于简化Java企业级应用开发的开源应用程序框架。 2.Spring框架的核心与提供的技术支持: 核心: IoC控制反转|反转控制:利用框架创建类的对象的…...

深入理解C++ Lambda表达式:语法、用法与原理及其包装器的使用
深入理解C Lambda表达式:语法、用法与原理及其包装器的使用 lambda表达式C98中的一个例子lambda表达式语法lambda表达式各部分说明捕获列表说明 函数对象与lambda表达式 包装器function包装器 bind 🌏个人博客主页: 个人主页 本文深入介绍了…...
C# 编程语言:跨时代的革命
C# 是一种由微软开发的现代、类型安全、面向对象的编程语言,自2000年推出以来,它已经成为.NET平台的核心组成部分。在本文中,我们将探讨C#语言的特点、优势以及它在软件开发领域中的应用。 C# 语言特点 类型安全和自动垃圾回收 C# 是一种类…...

恋爱脑学Rust之Box与RC的对比
在遥远的某个小镇,住着一对年轻的恋人:阿丽和小明。他们的爱情故事就像 Rust 中的 Rc 和 Box 智能指针那样,有着各自不同的「所有权」和「共享」的理解。 故事背景 阿丽和小明准备共同养一株非常珍贵的花(我们称之为“心之花”&…...

Rust 力扣 - 1423. 可获得的最大点数
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 题目所求结果存在下述等式 可获得的最大点数 所有卡牌的点数之和 - 长度为(卡牌数量 - k)的窗口的点数之和的最小值 我们遍历长度为(卡牌数量 - k)的窗口&#…...

Android15音频进阶之Cuttlefish搭建音频开发环境(九十二)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…...

发现不为人知的AI宝藏:发现AI新天地! —— 《第八期》
在人工智能(AI)领域,尽管ChatGPT、Midjourney等知名产品广为人知,但还有许多小众而有趣的AI工具等待你的探索。本文将推荐五款实用的AI工具,它们不仅功能强大,而且使用简单,帮助你在各种场景中提…...

基于物联网设计的地下煤矿安全监测与预警
文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】NBIOT-BC26模块【2】MQ5传感器【4】DHT11传感器【5】红外热释电人体检…...

Java 23 的12 个新特性!!
Java 23 来啦!和 Java 22 一样,这也是一个非 LTS(长期支持)版本,Oracle 仅提供六个月的支持。下一个长期支持版是 Java 25,预计明年 9 月份发布。 Java 23 一共有 12 个新特性! 有同学表示&…...

.NET 8 中 Entity Framework Core 的使用
本文代码:https://download.csdn.net/download/hefeng_aspnet/89935738 概述 Entity Framework Core (EF Core) 已成为 .NET 开发中数据访问的基石工具,为开发人员提供了强大而多功能的解决方案。随着 .NET 8 和 C# 10 中引入的改进,开发人…...

ai数字人分身123口播克隆数字人小程序源码_博纳软云
功能配置 一、用户 用户管理小黑屋用户反馈登录设置短信参数 二、作品 视频作品背景音乐库背景音乐分类 三、形象分身 上传记录视频要求参数配置 四、声音克隆 克隆记录参数配置声音要求文案示例 五、AI文案 生成记录创作模型模型分类Al配置 六、充值 充值订单积分套…...

从0开始学PHP面向对象内容之(类,对象,构造/析构函数)
上期我们讲了面向对象的一些基本信息,这期让我们详细的了解一下 一、面向对象—类 1、PHP类的定义语法: <?php class className {var $var1;var $var2 "constant string";function classfunc ($arg1, $arg2) {[..]}[..] } ?>2、解…...

openGauss数据库-头歌实验1-5 修改数据库
一、查看表结构与修改表名 (一)任务描述 本关任务:修改表名,并能顺利查询到修改后表的结构。 (二)相关知识 为了完成本关任务,你需要掌握: 1.如何查看表的结构; 2.如…...

《JVM第3课》运行时数据区
无痛快速学习入门JVM,欢迎订阅本免费专栏 运行时数据区结构图如下: 可分为 5 个区域,分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用,会在后面的文章展开讲。 类加载子系统会把类信息…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...