OpenCV调用TensorFlow是什么意思

最近在看英文版的《Learning OpenCV 3》,看原书与看中文版相比,效率上不会有明显劣势,多了查单词的时间,但能更理解内容,翻译有时会省略一些显而易见但重要的细节,即翻译是从译者的角度,去理解、删减内容后再去讲述,还是看英文原版比较好。

这本书的两个作者是Adrian Kaehler博士和Gary Bradski博士。

Dr.Adrian Kaehler是一个企业家、硅谷Deep Learning Group的创始人,他的著作涵盖机器学习、统计模型、计算机视觉和机器人。Adrian Kaehler博士还在斯坦福大学AI实验室任职,曾作为成员,赢得DARPA Grand Challenge的胜利,这是一个无人驾驶技术业内的顶级比赛,由DARPA(美国国防先进研究项目局)出资赞助。美国国会授权DARPA部门可以出资支持赞助那些能够给军事应用带来革命性改变的技术,这项赛事一开始是为了促进在极限环境下无人驾驶车辆技术的发展。

Gary Bradski是Arraiy.ai的CTO,曾在多个创业公司任职,并在斯坦福大学AI实验室的计算机科学部门做consulting professor,他是OpenCV库的创立者,在开源方面有很多贡献,在开源社区享有极高声誉。

 

深度学习是OpenCV的未来方向之一

上一篇也提到,Learning OpenCV 3这本书在谈到OpenCV的未来时首先提到了「深度学习」:

OpenCV可以读取和运行由例如Caffe、Torch、Theano等深度学习框架训练的模型,代码在:
https://github.com/opencv/opencv_contrib/tree/master/modules/cnn_3dobj。

OpenCV还将支持在嵌入式系统和智能相机这样的设备上运行深度学习模块。OpenCV的DNN模块扩展自tiny_dnn。

tiny_dnn是一个基于DNN的轻量级深度学习开源库,现在OpenCV已发展为支持包括Tensorflow在内的大多数主流深度学习框架。

 

实现方式:通过DNN调用训练好的模型

去年差不多这个时候(2017年8月),pyimagesearch网站发表过一篇文章《Deep Learning with OpenCV》:

文中提到,我们不能也不应该使用OpenCV来训练模型,而是应该通过DNN模块来调用其他深度学习框架训练的结果。

 

什么是DNN?

在介绍DNN之前,我们再来简单看一下OpenCV的安装、代码结构等。有两个地方可以下载OpenCV,一个是官网https://opencv.org,另一个是OpenCV的GitHub。官网上,每个版本都给出了下面这样的列表:

Documentation
Sources
Win pack
iOS pack
Android pack

可以根据需要下载相应内容。Documentation是在线文档,pack就是sources+build。而GitHub上面是专门放sources的,另外,如果需要opencv_contrib就只能来GitHub下载。

DNN即Deep Neural network,一种人工神经网络,简单地说就是很多层的神经网络。OpenCV从3.1.0开始支持DNN,2.x时代是没有dnn的,我看了一下2.4.9的\sources\modules\contrib\src文件夹,一共39个cpp文件,没有dnn相关的源码,包括最新2.x版本的2.4.13.6也没有。3.1.0和3.2.0的DNN模块都在opencv_contrib中,3.3.0开始被提到主仓库中了。

另外,有两个与DNN长得很像的名词:CNN、RNN,CNN是convolutional neural network,即卷积神经网络,RNN是recurrent neural network,循环神经网络。

 

Tensorflow:一种深度学习框架

Tensorflow最初是由Google Brain团队(隶属于Google的AI部门)中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持。这里有两点需要注意,一是「开源」,Tensorflow在GitHub上保持开源,但Google仍在维护其内部版本。二是「之一」,Tensorflow只是众多开源机器智能库中的一种。

为什么选择Tensorflow呢?简单的说,首先Tensorflow可能是最流行的。目前流行的几个深度学习库是:Tensorflow、Theano、Torch、Keras、Caffe。其次,Tensorflow的接口非常简洁。最后,Tensorflow是为产品而生的,而不仅仅是研究。

 

两个数据集

我看到很多使用OpenCV调用Tensorflow(或者Caffe)模型的例子,都用到了下面两个数据集。

CIFAR-10数据集:
http://www.cs.toronto.edu/~kriz/cifar.html
它有python、Matlab、binary三个版本的数据集,其中binary是适用于C/C++的。

MNIST数据集:
http://yann.lecun.com/exdb/mnist/

大家可以思考一下,如何建立自己的数据集?

 


本文2018-08-05 发于公众号:老王AI路,更多文章可扫描左侧二维码查看

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值