OpenCV4.0 DNN-googleNet

本文介绍了OpenCV 4.0中的DNN模块,并通过GoogleNet的示例详细讲解了核心函数`blobFromImage`、`setInput`和`forward`的用法。讨论了mean参数的作用以及输入图像与网络的关系,同时提供了相关函数的源码解析。
摘要由CSDN通过智能技术生成

OpenCV4.0 DNN-googleNet

OpenCV 4.0最近发布,其中一大亮点便是加入DNN;之前的文章中介绍了OpenCV 4.0的编译,本系列就通过GoogleNet的demo来窥探OpenCV 4.0的DNN。

核心函数介绍

首先需要准备GoogleNet的prototxt,caffemodel,和synset_words.txt;这个在网上很容易下载到。然后就是需要一张RGB或者BGR的测试图片,本文使用的是官方提供的经典图片space_shuttle.jpg。
我们使用的函数非常简单,主要涉及函数有以下几个:

  • readNetFromCaffe
  • blobFromImage
  • setInput
  • forward

blobFormImage

函数原型
Mat cv::dnn::blobFromImage(
    InputArray 	image,
    double 	scalefactor = 1.0,
    const Size & 	size = Size(),
    const Scalar & 	mean = Scalar(),
    bool 	swapRB = false,
    bool 	crop = false,
    int 	ddepth = CV_32F )		

以上是官方给出的函数原型。

  • image:输入图像
  • scalefactor: multiplier for image values.
  • size:指的不是输入图像的尺寸,是指所需要的尺寸,也就是返回的Mat中数据的尺寸。
  • swapRB:是否交换R和B分量,这在之前的色彩空间转换的文章中介绍过
  • crop:输入图像大小与size不符的时候,是否需要裁剪
  • ddepth:图像的数据类型,目前仅支持32F和8U

以上的参数都很好理解,接下来是关于mean参数,如果之前没有深入研究过深度学习,这个还是不太好理解的。首先给出mean的数值:(104 117 123);数字从什么地方来的呢?这个是在googleNet训练的时候设定的,节选部分train_val.prototxt,可以看到在训练的时候transform_param中设置了mean。

name: "GoogleNet"
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 224
    mean_value: 104
    mean_value: 117
    mean_value: 123
  }
  data_param {
    so
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值