点上方计算机视觉联盟获取更多干货

仅作学术分享,不代表本公众号立场,侵权联系删除

转载于:新机器视觉

编辑 | 王萌(深度学习冲鸭公众号)

AI博士笔记系列推荐

周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接

如何使用YOLO、OpenCV和Python检测图像和视频流中的对象。主要内容有:

简要讨论YOLO算法;

使用YOLO、OpenCV、Python进行图像检测;

使用YOLO、OpenCV、Python进行视频流检测;

讨论YOLO算法的优点和缺点;

当涉及基于深度学习的对象检测时,常用的三类算法有:

R-CNN家族系列算法:R-CNN、fast R-CNN以及faster R-CNN;

单发检测器(SSD);

YOLO算法;

R-CNN算法是最早的基于深度学习的目标检测器之一,其结构是两级网络;

首先需要诸如选择性搜索之类的算法来提出可能包含对象的候选边界框;然后将这些区域传递到CNN算法进行分类;R-CNN算法存在的问题在于其仿真很慢,并且不是完整的端到端的目标检测器。Fast R-CNN算法对原始R-CNN进行了相当大的改进,即提高准确度并减少执行正向传递所花费的时间,但是,该模型仍然依赖于外部区域搜索算法。直到2015年,faster R-CNN才成为真正的端到端深度学习目标检测器,删除了选择性搜索的要求,而是依赖于(1)完全卷积的区域提议网络(RPN)和(2)可以预测对象边界框和“对象”分数(量化它是一个区域的可能性的分数)。然后将RPN的输出传递到R-CNN组件以进行最终分类和标记。R-CNN系列算法的检测结果一般都非常准确,但R-CNN系列算法最大的问题在仿真速度——非常慢,即使是在GPU上也仅获得5 FPS。为了提高基于深度学习的目标检测器的速度,单次检测器(SSD)和YOLO都使用单级检测器策略(one stage)。这类算法将对象检测视为回归问题,获取给定的输入图像并同时学习边界框坐标和相应的类标签概率。通常,单级检测器往往不如两级检测器准确,但其速度明显更快。YOLO是单级检测器中一个很好的算法。YOLO算法于2015年提出,在GPU上获得了  45 FPS性能,此外,同时也提出了一个较小的变体称为“Fast YOLO”,在GPU上达到155 FPS的性能。YOLO经历了许多次的迭代,包括YOLOv2,能够检测超过9,000个目标。直到最近提出的YOLOv3算法,YOLOv3模型比之前的版本要复杂得多,但它是YOLO系列目标检测器中最好的一款。本文使用YOLOv3,并在COCO数据集上进行训练。COCO数据集由80个标签组成,可以使用此链接找到YOLO在COCO数据集上训练的内容的完整列表。

01

项目结构

$ tree.
├── images
│   ├── baggage_claim.jpg
│   ├── dining_table.jpg
│   ├── living_room.jpg
│   └── soccer.jpg
├── output
│   ├── airport_output.avi
│   ├── car_chase_01_output.avi
│   ├── car_chase_02_output.avi
│   └── overpass_output.avi
├── videos
│   ├── airport.mp4
│   ├── car_chase_01.mp4
│   ├── car_chase_02.mp4
│   └── overpass.mp4
├── yolo-coco
│   ├── coco.names
│   ├── yolov3.cfg
│   └── yolov3.weights
├── yolo.py
└── yolo_video.py

从上面可以看出,项目包括4个文件夹和2个Python脚本。

目录(按重要性顺序)是:

yolo - coco/  :YOLOv3对象检测器预先(在COCO数据集上)训练得到最终的权重文件,可以在Darknet团队主页找到对应的文件;

images/ :此文件夹包含四个静态图像,之后将执行对象检测以进行测试和评估;

videos/ :使用YOLO对图像进行目标检测器后,将实时处理视频。该文件夹中包含四个示例视频可供测试;

输出/  :输出已由YOLO处理并带有边界框和类名称注释的视频可以放在此文件夹中;

此外还有两个Python脚本——yolo.py和 yolo_video.py ,第一个脚本用于图像处理,第二个脚本用于视频处理。

下面进入实战内容,你准备好了吗?

02

将YOLO应用于图像对象检测

YOLO算法并没有应用非最大值抑制,这里需要说明一下。应用非最大值抑制可以抑制明显重叠的边界框,只保留最自信的边界框,NMS还确保我们没有任何冗余或无关的边界框。

利用OpenCV内置的NMS DNN模块实现即可实现非最大值抑制 ,所需要的参数是边界框、 置信度、以及置信度阈值和NMS阈值。

假设存在至少一个检测结果,就循环用非最大值抑制确定idx 。然后,我们使用随机类颜色在图像上绘制边界框和文本 。最后,显示结果图像,直到用户按下键盘上的任意键。

下面进入测试环节,打开一个终端并执行以下命令:

$python yolo.py --image    images/baggage_claim.jpg --yolo yolo-coco

[INFO] loading YOLO from disk...
[INFO] YOLO took 0.347815 seconds

03

视频检测解决

那么在学会检测单张图像后,我们也可以利用YOLO算法实现视频流中的目标检测。

同样,首先从导入相关数据包和命令行参数开始。与之前不同的是,此脚本没有-- image参数,取而代之的是量个视频路径:

-- input  :输入视频文件的路径;

-- output  :输出视频文件的路径;

视频的输入可以是手机拍摄的短视频或者是网上搜索到的视频。另外,也可以通过将多张照片合成为一个短视频也可以。本博客使用的是在PyImageSearch上找到来自imutils的VideoStream类的 示例。

代码与处理图形时候相同:

YOLO目标检测器的最大限制和缺点是:

它并不总能很好地处理小物体;

它尤其不适合处理密集的对象;

限制的原因是由于YOLO算法其本身:

YOLO对象检测器将输入图像划分为SxS网格,其中网格中的每个单元格仅预测单个对象;

如果单个单元格中存在多个小对象,则YOLO将无法检测到它们,最终导致错过对象检测;

因此,如果你的数据集是由许多靠近在一起的小对象组成时,那么就不应该使用YOLO算法。就小物体而言,更快的R-CNN往往效果最好,但是其速度也最慢。在这里也可以使用SSD算法, SSD通常在速度和准确性方面也有很好的权衡。

值得注意的是,在本教程中,YOLO比SSD运行速度慢,大约慢一个数量级。因此,如果你正在使用预先训练的深度学习对象检测器供OpenCV使用,可能需要考虑使用SSD算法而不是YOLO算法。

因此,在针对给定问题选择对象检测器时,我倾向于使用以下准则:

如果知道需要检测的是小物体并且速度方面不作求,我倾向于使用faster R-CNN算法;

如果速度是最重要的,我倾向于使用YOLO算法;

如果需要一个平衡的表现,我倾向于使用SSD算法;

end

我是王博Kings,一名985AI博士,华为云专家/CSDN博客专家,单个AI项目在Github上获得了2000标星,为了方便大家交流,附上了联系方式。

这是我的私人微信,还有少量坑位,可与相关学者研究人员交流学习 

目前开设有人工智能、机器学习、计算机视觉、自动驾驶(含SLAM)、Python、求职面经、综合交流群扫描添加CV联盟微信拉你进群,备注:CV联盟

王博Kings 的公众号,欢迎关注,干货多多

王博Kings的系列手推笔记(附高清PDF下载):

博士笔记 | 周志华《机器学习》手推笔记第一章思维导图

博士笔记 | 周志华《机器学习》手推笔记第二章“模型评估与选择”

博士笔记 | 周志华《机器学习》手推笔记第三章“线性模型”

博士笔记 | 周志华《机器学习》手推笔记第四章“决策树”

博士笔记 | 周志华《机器学习》手推笔记第五章“神经网络”

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(上)

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(下)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(上)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(下)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(上)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(下)

博士笔记 | 周志华《机器学习》手推笔记第九章聚类

博士笔记 | 周志华《机器学习》手推笔记第十章降维与度量学习

博士笔记 | 周志华《机器学习》手推笔记第十一章特征选择与稀疏学习

博士笔记 | 周志华《机器学习》手推笔记第十二章计算学习理论(上)

博士笔记 | 周志华《机器学习》手推笔记第十二章计算学习理论(下)

博士笔记 | 周志华《机器学习》手推笔记第十三章半监督学习

博士笔记 | 周志华《机器学习》手推笔记第十四章概率图模型

点个在看支持一下吧

收藏 | 使用 YOLO及OpenCV 实现目标检测相关推荐

  1. 10分钟学会使用YOLO及Opencv实现目标检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:新机器视觉 计算机视觉领域中,目标检测一直是工业应用上比 ...

  2. python opencv输出mp4_10分钟学会使用YOLO及Opencv实现目标检测

    点击边框调出视频工具条 计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别.行人检测等,国内的旷视科技.商汤科技等公司在该领域占据行业领先地位.相对于图像分类任务而言,目 ...

  3. OpenCV+YOLO+IP摄像头实现目标检测

    title: OpenCV+YOLO+IP摄像头实现目标检测 前言 学习OpenCV.YOLO到现在我实现了调用本地摄像头使用自己训练的模型进行目标识别,然后想着能不能远程获取视频数据,然后再PC端处 ...

  4. 独家 | 在树莓派+Movidius NCS上运用YOLO和Tiny-YOLO完成目标检测(附代码下载)

    作者:Adrian Rosebrock 翻译:吴振东 校对:郑滋 本文约5000字,建议阅读10+分钟 本文教你如何在树莓派和Movidius神经加速棒上运用Tiny-YOLO来实现近乎实时的目标检测 ...

  5. YOLO v2实现图像目标检测

    作者介绍 熊文博,男,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组. 研究方向:机器视觉与人工智能 电子邮件:996270714@qq.com 师兄的CSDN主页: 欢迎关注和 ...

  6. python目标检测与识别_Python 使用Opencv实现目标检测与识别的示例代码

    在上章节讲述到图像特征检测与匹配 ,本章节是讲述目标检测与识别.后者是在前者的基础上进一步完善. 在本章中,我们使用HOG算法,HOG和SIFT.SURF同属一种类型的描述符.功能代码如下: impo ...

  7. 使用opencv训练目标检测模型基于cascade模型

    使用opencv训练目标检测模型基于cascade模型 基于Haar特征的cascade分类器(classifiers) 是Paul Viola和 Michael Jone在2001年,论文" ...

  8. Cython——Windows环境下配置faster-rcnn、yolo、ctpn等目标检测框架中Cython文件[cython_nms、bbox、gpu_nms]编译问题解决方案

    问题描述 AttributeError: 'MSVCCompiler' object has no attribute 'compiler_so' ValueError: Buffer dtype m ...

  9. 《You Only Look Once: Unified, Real-Time Object Detection》YOLO一种实时目标检测方法 阅读笔记(未完成版)

    文章目录 1. one-stage与two-stage检测算法 1. 模型过程 1.1 grid cell 1.2 bounding box与confidence score 1.3 类别预测 1.4 ...

最新文章

  1. 深度学习先驱Bengio:AI顶会论文的Deadline是时候取消了
  2. SpringBoot(十五)_springboot实现预览pdf
  3. js 对 URL 参数进行 加密 解密
  4. 【Linux就该这么学 20期培训笔记 01】部署虚拟环境安装linux系统
  5. 跳房子(ybtoj-单调队列)
  6. java url拦截器框架_使用Spring Interceptor实现URL访问校验
  7. 今天,强行打个广告!
  8. SpringMVC 自定义转换器
  9. 单链表 和 顺序表 实现的 通讯录
  10. Java Ajax技术详解:(一)Ajax 简介
  11. Excel的在线翻译插件,翻译结果添加到备注里~
  12. 业务层战略制定的思路和方法_如何确保公司年度战略目标落地—打造战略执行的方法论...
  13. 三年前,我差点成了爬虫大师
  14. python 读取文件报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 0: invalid start
  15. 健身房人物生活锻炼照片调色艺术LR预设
  16. key组合按键,长短按键,连续按键 识别方案
  17. gc System.gc() fullGC
  18. 【有利可图网】双十一“亮眼”设计大赏来了!!
  19. 隐私计算是什么?有什么作用?
  20. php实习生实习日记,实习日记

热门文章

  1. php试题及答案 博客,转php面试题及我的答案(一)
  2. 电脑html外链加密,WordPress 无需插件外链加密转内链
  3. matlab图片白边_Matlab论文插图消除白边的5种方法
  4. 一个数等于两个不同素数的乘机_相亲数:数字所表达的友情和浪漫
  5. 财付通php接口,dedecms 财付通接口,dedecms财付通_PHP教程
  6. php 读写远程文件内容,php获取远程文件内容的函数
  7. git新建空白文件没有生效
  8. python 分类_Python数据类型分类
  9. java lambda map循环停止_Map 使用 Lambda 的 forEach 实现跳出循环操作
  10. 鸿蒙系统都有谁参与,华为鸿蒙系统功能有什么特别的-华为鸿蒙系统有什么新功能...