当前位置: 首页 > 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.mrgr.cn/news/64889.html

相关文章:

  • PAT甲级-1133 Splitting A Linked List
  • Prometheus套装部署到K8S+Dashboard部署详解
  • 动态规划—目标和
  • mac安装brew
  • Puppeteer点击系统:解锁百度流量点击率提升的解决案例
  • 【HTML】——VSCode 基本使用入门和常见操作
  • C#中const与readonly的区别:定义、赋值与用途
  • Observability:OpenTelemetry Elastic 分发简介
  • 全网最全的前端学习路线和编程指南
  • 微服务架构深入理解 | 技术栈
  • 基于java+SpringBoot+Vue的古典舞在线交流平台设计与实现
  • 高频电子线路---调幅方法与检波
  • dup函数-文件描述符
  • n1book web1信息收集
  • Boost服务器端的acceptor、io_context和socket的理解
  • 架构师备考-信息安全
  • 基于 Java 的 Spring Boot 和 Vue 的宠物领养系统设计与实现
  • JVM问题排查分析
  • 各种方法实现瀑布流
  • 026集——CAD动态效果—瞬态实现——vs CAD二次开发
  • 力扣题目解析--罗马数字转整型
  • Linux入门(2)
  • 手机App防沉迷系统
  • ValueError: images do not match
  • GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(3)
  • 14. 数据的输入输出