cv2.dnn.blobFromImage函数

                     深度学习:OpenCV的blobFromImage如何工作

深度学习中OpnenCV的blobFromImage是对输入图像做了什么呢?

                                   

在PyImageSearch有许多读者好奇,blobFromImage到底是对图像做了了什么样的处理 ?今天我就来告诉大家。

你也必定明白,为了从深度神经网络获得预测结果,你首先需要对你的数据进行预处理。

在深度学习和图像分类领域,预处理任务通常包含:

        1.减均值(Mean subtraction)

        2.按比例缩放(Scaling by some factor)

OpenCV新的神经网络模块dnn包含两个预处理函数,为通过预训练深度学习模型进行分类,做好准备。

今天的博文,我准备剖析OpenCV的cv2.dnn.blobFromImage和cv2.dnn.blobFromImages预处理函数,理解他们是如何工作的。

OpenCV提供两个函数用来促进图像预处理,用于深度学习分类。

      cv2.dnn.blobFromImage

     cv2.dnn.blobFromImages

这两个函数执行:

     1.减均值

     2.缩放

     3.通道交换(可选)

下面我们有这些内容:

     1.研究减均值与缩放

     2.解释每个深度学习预处理函数的函数签名

     3.在细节上研究这些方法

     4.最后,对一副图像运用OpenCV的深度学习函数

深度学习的减均值

                              

在我没有深入解释OpenCV深度学习预处理函数之前,我们首先需要理解减均值的作用。减均值帮助我们对抗输入图像的亮度变化,所以我们将减均值作为一个技术用来帮助我们的卷积神经网络。

在训练我们深度神经网络之前,我们首先计算像素平均值。我们计算训练集所有图像,在R,G,B三个通道。

这意味这我们最终我们得到三个值:

                                                                \mu_R,     \mu_G,    and   \mu_B

通常,结果是一个三元组,分别由红绿蓝通道的均值组成。

例如,在ImageNet训练集,R = 103.93 , G = 116.77, B = 123.68。如果你已经用过一个ImageNet的预训练网络,或许之前已经遇到过这些值。

然而,在某些情况下,红绿蓝的均值或许按通道计算的而不是按像素,结果就是一个MxN的矩阵。在这种情况下,输入图像在训练或者测试的时候,减去的就是这个MxN的矩阵。

这两种方法用于减均值都是完全有效的,我们常看到按像素的版本,它用的更多,尤其是对于大的数据集。

当我们准备传入一个图像到我们的网络,图像的每个通道减均值μ:

                                                              R = R - \mu_R

                                                              G = G - \mu_G

                                                             B = B - \mu_B

 

我们也有一个比例因子, \sigma, 需要加进这个标准化:

                                                            R = (R - \mu_R) / \sigma

                                                            G = (G - \mu_G) / \sigma

                                                           B = (B - \mu_B) / \sigma

\sigma的值可以是训练集上的标准偏差(从而将预处理步骤转换为标准分数/ z分数)。 但是,也可以手动设置\sigma(相对计算)以将输入图像空间缩放到特定范围 - 它实际上取决于架构,网络如何训练以及作者所用的技术。

需要注意:不是所有的深度学习架构执行减均值和缩放在预处理你的图像之前,一定要读你所使用网络的相关文献。

正如您在深入学习过程中所发现的,一些网络架构只执行平均减法(因此设置\sigma=1)。其他架构执行减法和缩放。甚至其他架构不选择执行减法或缩放。总之,检查您正在实施/使用的网络相关出版物,以验证作者正在使用的技术。

非正式地,blob只是具有相同空间维度(即宽度和高度),相同深度(通道数)的图像(可能是集合),它们都以相同的方式被预处理。

cv2.dnn.blobFromImage 和  cv2.dnn.blobFromImages功能差不多,

blob = cv2.dnn.blobFromImage(image, scalefactor=1.0, size, mean, swapRB=True,crop=False,ddepth = CV_32F )

   1.image,这是传入的,需要进行处理的图像。

   2.scalefactor,执行完减均值后,需要缩放图像,默认是1,需要注意,scalefactor = 1 / \sigma,这是真正乘上的值。 

   3.size,这是神经网络,真正支持输入的值。

   4.mean,这是我们要减去的均值,可以是R,G,B均值三元组,或者是一个值,每个通道都减这值。如果执行减均值,通道顺序是R、G、B。 如果,输入图像通道顺序是B、G、R,那么请确保swapRB = True,交换通道。

    5.swapRB,OpenCV认为图像 通道顺序是B、G、R,而减均值时顺序是R、G、B,为了解决这个矛盾,设置swapRB=True即可。

    6.crop,如果crop裁剪为真,则调整输入图像的大小,使调整大小后的一侧等于相应的尺寸,另一侧等于或大于。然后,从中心进行裁剪。如果“裁剪”为“假”,则直接调整大小而不进行裁剪并保留纵横比。

    7.ddepth, 输出blob的深度,选则CV_32F or CV_8U。

cv2.dnn.blobFromImage函数返回的blob是我们输入图像进行随意从中心裁剪,减均值、缩放和通道交换的结果。cv2.dnn.blobFromImages和cv2.dnn.blobFromImage不同在于,前者接受多张图像,后者接受一张图像。多张图像使用cv2.dnn.blobFromImages有更少的函数调用开销,你将能够更快批处理图像或帧。

以上内容翻译自https://www.pyimagesearch.com/2017/11/06/deep-learning-opencvs-blobfromimage-works/

其中介绍的例子不再翻译,感兴趣的道友,可以点击链接查看。

  • 19
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
cv2.dnn.blobfromimageOpenCV函数库中的一个函数,用于将图像转换为神经网络的输入,更具体地说,是生成网络所需的blobBlob是一种二进制对象,包含了图像数据和元数据。对于神经网络,输入数据经常被表示为blob。例如,卷积神经网络中的输入blob包括多个通道,每个通道都包含一层维度,例如高度,宽度和深度。 cv2.dnn.blobfromimage函数可以将输入图像转换为blob格式的数据,可使用在深度学习中的各种神经网络算法中。这个函数需要传入多个参数,其中最重要的是scalefactor、size、mean、swapRB和crop。这些参数的详细解释如下: 1. scalefactor:指定图像缩放因子,可以理解为将原始图像缩小或放大的因子,默认值为1.0。 2. size:指定网络中卷积层的输入大小,以元组形式呈现,例如(224,224)表示输入大小为224X224。 3. mean:减去的均值值。默认值是[0,0,0,0],在计算机视觉中常用的平均值格式是[B, G, R],例如[104,117,123]。 4. swapRB:交换通道标志,指定是否要交换颜色通道。默认值为True。 5. crop:指定是否进行裁剪操作。默认值为False,不进行裁剪。 综上所述,cv2.dnn.blobfromimage函数OpenCV中非常重要的函数,可以在深度学习中用于将图像转换为输入格式,生成blob。它的功能强大且灵活,能够为如Yolo、Resnet、AlexNet等著名神经网络提供优秀的输入数据支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值