- 在这篇博客中有详细介绍PS端和PL端的数据交互,以及PL端内部数据流向处理。
- 本篇将详细介绍 PS端 需完成的设计任务。
1. PL端 主要任务
1.1 硬件加速IP核的驱动程序设计
1.2 Yolov3-Tiny网络参数的配置
- Yolov3-Tiny网络中共有23层,若按照卷积进行划分,可以得到13层复合层;每个复合层包含当前卷积层和下一个卷积层之前其它计算层。
- 编写结构体函数:定义网络每个卷积层的参数规模:输入输出大小、步长、激活方式以及完成该卷积层需要执行卷积IP核的个数。
- 如下所示,使用make_layer_group()函数对复合层进行配置。其中input_fold_factor和output_fold_factor为输入/输出通道数是32的倍数。
layer_group make_layer_group(int input_w,int input_h,int input_ch,int input_fold_factor,
int output_w,int output_h,int output_ch,int output_fold_factor,
bool conv_disable, ACTIVATION activate_type,POST_PROCESS post_process_type,int pooling_stride)
- 对每一层执行该结构体函数,可以完成整个网络参数的配置。
1.3 完成网络的前向计算
- 根据每个复合层,编写前向计算函数forward_layer_group(),完成复合层IP的计算,在执行13次前向计算函数之后,可以完成整个网络的前向计算。
- forward_layer_group() 函数详解
- 考虑到所有的复合层都是以卷积层为开始,所以可以首先检测是否为卷积层的最后一次累加.
- 若不是卷积运算的最后一次累加,那么可将Switch 0-2的输入和输出都置为0,
typedef enum{
NONE, MAX_POOL, YOLO, UPSAMPLE
} POST_PROCESS;