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 个区域,分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用,会在后面的文章展开讲。 类加载子系统会把类信息…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
标注工具核心架构分析——主窗口的图像显示
🏗️ 标注工具核心架构分析 📋 系统概述 主要有两个核心类,采用经典的 Scene-View 架构模式: 🎯 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 🔧 关键函数&…...
使用 uv 工具快速部署并管理 vLLM 推理环境
uv:现代 Python 项目管理的高效助手 uv:Rust 驱动的 Python 包管理新时代 在部署大语言模型(LLM)推理服务时,vLLM 是一个备受关注的方案,具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...
暴雨新专利解决服务器噪音与性能悖论
6月1日,我国首部数据中心绿色化评价方面国家标准《绿色数据中心评价》正式实施,为我国数据中心的绿色低碳建设提供了明确指引。《评价》首次将噪音控制纳入国家级绿色评价体系,要求从设计隔声结构到运维定期监测实现闭环管控,加速…...
Docker 镜像上传到 AWS ECR:从构建到推送的全流程
一、在 EC2 实例中安装 Docker(适用于 Amazon Linux 2) 步骤 1:连接到 EC2 实例 ssh -i your-key.pem ec2-useryour-ec2-public-ip步骤 2:安装 Docker sudo yum update -y sudo amazon-linux-extras enable docker sudo yum in…...
【HTML】HTML 与 CSS 基础教程
作为 Java 工程师,掌握 HTML 和 CSS 也是需要的,它能让你高效与前端团队协作、调试页面元素,甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML,网页骨架搭建 核心概念:HTML通过标签定义内…...
无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程
硬件环境:NVIDIA Jeston Orin nx 系统:Ubuntu 20.04 任务:跑通 EuRoC MAV Dataset 数据集 展示结果: 编译Vins Fusion 创建工作空间vins_ws # 创建目录结构 mkdir -p ~/vins_ws/srccd ~/vins_ws/src# 初始化工作空间…...
