首页 / 深度学习 / 深度学习之在iOS上运行CNN
深度学习之在iOS上运行CNN
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了深度学习之在iOS上运行CNN,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3053字,纯文字阅读大概需要5分钟。
内容图文
1 引言
作为曾经的iOS开发者,在研究深度学习的时候,总有一个想法就是在iPhone上运行深度学习,不管是在手机上训练还是利用训练好的数据进行测试。
因为iOS的开发环境支持C++,因此,只要你的代码是C/C++,本质上就可以在iOS上运行。
怎么才能更快更好地在iOS上运行CNN呢?
2 方法1:通过Matlab转码
Matlab自带转成c的工具,如果你研究过UFLDL的深度学习教程,就知道如何在Matlab上使用CNN,那么,转换成c后,放到iOS的开发环境中,然后将参数存成txt格式再读取分割,也就是可以实现。
如下图就是已经将matlab代码转换为c后导入的结果:
打开predict.h文件,可以看到可以调用的接口:
/* Function Declarations */
extern real_T predict(const real_T Theta1[10025], const real_T Theta2[260], const real_T X[400]);
这是训练MNIST的一个神经网络,我这边用了测试手写数字的识别。
因此,接下来需要对图片进行处理,从而转换为x[400]的向量格式。
这个只要能读取图片的像素,进行转换就可以。可以考虑用opencv来实现。
这里我的方法是在用手画出数字之后,将图片转换为20*20像素的图片,如右下角所示,再将右下角的图片转换为400的数组,输入predict得到的结果。
3 方法2:使用DeepBeliefSDK
https://github.com/jetpacapp/DeepBeliefSDK
这个是别人专门写的一个用于iOS的深度学习的SDK。可以使用,但是存在的问题就是如果要自己训练的话很受限制。
4 方法3:使用tinyCNN
https://github.com/nyanp/tiny-cnn
这个很不错,它对比Caffe,Theano等框架最大的特点就是不需要安装,只要能用C++ 11.然后里面的例子使用了boost库。因此,为了运行它,我们需要在xcode安装ios的boost库。
网上找到了一个编译好的boost库:
https://github.com/danoli3/ofxiOSBoost
导入boost库的方法非常简单:
In Xcode Build Settings for your project:
Add to Library Search Paths ( LIBRARY_SEARCH_PATHS ) $(SRCROOT)/../../../addons/ofxiOSBoost/libs/boost/lib/ios
Add to Header Search Paths ( HEADER_SEARCH_PATHS )
$(SRCROOT)/../../../addons/ofxiOSBoost/libs/boost/include
In the Target under Build Phases
Add to‘Link Binary With Libraries‘the boost.a found inthe ofxiOSBoost/libs/boost/lib/ios directory.
If not openFrameworks just addthe libs/boost/includeto Header Search Paths andthe libs/boost/ios to Library Search Paths
那么具体在创建iOS应用的时候,这里使用作者提供的训练MNIST的例子,那么要注意在使用数据时,要更改路径:
NSString *trainLabels = [[NSBundle mainBundle] pathForResource:@"train-labels" ofType:@"idx1-ubyte"];
NSString *trainImages = [[NSBundle mainBundle] pathForResource:@"train-images" ofType:@"idx3-ubyte"];
NSString *t10kLabels = [[NSBundle mainBundle] pathForResource:@"t10k-labels" ofType:@"idx1-ubyte"];
NSString *t10kImages = [[NSBundle mainBundle] pathForResource:@"t10k-images" ofType:@"idx3-ubyte"];
parse_mnist_labels([trainLabels cStringUsingEncoding:NSUTF8StringEncoding], &train_labels);
parse_mnist_images([trainImages cStringUsingEncoding:NSUTF8StringEncoding], &train_images);
parse_mnist_labels([t10kLabels cStringUsingEncoding:NSUTF8StringEncoding], &test_labels);
parse_mnist_images([t10kImages cStringUsingEncoding:NSUTF8StringEncoding], &test_images);
基本上这样就可以运行开始训练了。
如果想在Mac上训练,同样需要安装boost库。这个只要在官网下载boost,我用的是1.58版本。然后在terminal中安装,cd到路径,然后./boostrap.sh 然后./b2 安装就可以。然后在xcode引入路径:
The Boost C++ Libraries were successfully built!
The following directory should be added to compiler include paths:
/Users/.../.../.../boost
The following directory should be added to linker library paths:
/Users/.../.../.../boost/stage/lib
路径初始为自己boost的文件夹地址。
4 小结
上面说了一些很方便的方法来实现在iOS下运行CNN。当然,我们更多需要就是进行图像的识别。相信大家自己测试会觉得很有趣。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/songrotek/article/details/46883875
内容总结
以上是互联网集市为您收集整理的深度学习之在iOS上运行CNN全部内容,希望文章能够帮你解决深度学习之在iOS上运行CNN所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。