您现在的位置是:主页 > Web前端技术 > Web前端技术

如何使用深度学习和OpenCV进行目标检测开发技术

IDCBT2021-12-28服务器技术人已围观

简介这篇文章给大家分享的是有关如何使用深度学习和OpenCV进行目标检测的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 使用深度学习和 OpenCV 进行目标

这篇文章给大家分享的是有关如何使用深度学习和OpenCV进行目标检测的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

使用深度学习和 OpenCV 进行目标检测

基于深度学习的对象检测时,您可能会遇到三种主要的对象检测方法:

Faster R-CNNs (Ren et al., 2015)

You Only Look Once (YOLO) (Redmon et al., 2015)

Single Shot Detectors (SSD)(Liu 等人,2015 年)

Faster R-CNNs 可能是使用深度学习进行对象检测最“听说”的方法;然而,该技术可能难以理解(特别是对于深度学习的初学者)、难以实施且难以训练。

此外,即使使用“更快”的 R-CNN 实现(其中“R”代表“区域提议”),算法也可能非常慢,大约为 7 FPS。

如果追求纯粹的速度,那么我们倾向于使用 YOLO,因为这种算法要快得多,能够在 Titan X GPU 上处理 40-90 FPS。 YOLO 的超快变体甚至可以达到 155 FPS。

YOLO 的问题在于它的准确性不高。

最初由 Google 开发的 SSD 是两者之间的平衡。该算法比 Faster R-CNN 更直接。

MobileNets:高效(深度)神经网络

在构建对象检测网络时,我们通常使用现有的网络架构,例如 VGG 或 ResNet,这些网络架构可能非常大,大约 200-500MB。 由于其庞大的规模和由此产生的计算数量,诸如此类的网络架构不适合资源受限的设备。 相反,我们可以使用 Google 研究人员的另一篇论文 MobileNets(Howard 等人,2017 年)。我们称这些网络为“MobileNets”,因为它们专为资源受限的设备而设计,例如您的智能手机。 MobileNet 与传统 CNN 的不同之处在于使用了深度可分离卷积。 深度可分离卷积背后的一般思想是将卷积分成两个阶段:

    3×3 深度卷积。

    随后是 1×1 逐点卷积。

    这使我们能够实际减少网络中的参数数量。 问题是牺牲了准确性——MobileNets 通常不如它们的大哥们准确…… ……但它们的资源效率要高得多。

    使用 OpenCV 进行基于深度学习的对象检测

    MobileNet SSD 首先在 COCO 数据集(上下文中的常见对象)上进行训练,然后在 PASCAL VOC 上进行微调,达到 72.7% mAP(平均精度)。

    因此,我们可以检测图像中的 20 个对象(背景类为 +1),包括飞机、自行车、鸟、船、瓶子、公共汽车、汽车、猫、椅子、牛、餐桌、狗、马、摩托车、人、盆栽 植物、羊、沙发、火车和电视显示器。

    在本节中,我们将使用 OpenCV 中的 MobileNet SSD + 深度神经网络 (dnn) 模块来构建我们的目标检测器。

    打开一个新文件,将其命名为 object_detection.py ,并插入以下代码:

    import numpy as np
    import cv2
    if __name__=="__main__":
    	image_name = '11.jpg'
    	prototxt = 'MobileNetSSD_deploy.prototxt.txt'
    	model_path = 'MobileNetSSD_deploy.caffemodel'
    	confidence_ta = 0.2
    	# 初始化MobileNet SSD训练的类标签列表
    	# 检测,然后为每个类生成一组边界框颜色
    	CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
    			   "bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
    			   "dog", "horse", "motorbike", "person", "pottedplant", "sheep",
    			   "sofa", "train", "tvmonitor"]
        COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))

    标签:

    很赞哦! ()

本栏推荐