基于FPGA的卷积深度网络加速---1

很早之前就想写这个,自己研究了很久。
本人多年从事图像相关的FPGA工作,近几年接触了CNN,就想着在FPGA中实现CNN的加速,爱好使然。

要实现对CNN的加速,就必须了解CNN是怎么计算的。
考虑在FPGA中实现深度学习算法,需要matlab上用自己的写的代码实现算法的每一步。

1.编译matcaffe,编译matcaffe会遇到很多坑, 将caffemodel导入到matlab中;

2.将训练好的网络在matlab上测试,选择一个合适的网络来学习,最终选择了MTCNN,MTCNN输出结果很直观,bbox框和67个人脸特征点,由三个小网络组成Pnet,Rnet,Onet三个网络可以单独测试;用自家闺女照片测试如下:
在这里插入图片描述

3.用自己的代码替代caffe的测试过程,主要是要改写forward函数;

4.要改写forward函数,首先要将所有的参数导入到matlab中,要能够识别网络结构文件(prototxt),根据网络结构读取并保存数据;实现代码包括:
(1)caffemodel2mat.m
(2)isnum.m
(3)match_str.m

5.开始实现单个网络,Onet可以输出bbox框和67个人脸特征点,方便验证结果。需要保证实现的代码跟原来的运行结果一致;实现代码包括:
(1)cnnConvolve4D.m 卷积
(2)cnnPool4D.m 池化
(3)cnnrelu4D.m 激活函数relu
(4)cnnSoftMax4D.m 分类
(5)My_net_forward.m 关键函数调用整个卷积过程
基本实现了cnn的常规功能

6.Onet验证ok了,可以继续验证Rnet,结果跑不通。检查网络发现Rnet有一层卷积的步长为2,所以需要修改卷积的代码,添加步长设置,当步长大于1时调用cnn_my_conv2函数。

7.继续验证Pnet,又是出了好多小问题。Pnet可以输入任意尺寸的图像,之前的网络是按照方形图像设计的,所以就先用方形图像验证,验证ok。如下图所示,输入图片尺寸为500X500,调用原始代码耗时0.83s,全部用自己的代码耗时36.16s,自己写的代码的执行效率肯定大打折扣
在这里插入图片描述
8.优化卷积,使用im2col来加速,添加函数cnn_fast_conv4D,结果发现需要的时间更长了,完成上图500X500的图片需要时间接近4000s,这个时间在pc上完全不能接受,但为后续实现提供了加速方案。

9.修改 cnnConvolve4D和cnnPool4D允许输入图片的尺寸不是方形。

371132449@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值