赞
踩
1- 开发语言
2- CPU, GPU, FPGA比较
1 CPU
冯诺依曼架构:
intel的CPU,
X86的CPU,
ARM的CPU
1 大量的控制逻辑
2 大量的caches
3 ALU 运算单元alu不多,并行计算能力差1 CPU
2 GPU
绿色是计算单元 几千个cuda core PS:貌似是
黄色:控制
红色:cache
绿色:alu
1 有限的控制功能 GPU在控制方面很弱,
2 高吞吐率
3 在并行计算很强
cache很少:需要放数据高,很大的DDR
3 FPGA
蓝色:DSP,硬件运算单元, 多的有几千个
绿色:BRAM, 由他得到数据给DSP运算, 取代了去DDR里面取数
浅蓝色: CLD ps:貌似是 查找表,触发器
1 边上有很多IO,可编程(高低速都有)
2 许多存储单元(片内取数,无需去DDR) (有利于深度学习)
4 SOC with FPGA
黄色: 是传统的FPGA
上面部分: cpu, ddr的存储器, 外设(处理器的子系统,有多核arm处理器)
上面处理器 通过片内高速总线与 下面的FPGA互联,
其实是放在 一个带 上面的soc,
带ARM的FPGA, or是带可编程加速单元(FPGA)的ARM
3- 深度学习 落地
1 深度学习:
1 训练 FPGA极极少用于训练,高性能的GPU完成
2 推演 FPGA用于这部分
2 深度学习 挑战
1 计算大 2 存储带宽大 3 功耗大
全连接,数据量大,memory bandwidth intensive 需要65000,000个数据的搬运, 需要大内存DDR 或者 放在片内
3 memory bandwidth 缩小方法
1 让神经网络稀疏
2 量化, 浮点变整数 float32 ->int8
4- FPGA优势
卷积是独立的,映射到dsp,并行计算
数据搬运:如果放在DDR取数速度慢,虽然计算得快,取数比较慢。解决办法:放在片内的单元
功耗GPU:2ghz
FPGA: 500 m hz
机器学习比较:与英伟达的tegra设备
5- 软件算法实现之后 转化为硬件语言
c matlab实现之后如何转化?
matlab有workflow支持xilinx的 zynq
底层编译器,把c转化为硬件语言
已有用matlab写了很多网络的实现
matconvnet
HLx,输入是c/c++,opencl编写的程序,通过HLx编译生成RTL
生成IP挂到底层的。。。没听清
1 面向的是基于linx的嵌入式操作系统
c/c++
2 profiling找出算法中哪个部分占用cpu资源比较多,标记函数,硬件加速
工具自动完成
优化好了底层,只需调用即可,同时保持了底层的性能
1 caffe 的prototxt
caffe model
底层已经帮我们实现了,底层的库可以理解为硬件的设计
2 分析网络结构,调度器把相应的指令换成硬件设计
并行的运算单元
边上是buffer提供更好的性能
开发软件的人不用关心下面硬件的设计
下图是xilinx的开发板帮我们做好的
relu激活函数
全连接层
softmax
带孔卷积
nms
最大池化
l2正则化
batch 批处理
卷积层
y表示使用了这个层
ssd
googlenet
fcn
vgg
alexnet
这些网络在此做出的实现
googlenet举例子,121优化到370帧
下图是一些开发版
zcu102 开发板
支持opencv,深度学习的算法:
xFopencv xFdnn
下面是xilinx测试好的即插即用的设备(可插4个sensor)
sony IMX274 等
现有的demo:
1光流 +2深度视觉+3行人检测
sony摄像头,双目摄像头
1光流算法
2立体摄像头 立体匹配算法,产生深度图像
3训练好的model放在sd卡,做行人检测
上述同时运行
2 FPGA 适合机器学习
3 基于模型的设计 & 设计好的库,提高开发效率
一些可参考资源
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。