Skip to content
forked from rexbu/libGDL

一个移动端跨平台的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

LaoYingBu/libGDL

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libGDL

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

说明

  • 本项目为个人开发,条件限制待解决的问题还非常多(见下面TODO)。
  • 有兴趣的开发者或者想沟通的欢迎联系我

微信

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)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 55.8%
  • C 27.6%
  • Java 6.6%
  • Objective-C++ 6.3%
  • Objective-C 2.1%
  • Makefile 0.8%
  • Other 0.8%