2021-08-22 18:09:47 索煒達電子 884
項目編號:E445
文件大?。?.8M
源碼說明:帶中文注釋
開發(fā)環(huán)境:Verilog
簡要概述:
重點是FPGA上的卷積網(wǎng)絡(luò)推理加速。
該項目采用ISE 14.7軟件和vertix-7 FPGA構(gòu)建。它使用某些加速策略執(zhí)行7層網(wǎng)絡(luò)正向計算。首先,使用MatConvNet在MSTAR數(shù)據(jù)集上訓(xùn)練SAR目標分類網(wǎng)絡(luò),并使用早期停止。然后,使用Matlab生成的COE文件將權(quán)重和輸入轉(zhuǎn)換為FPGA。接下來,設(shè)計本地verilog編寫的模型來實現(xiàn)正向計算。系統(tǒng)使用16位定點數(shù)據(jù)來保持精度。結(jié)果證明,它的成本低于每幅圖像1ms,優(yōu)于其他計算平臺。
加快
為了在FPGA資源和速度之間進行權(quán)衡,第一轉(zhuǎn)換層使用移位寄存器結(jié)構(gòu)進行加速,考慮到第一轉(zhuǎn)換層中的輸入和權(quán)重的大小更大。其他轉(zhuǎn)換層僅使用管線結(jié)構(gòu)。請注意,有18個文件以m_conv_1命名,表示第一個conv.層中有18個移位寄存器。
由于帶寬的限制,第二轉(zhuǎn)換層采用信道分組并行化方案。我使用v7-415t和v7-485t FPGA進行比較,它們根據(jù)不同的資源量使用不同的組號(4對1)。您可能會注意到文件CNN_top.v中的方案,其中的信號“ram_ready”控制通道分組和合并。
目錄│文件列表:
└ convolution_network_on_FPGA
├ v7-415t_0.5ms
│ │ clk_div.v
│ │ CNN_top.v
│ │ conv_adder18.v
│ │ conv_adder36.v
│ │ k2_out.v
│ │ k3_out.v
│ │ max_output.v
│ │ m_conv_1_1.v
│ │ m_conv_1_10.v
│ │ m_conv_1_11.v
│ │ m_conv_1_12.v
│ │ m_conv_1_13.v
│ │ m_conv_1_14.v
│ │ m_conv_1_15.v
│ │ m_conv_1_16.v
│ │ m_conv_1_17.v
│ │ m_conv_1_18.v
│ │ m_conv_1_2.v
│ │ m_conv_1_3.v
│ │ m_conv_1_4.v
│ │ m_conv_1_5.v
│ │ m_conv_1_6.v
│ │ m_conv_1_7.v
│ │ m_conv_1_8.v
│ │ m_conv_1_9.v
│ │ m_conv_3.v
│ │ m_conv_5.v
│ │ m_fc.v
│ │ m_layer_input_0.v
│ │ m_layer_input_1.v
│ │ m_layer_input_2.v
│ │ m_layer_input_3.v
│ │ m_layer_input_4.v
│ │ m_layer_input_5.v
│ │ m_max_relu_2.v
│ │ m_max_relu_4.v
│ └ tb.v
├ v7-485t_0.3ms
│ │ clk_div.v
│ │ CNN_top.v
│ │ conv_adder18.v
│ │ conv_adder36.v
│ │ k2_out.v
│ │ k3_out.v
│ │ max_output.v
│ │ m_conv_1_1.v
│ │ m_conv_1_10.v
│ │ m_conv_1_11.v
│ │ m_conv_1_12.v
│ │ m_conv_1_13.v
│ │ m_conv_1_14.v
│ │ m_conv_1_15.v
│ │ m_conv_1_16.v
│ │ m_conv_1_17.v
│ │ m_conv_1_18.v
│ │ m_conv_1_2.v
│ │ m_conv_1_3.v
│ │ m_conv_1_4.v
│ │ m_conv_1_5.v
│ │ m_conv_1_6.v
│ │ m_conv_1_7.v
│ │ m_conv_1_8.v
│ │ m_conv_1_9.v
│ │ m_conv_3.v
│ │ m_conv_5.v
│ │ m_fc.v
│ │ m_layer_input_0.v
│ │ m_layer_input_1.v
│ │ m_layer_input_2.v
│ │ m_layer_input_3.v
│ │ m_layer_input_4.v
│ │ m_layer_input_5.v
│ │ m_max_relu_2.v
│ │ m_max_relu_4.v
│ └ tb.v
└ validation_with_matlab
│ conv_ff.m
│ fc.coe
│ generate_fc.m
│ generate_k1.m
│ generate_k2.m
│ generate_k3.m
│ hb03417-2.jpeg
│ hb03440-5.jpeg
│ hb14939-7.jpeg
│ hb14969-1.jpeg
│ hb14975-9.jpeg
│ hb15043-7.jpeg
│ image.coe
│ image_coe.m
│ imrecog.m
│ ind_conv2_in.coe
│ ind_conv_in.coe
│ ind_layer2.coe
│ ind_out.m
│ lianghua_16.m
│ m_conv2.m
│ m_maxpool.m
│ m_relu.m
│ m_softmax.m
│ net-epoch-73.mat
│ testbench.m
│ vectorize.m
│ vectorize2.m
├ k2
│ │ kernel2_1.coe
│ │ kernel2_10.coe
│ │ kernel2_11.coe
│ │ kernel2_12.coe
│ │ kernel2_13.coe
│ │ kernel2_14.coe
│ │ kernel2_15.coe
│ │ kernel2_16.coe
│ │ kernel2_17.coe
│ │ kernel2_18.coe
│ │ kernel2_2.coe
│ │ kernel2_3.coe
│ │ kernel2_4.coe
│ │ kernel2_5.coe
│ │ kernel2_6.coe
│ │ kernel2_7.coe
│ │ kernel2_8.coe
│ └ kernel2_9.coe
└ k3
│ kernel3_1.coe
│ kernel3_10.coe
│ kernel3_11.coe
│ kernel3_12.coe
│ kernel3_13.coe
│ kernel3_14.coe
│ kernel3_15.coe
│ kernel3_16.coe
│ kernel3_17.coe
│ kernel3_18.coe
│ kernel3_19.coe
│ kernel3_2.coe
│ kernel3_20.coe
│ kernel3_21.coe
│ kernel3_22.coe
│ kernel3_23.coe
│ kernel3_24.coe
│ kernel3_25.coe
│ kernel3_26.coe
│ kernel3_27.coe
│ kernel3_28.coe
│ kernel3_29.coe
│ kernel3_3.coe
│ kernel3_30.coe
│ kernel3_31.coe
│ kernel3_32.coe
│ kernel3_33.coe
│ kernel3_34.coe
│ kernel3_35.coe
│ kernel3_36.coe
│ kernel3_4.coe
│ kernel3_5.coe
│ kernel3_6.coe
│ kernel3_7.coe
│ kernel3_8.coe
└ kernel3_9.coe