专栏首页量子位OpenCV+深度学习预训练模型,简单搞定图像识别 | 教程

OpenCV+深度学习预训练模型,简单搞定图像识别 | 教程

李林 编译自 pyimagesearch 作者 Adrian Rosebrock 量子位 报道 | 公众号 QbitAI

OpenCV是一个2000年发布的开源计算机视觉库,有进行物体识别、图像分割、人脸识别、动作识别等多种功能,可以在Linux、Windows、Android、Mac OS等操作系统上运行,以轻量级、高效著称,且提供多种语言接口。

而OpenCV最近一次版本更新,为我们带来了更好的深度学习支持,在OpenCV中使用预训练的深度学习模型变得非常容易。

pyimagesearch网站今天发布了一份用OpenCV+深度学习预训练模型做图像识别的教程,量子位编译整理如下:

最近,OpenCV 3.3刚刚正式发布,对深度学习(dnn模块)提供了更好的支持,dnn模块目前支持Caffe、TensorFlow、Torch、PyTorch等深度学习框架。

另外,新版本中使用预训练深度学习模型的API同时兼容C++和Python,让系列操作变得非常简便:

  • 从硬盘加载模型;
  • 对输入图像进行预处理;
  • 将图像输入网络,获取输出的分类。

当然,我们不能、也不该用OpenCV训练深度学习模型,但这个新版本让我们能把用深度学习框架训练好了的模型拿来,高效地用在OpenCV之中。

这篇文章就展示了如何用ImageNet上预训练的深度学习模型来识别图像。

OpenCV 3.3中的深度学习

自OpenCV 3.1版以来,dnn模块一直是opencv_contrib库的一部分,在3.3版中,它被提到了主仓库中。

用OpenCV 3.3,可以很好地利用深度学习预训练模型,将它们作为分类器。

新版OpenCV兼容以下热门网络架构:

  • AlexNet
  • GoogLeNet v1(也叫Inception-5h)
  • ResNet-34/50/…
  • SqueezeNet v1.1
  • VGG-based FCN
  • ENet
  • VGG-based SSD
  • MobileNet-based SSD

该模块的主要贡献者Rynikov Alexander,对这个模块有远大的计划,不过,他写的release notes是俄语的,感兴趣的同学请自行谷歌翻译着读:https://habrahabr.ru/company/intel/blog/333612/

我认为,dnn模块会对OpenCV社区产生很大的影响。

函数和框架

在OpenCV中使用深度学习预训练模型,首先要安装OpenCV 3.3,安装过程量子位就不再详细描述了……

下面是我们将用到的一些函数。

在dnn中从磁盘加载图片:

  • cv2.dnn.blobFromImage
  • cv2.dnn.blobFromImages

用“create”方法直接从各种框架中导出模型:

  • cv2.dnn.createCaffeImporter
  • cv2.dnn.createTensorFlowImporter
  • cv2.dnn.createTorchImporter

使用“读取”方法从磁盘直接加载序列化模型:

  • cv2.dnn.readNetFromCaffe
  • cv2.dnn.readNetFromTensorFlow
  • cv2.dnn.readNetFromTorch
  • cv2.dnn.readhTorchBlob

从磁盘加载完模型之后,可以用.forward方法来向前传播我们的图像,获取分类结果。

用OpenCV和深度学习给图像分类

接下来,我们来学习如何用Python、OpenCV和一个预训练过的Caffe模型来进行图像识别。

下文用到的深度学习模型是在ImageNet上预训练过的GoogleLeNet。GoogleLeNet出自Szegedy等人2014年的论文Going Deeper with Convolutions,详情见:https://arxiv.org/abs/1409.4842

首先,打开一个新文件,将其命名为deep_learning_with_opencv.py,插入如下代码,来导入我们需要的包:

然后拆解命令行参数:

其中第8行ap = argparse.ArgumentParser()是用来创建参数解析器的,接下来的代码用来创建4个命令行参数:

  • —image:输入图像的路径;
  • —prototxt:Caffe部署prototxt的路径
  • —model:预训练的Caffe模型,例如网络权重等;
  • —labels:ImageNet标签的路径,例如syn-sets。

我们在创建参数之后,将它们解析并存在一个变量args中,供稍后使用。

接下来,加载输入图像和标签:

第20行从磁盘加载了图像,第23行和24行加载了这些标签:

搞定了标签之后,我们来看一下dnn模块:

注意上面代码中的注释,我们使用cv2.dnn.blobFromImage执行mean subtraction来对输入图像进行归一化,从而产生一个已知的blob形状。

然后从磁盘加载我们的模型:

我们用cv2.dnn.readNetFromCaffe来加载Caffe模型定义prototxt,以及预训练模型。

接下来,我们以blob为输入,在神经网络中完成一次正向传播:

请注意:我们不是在训练CNN,而是在使用预训练模型,因此只需要将blob从网络中传递过去,来获取结果,不需要反向传播。

最后,我们来为输入图像取出5个排名最高的预测结果:

我们可以用NumPy来选取排名前5的结果,然后将他们显示出来:

分类结果

我们已经在OpenCV中用Python代码实现了深度学习图像识别,现在,可以拿一些图片来试一试。

打开你的终端,执行以下命令:

就会得到这样的结果:

OpenCV和GoogleLeNet正确地认出了比格小猎犬,排名第一的结果是正确的,之后的4项结果相关度也很高。

在CPU上运行这个算法,得到结果也只需要不到一秒钟。

再来一张:

结果如下:

再来:

结果依然不错:

最后一个例子:

也认得不错:

相关链接

教程原文: http://www.pyimagesearch.com/2017/08/21/deep-learning-with-opencv/

相关代码: 在原文下填邮箱获取,或在量子位公众号(QbitAI)对话界面回复“OpenCV”获取。

本文分享自微信公众号 - 量子位(QbitAI),作者:专注报道AI

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从RedHat到MongoDB,开源商业软件是如何占领世界的

    如今开源软件已经遍地开花,其中独角兽就有估值65亿美元的Mulesoft、估值40亿美元的MongoDB等。IBM去年也以320亿美元收购了Redhat。

    量子位
  • 谷歌能打电话预订餐厅的AI,苹果手机也马上也可以用了

    去年的Google I/O大会上,有一个炸裂的产品展示。它的名字是:Duplex!

    量子位
  • F8大动作:PyTorch 1.0现身(Logo也换了),围棋AI开源

    Caffe2和PyTorch合体事件有了清晰的发展方向,同样服务于深度学习开发者的ONNX也宣布支持更多的框架。

    量子位
  • 支持GPU的社区版WRF模式

    这些年随着GPU算力的不断发展,不少机构在尝试利用GPU加速当前的数值天气预报模式。至少到目前为止还没看到官方发布的完整支持GPU版本的数值预报模式。

    bugsuse
  • 大数据时代的裸奔

    我以维克托·迈尔·舍恩伯格肯尼思·库克耶所著的《大数据时代》为基础,又参考了其它书籍文献,结合我以前学习过的数据仓库和数据挖掘知识,把内容进行了提炼和总结。

    华章科技
  • 大数据时代的裸奔

     1、相关关系比因果关系更重要   老王开了个包子铺,有时做少了不够卖,有时做多了没卖完,两头都是损失。老王琢磨着买包子的都是街坊,他们买包子是有规律的,例如老...

    用户1289394
  • Quikapp快应用小程序开发入门教程

    还是失败,新出的东西官网还不是很完善,后面应该不会出现,这里花了几分钟找到了原因,项目少了hap-tools库, 这里没看到官网有这个库的介绍,package....

    IMWeb前端团队
  • 资料泄露!2016需求分析人才报告流入市场

    本文内容为CDA数据分析院原创资料 这是一个来自CDA数据分析院内部培训关于需求侧人才报告的PPT,我们不张扬文字,只喜欢用数据说话!本报告适合刚入门数据分析的...

    CDA数据分析师
  • 4 小时 40 万访问!我们跟第一个刷爆朋友圈的小程序聊了聊

    根据对方提供的「小程序数据助手」截图,在朋友圈爆发后,仅用 4 个小时,大约在晚上 9 点,「匿名聊聊」的访问页面(PV)就从数千冲至 40 多万。

    知晓君
  • 数据科学如何助力科研?

    硬件平台、软件环境和算法模型的一站式支持,可以让各学科的研究都能从数据科学的发展获益。

    王树义

扫码关注云+社区

领取腾讯云代金券