MyFPGA Forum

 找回密码
 注册
搜索

【Altera SoC体验之旅】+ DE1上跑完整的卷积神经网络

查看数: 5994 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-7-23 09:27

正文摘要:

本帖最后由 BOB_Sun 于 2015-7-23 09:35 编辑 本文转自 http://bbs.eeworld.com.cn/thread-463088-1-1.html 距离上次发帖有点久了,这段时间都在调试另一块Stratix V的板子。 闲话少絮,这里展示下项目最新进展 ...

回复

BOB_Sun 发表于 2015-7-23 09:40:40
Open CL编译输出报告中给出了资源占用情况:

+--------------------------------------------------------------------+
; Estimated Resource Usage Summary                                   ;
+----------------------------------------+---------------------------+
; Resource                               + Usage                     ;
+----------------------------------------+---------------------------+
; Logic utilization                      ;   83%                     ;
; Dedicated logic registers              ;   46%                     ;
; Memory blocks                          ;   57%                     ;
; DSP blocks                             ;   25%                     ;
+----------------------------------------+---------------------------;

可见,逻辑资源、存储器资源消耗较为明显,而DSP资源并未用尽,说明还有优化的空间。

编译主程序需要使用SoCEDS,我用的版本为14.0.2.274,也是命令行方式,在工程目录下执行make,结束后得到可执行文件cnn。

将这两个文件拷贝到SD卡,按照前面的博客对板子进行设置,将CNN的模型、CIFAR10数据也拷贝到SD卡中,板子上电,mount SD卡到/mnt,执行cnn,得到输出如下:

<div class="blockcode"><blockquote>Please input the number of images(1~100):100
Loading data...OK!
Constructing CNN...OK!
Begin calculation...Elapsed Time = 141.861 s.
Real Label = 3(cat), Calc Label = 3(cat), error count = 0
Real Label = 8(ship), Calc Label = 8(ship), error count = 0
Real Label = 8(ship), Calc Label = 8(ship), error count = 0
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 0
Real Label = 6(frog), Calc Label = 6(frog), error count = 0
Real Label = 6(frog), Calc Label = 6(frog), error count = 0
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 0
Real Label = 6(frog), Calc Label = 6(frog), error count = 0
Real Label = 3(cat), Calc Label = 3(cat), error count = 0
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 0
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 0
Real Label = 9(truck), Calc Label = 9(truck), error count = 0
Real Label = 5(dog), Calc Label = 5(dog), error count = 0
Real Label = 7(horse), Calc Label = 7(horse), error count = 0
Real Label = 9(truck), Calc Label = 9(truck), error count = 0
Real Label = 8(ship), Calc Label = 8(ship), error count = 0
Real Label = 5(dog), Calc Label = 5(dog), error count = 0
Real Label = 7(horse), Calc Label = 7(horse), error count = 0
Real Label = 8(ship), Calc Label = 8(ship), error count = 0
Real Label = 6(frog), Calc Label = 6(frog), error count = 0
Real Label = 7(horse), Calc Label = 7(horse), error count = 0
Real Label = 0(airplane), Calc Label = 2(bird), error count = 1
Real Label = 4(deer), Calc Label = 4(deer), error count = 1
Real Label = 9(truck), Calc Label = 9(truck), error count = 1
Real Label = 5(dog), Calc Label = 4(deer), error count = 2
Real Label = 2(bird), Calc Label = 3(cat), error count = 3
Real Label = 4(deer), Calc Label = 4(deer), error count = 3
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 3
Real Label = 9(truck), Calc Label = 9(truck), error count = 3
Real Label = 6(frog), Calc Label = 6(frog), error count = 3
Real Label = 6(frog), Calc Label = 6(frog), error count = 3
Real Label = 5(dog), Calc Label = 5(dog), error count = 3
Real Label = 4(deer), Calc Label = 4(deer), error count = 3
Real Label = 5(dog), Calc Label = 5(dog), error count = 3
Real Label = 9(truck), Calc Label = 9(truck), error count = 3
Real Label = 2(bird), Calc Label = 3(cat), error count = 4
Real Label = 4(deer), Calc Label = 7(horse), error count = 5
Real Label = 1(automobile), Calc Label = 9(truck), error count = 6
Real Label = 9(truck), Calc Label = 9(truck), error count = 6
Real Label = 5(dog), Calc Label = 5(dog), error count = 6
Real Label = 4(deer), Calc Label = 4(deer), error count = 6
Real Label = 6(frog), Calc Label = 6(frog), error count = 6
Real Label = 5(dog), Calc Label = 5(dog), error count = 6
Real Label = 6(frog), Calc Label = 6(frog), error count = 6
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 6
Real Label = 9(truck), Calc Label = 9(truck), error count = 6
Real Label = 3(cat), Calc Label = 5(dog), error count = 7
Real Label = 9(truck), Calc Label = 9(truck), error count = 7
Real Label = 7(horse), Calc Label = 7(horse), error count = 7
Real Label = 6(frog), Calc Label = 6(frog), error count = 7
Real Label = 9(truck), Calc Label = 9(truck), error count = 7
Real Label = 8(ship), Calc Label = 8(ship), error count = 7
Real Label = 0(airplane), Calc Label = 2(bird), error count = 8
Real Label = 3(cat), Calc Label = 3(cat), error count = 8
Real Label = 8(ship), Calc Label = 8(ship), error count = 8
Real Label = 8(ship), Calc Label = 8(ship), error count = 8
Real Label = 7(horse), Calc Label = 7(horse), error count = 8
Real Label = 7(horse), Calc Label = 7(horse), error count = 8
Real Label = 4(deer), Calc Label = 3(cat), error count = 9
Real Label = 6(frog), Calc Label = 3(cat), error count = 10
Real Label = 7(horse), Calc Label = 7(horse), error count = 10
Real Label = 3(cat), Calc Label = 5(dog), error count = 11
Real Label = 6(frog), Calc Label = 6(frog), error count = 11
Real Label = 3(cat), Calc Label = 3(cat), error count = 11
Real Label = 6(frog), Calc Label = 6(frog), error count = 11
Real Label = 2(bird), Calc Label = 2(bird), error count = 11
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 11
Real Label = 2(bird), Calc Label = 2(bird), error count = 11
Real Label = 3(cat), Calc Label = 3(cat), error count = 11
Real Label = 7(horse), Calc Label = 9(truck), error count = 12
Real Label = 2(bird), Calc Label = 2(bird), error count = 12
Real Label = 6(frog), Calc Label = 6(frog), error count = 12
Real Label = 8(ship), Calc Label = 8(ship), error count = 12
Real Label = 8(ship), Calc Label = 8(ship), error count = 12
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 12
Real Label = 2(bird), Calc Label = 2(bird), error count = 12
Real Label = 9(truck), Calc Label = 0(airplane), error count = 13
Real Label = 3(cat), Calc Label = 3(cat), error count = 13
Real Label = 3(cat), Calc Label = 2(bird), error count = 14
Real Label = 8(ship), Calc Label = 8(ship), error count = 14
Real Label = 8(ship), Calc Label = 8(ship), error count = 14
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 14
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 14
Real Label = 7(horse), Calc Label = 7(horse), error count = 14
Real Label = 2(bird), Calc Label = 2(bird), error count = 14
Real Label = 5(dog), Calc Label = 7(horse), error count = 15
Real Label = 2(bird), Calc Label = 2(bird), error count = 15
Real Label = 7(horse), Calc Label = 7(horse), error count = 15
Real Label = 8(ship), Calc Label = 8(ship), error count = 15
Real Label = 9(truck), Calc Label = 9(truck), error count = 15
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 15
Real Label = 3(cat), Calc Label = 4(deer), error count = 16
Real Label = 8(ship), Calc Label = 8(ship), error count = 16
Real Label = 6(frog), Calc Label = 6(frog), error count = 16
Real Label = 4(deer), Calc Label = 4(deer), error count = 16
Real Label = 6(frog), Calc Label = 6(frog), error count = 16
Real Label = 6(frog), Calc Label = 6(frog), error count = 16
Real Label = 0(airplane), Calc Label = 2(bird), error count = 17
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 17
Real Label = 7(horse), Calc Label = 7(horse), error count = 17
Classify Score = 83 %.

上面的执行流程是这样的,首先输入测试样本数目(1到100),由于DE1板子FPGA端SDRAM容量较小,难以加载全部测试数据(10000张图片),故每次最多装入100张图片。之后载入数据到HPS内存,然后开始构建CNN模型,构建过程中也实现了Open CL的初始化。构建完毕,将输入图像依次通过CNN,得到一系列分类结果,与标签进行对比,统计错误分类个数,计算分类准确率。

经过测试,分类准确率达到83%,与Caffe测试结果一致。

经过以上测试,可以得到结论:

(1)使用Open CL可以很方便地移植高级语言编写的算法;

(2)CNN在移植过程中需要考虑实际硬件,定制合适的模型和数据;

(3)Cyclone 5逻辑资源较少(85K,Open CL kernel占用了83%),如果希望进一步提高计算速度,一方面可以选用高性能器件(如Stratix V、Arria 10),另一方面可以使用RTL自己搭建计算系统。

我目前正在Stratix V上用RTL搭建并行+流水线CNN加速器,有兴趣的童鞋可以进一步交流。

码字不易,申请加精。


(完结)

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-6 03:25 , Processed in 0.040685 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表