Skip to content
/ libGDL Public

一个移动端跨平台的gpu+cpu并行计算的cnn框架(A mobile-side cross-platform gpu+cpu parallel computing CNN framework)

License

Notifications You must be signed in to change notification settings

neilcz/libGDL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Nov 10, 2020
1c8f59d · Nov 10, 2020

History

25 Commits
Apr 17, 2018
Nov 10, 2020
Apr 17, 2018
Apr 17, 2018
Apr 17, 2018
Apr 17, 2018
Apr 17, 2018
Apr 17, 2018
Apr 17, 2018
Nov 10, 2020

Repository files navigation

libGDL

一个移动端跨平台的gpu+cpu并行计算的cnn框架。基于C++和opengles3.0开发,可以非常方便移植到任何一个支持opengles的平台上。

说明

libGDL特点

  • 纯C++代码,没有依赖任何的第三方库,非常方便移植和编译。基于的libGPU是本人开发的一个C++版本的GPUImage
  • 基于opengles 3.0实现,所以理论上libGDL可以应用于iphone5s及android 4.4之后的所有手机上
  • 卷积层使用opengles的fbo渲染实现,全连接层基于neon优化,卷积层和全连接之间的数据传输通过pbo实现
  • 卷积层和全连接层为并行计算

TODO

  • 详细的开发文档和说明文档后续会补充
  • 重点放在了卷积层的优化上,全连接层只是简单使用了neon加速,还有较大优化空间
  • 由于本人条件限制,android并未做较多的兼容性测试
  • 卷积层的大部分时间都消耗在了纹理采样上,每个卷积层的计算速度和通道数、通道尺寸成正比。哪位gpu的底层大牛协助下优化采样效率,速度还可以提升一个量级(注意是量级的提升!)
  • 目测android的显存有限,对于较大网络目前的框架会有问题。
  • 卷积层和全连接层之间的数据交换使用pbo,但是我发现在少量iphone手机上,pbo并未起作用,耗时和glReadPixels耗时一样,这样会极大影响计算速度(可能在10ms以上)
  • 对MobileNet、YOLO等常用模型的支持
  • 模型转换目前只提供了tensorflow的ckpt格式转换

目录说明

  • libGPU: 一个类似于GPUImage的跨平台opengles框架,支持2.0和3.0,项目地址:https://github.com/rexbu/libGPU
  • src: libGDL的框架代码
  • style: 基于libGDL定义的一个风格迁移源码
  • tools: 一个以mnist为例的将tensorflow的ckpt模型转为gdl模型

demo说明

程序里提供了2个demo,一个风格迁移、一个mnist。

  • 风格迁移使用了9个卷积层、1个正则层、9个逆卷积层,这样规模的网络在我的小米4c(骁龙808)上跑不起来,暂时不清楚是不是显存太小导致的 风格迁移的demo由于网络规模的问题,所以无法做到实时,demo结果如图: 风格迁移

性能

mnist为例进行了性能测试,模型13.1M,第一个卷积层5x5x32,第二个卷积层5x5x64,第一个全连接层3136x1024,第二个全连接层1024x10。

iphone5s的速度

iphone速度

小米4c的速度(骁龙808)

iphone速度

About

一个移动端跨平台的gpu+cpu并行计算的cnn框架(A mobile-side cross-platform gpu+cpu parallel computing CNN framework)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published