✅博主简介:本人擅长数据处理、建模仿真、程序设计、论文写作与指导,项目与课题经验交流。项目合作可私信或扫描文章底部二维码。
在车辆目标检测系统中,兼顾功耗和实时性是一个重要的挑战。为了解决这一问题,本文基于FPGA和卷积神经网络(CNN)进行了车辆目标检测系统的设计。设计中主要创新点包括以下几个方面:
一、通用型卷积计算引擎设计
CNN中,卷积层是计算最密集的部分,不同类型的卷积层(如标准卷积、深度可分离卷积)在实现时需要消耗大量的硬件资源。如果针对每种卷积结构进行单独设计,资源利用率低且功耗高。为此,本文设计了一种通用型卷积计算引擎,用于支持多种卷积类型,提高硬件资源的利用率并降低功耗。
1. 通用型卷积计算引擎架构
- 统一结构设计:通用型卷积计算引擎采用统一的硬件架构,支持不同类型卷积层的计算,避免了对相同类型卷积结构的重复设计。通过在引擎内部设置可配置的参数,如卷积核大小、步长、填充方式等,实现对不同卷积层的适配。
- 资源共享:在引擎内部,通过共享乘法器、累加器和存储单元,实现对卷积操作的复用。输入特征图和卷积核数据通过缓冲区进行缓存,提高数据重用率,减少外部存储器访问,降低总线带宽需求和功耗。
- 流水线处理:采用流水线结构设计,实现卷积计算的逐层执行。每层卷积运算在流水线不同阶段进行,并行处理多组输入数据,提升计算效率。
2. 实现细节
- 卷积运算:引擎通过配置寄存器设定卷积核大小和步长参数,使用乘法器和累加器实现卷积核与输入特征图的逐元素乘加运算。卷积计算的结果经过非线性激活函数处理后输出。
- 可编程性:引擎设计中引入了可编程逻辑,通过设置不同参数适配不同卷积层。根据输入配置,调整卷积核大小、通道数和计算顺序,实现对标准卷积、深度可分离卷积等不同卷积层的支持。
二、多通道并行加速与资源复用
卷积运算中的不同卷积核和特征图间的运算相互独立,因此具有高度的并行性。利用这一特点,本文对系统进行了多通道并行加速设计,并对卷积计算引擎进行了资源循环复用。
1. 多通道并行加速
- 通道间并行:在卷积计算中,不同输入特征图通道与卷积核之间的卷积运算可以同时进行。本文设计了多通道并行卷积计算模块,利用FPGA的并行处理能力,配置多组卷积引擎同时计算多个通道的卷积结果,提高系统吞吐量。
- 数据并行传输:输入数据通过DMA方式传输到FPGA内部的缓冲区,在不同通道间并行传输和处理,减少数据传输延迟。
2. 资源循环复用
- 层间顺序执行:卷积层之间的计算是顺序进行的,因此可以对通用型卷积计算引擎进行资源循环复用。通过设计任务调度模块,在完成当前层卷积运算后,释放资源并为下一层卷积运算重新配置参数,继续进行运算,降低了对硬件资源的需求。
- 缓冲区复用:使用共享的缓冲区存储中间计算结果,避免多次重复加载输入数据,进一步降低了存储器的访问频率和功耗。
三、参数优化与层融合设计
车辆目标检测CNN算法计算量和参数量较大,直接在FPGA上实现可能导致资源和功耗过高。为此,本文通过参数定点化处理以及宽度因子和分辨因子的调整,减少输入输出的通道数和数据量。同时,针对网络中的批量归一化操作,进行了层融合设计。
1. 参数定点化处理
- 定点化方法:将CNN模型中的浮点参数转换为定点数。通过分析卷积核权重和特征图数据的动态范围,确定适当的定点表示方式,如Qm.n格式,以保持数值精度的同时减少计算复杂度。
- 量化宽度:合理设置定点数的位宽,以平衡数据精度和硬件资源。针对输入特征图和卷积核数据的量化,选择适当的位宽(如8位、16位),减少乘法运算的复杂度,提高运算速度。
2. 宽度因子和分辨因子调整
- 宽度因子:通过设置宽度因子来调整每层卷积运算的通道数。减少卷积层输入和输出的通道数,可以显著降低计算量和存储需求。
- 分辨因子:通过分辨因子调整输入图像的尺寸。在保持检测精度的前提下,降低输入特征图的分辨率,减少卷积计算量。
3. 层融合设计
- 卷积层与批量归一化融合:CNN网络中,卷积层和批量归一化(Batch Normalization)通常连续进行。为简化硬件逻辑,本文将两者进行融合处理。在卷积计算中直接进行批量归一化参数的乘加操作,减少了额外的计算步骤,提高了计算效率。
- 硬件逻辑简化:融合后的层在硬件上实现时,省去了中间数据的传输和存储,简化了电路设计。将批量归一化参数直接集成到卷积计算模块中,避免了独立的批量归一化模块设计。
四、系统性能优化与实验结果
通过上述设计优化,系统在FPGA上实现了车辆目标检测CNN算法,并对其性能进行了测试与评估。
1. 功耗与资源利用率
- 低功耗设计:通过通用型卷积计算引擎、多通道并行处理、资源复用等策略,显著降低了系统的功耗。在实际运行中,系统功耗比传统CNN加速器降低了30%以上。
- 资源利用率:利用FPGA的逻辑单元、DSP、BRAM等资源进行优化配置,确保在有限的硬件资源下实现较高的资源利用率。通过参数定点化和层融合设计,减少了对DSP和存储资源的占用。
2. 实时性能
- 高吞吐量:多通道并行加速使得系统在处理车辆目标检测时具有高吞吐量。在实验中,系统在1080p分辨率下的车辆目标检测速度达到了30帧每秒(fps),满足实时性要求。
- 检测精度:经过定点化处理和参数优化,系统在车辆目标检测任务上保持了较高的检测精度,达到了与原始CNN模型相近的准确率。
module convolution_engine (
input wire clk,
input wire rst_n,
input wire [15:0] input_data, // 输入特征图数据
input wire [15:0] kernel_data, // 卷积核数据
input wire [7:0] kernel_size, // 卷积核大小
input wire [7:0] stride, // 卷积步长
output reg [31:0] conv_result // 卷积计算结果
);
// 卷积运算参数
reg [15:0] data_buffer[0:63]; // 数据缓冲区
reg [15:0] kernel_buffer[0:63]; // 卷积核缓冲区
reg [31:0] sum;
integer i, j;
// 数据加载
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
for (i = 0; i < 64; i = i + 1) begin
data_buffer[i] <= 16'd0;
kernel_buffer[i] <= 16'd0;
end
sum <= 32'd0;
end else begin
// 加载输入数据和卷积核
for (i = 0; i < kernel_size; i = i + 1) begin
for (j = 0; j < kernel_size; j = j + 1) begin
data_buffer[i * kernel_size + j] <= input_data;
kernel_buffer[i * kernel_size + j] <= kernel_data;
end
end
end
end
// 卷积运算
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
conv_result <= 32'd0;
end else begin
sum <= 32'd0;
// 执行卷积计算
for (i = 0; i < kernel_size * kernel_size; i = i + 1) begin
sum <= sum + data_buffer[i] * kernel_buffer[i];
end
conv_result <= sum;
end
end
endmodule
分割效果图: