当前位置: 首页 > news >正文

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)中心点误差:

X-\hat{X} 真实值与预测值的平方差        _{S}2  我们有多少网格单元    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

http://www.lryc.cn/news/475752.html

相关文章:

  • Spring中的资源以及分类
  • 初步认识Java,及使用
  • C,C++被static标记的变量和函数分别是什么意思
  • Map 不常用方法介绍
  • 论文翻译:ICLR 2024.DETECTING PRETRAINING DATA FROM LARGE LANGUAGE MODELS
  • Spring 框架精髓:从基础到分布式架构的进阶之路
  • 深入理解C++ Lambda表达式:语法、用法与原理及其包装器的使用
  • C# 编程语言:跨时代的革命
  • 恋爱脑学Rust之Box与RC的对比
  • Rust 力扣 - 1423. 可获得的最大点数
  • Android15音频进阶之Cuttlefish搭建音频开发环境(九十二)
  • 发现不为人知的AI宝藏:发现AI新天地! —— 《第八期》
  • 基于物联网设计的地下煤矿安全监测与预警
  • Java 23 的12 个新特性!!
  • .NET 8 中 Entity Framework Core 的使用
  • ai数字人分身123口播克隆数字人小程序源码_博纳软云
  • 从0开始学PHP面向对象内容之(类,对象,构造/析构函数)
  • openGauss数据库-头歌实验1-5 修改数据库
  • 《JVM第3课》运行时数据区
  • 阅读笔记 Contemporary strategy analysis Chapter 14
  • 2024网鼎杯青龙组wp:Crypto2
  • 能通过Ping命令访问CentOS 9 Stream,但在使用Xshell连接
  • Oracle 第19章:高级查询技术
  • Excel:vba运行时错误“7“:内存溢出错误
  • 【MyBatis源码】BoundSql分析
  • KTHREAD--InitialStack和KernelStack和TSS的esp0
  • Skia基础运用(Ubuntu环境下使用BUILD.gn)
  • Vue中props和data的优先级哪个更高?
  • springboot2.x使用SSE方式代理或者转发其他流式接口
  • consul入门教程