10分钟学会使用YOLO及Opencv实现目标检测
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文转自:新机器视觉
计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别、行人检测等,国内的旷视科技、商汤科技等公司在该领域占据行业领先地位。相对于图像分类任务而言,目标检测会更加复杂一些,不仅需要知道这是哪一类图像,而且要知道图像中所包含的内容有什么及其在图像中的位置,因此,其工业应用比较广泛。那么,今天将向读者介绍该领域中表现优异的一种算算法——“你只需要看一次”(you only look once,yolo),提出该算法的作者风趣幽默可爱,其个人主页及论文风格显示了其性情,目前该算法已是第三个版本,简称YoLo V3。
在本教程中,将学习如何使用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数据集上训练的内容的完整列表。
0
1
项目结构
$ 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 ,第一个脚本用于图像处理,第二个脚本用于视频处理。下面进入实战内容,你准备好了吗?
0
2
将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
0
3
视频检测解决
那么在学会检测单张图像后,我们也可以利用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
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
10分钟学会使用YOLO及Opencv实现目标检测相关推荐
- python opencv输出mp4_10分钟学会使用YOLO及Opencv实现目标检测
点击边框调出视频工具条 计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别.行人检测等,国内的旷视科技.商汤科技等公司在该领域占据行业领先地位.相对于图像分类任务而言,目 ...
- 收藏 | 使用 YOLO及OpenCV 实现目标检测
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:新机器视觉 编辑 | 王萌(深度学习冲鸭公众号) AI博士笔记系列推荐 周志华<机器学习>手推笔记 ...
- UWP开发入门(十九)——10分钟学会在VS2015中使用Git
原文:UWP开发入门(十九)--10分钟学会在VS2015中使用Git 写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支 ...
- python写好的代码怎么给别人使用-10分钟学会用python写游戏!Python其实很简单!...
原标题:10分钟学会用python写游戏!Python其实很简单! Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以在这里给各位看官们准备了高价值Python学习视频教程 ...
- 百度贴吧自动发帖_引流网赚之百度贴吧引流窍门:实操引流教程百度贴吧零成本自动顶帖+10分钟学会豆瓣顶帖引流...
引流网赚之百度贴吧窍门:实操引流教程<百度贴吧零成本自动顶帖>+<10分钟学会豆瓣顶帖引流> 关于百度贴吧的引流方式有很多,像常见的关键词排名引流,比如,百度贴吧引流效果好不好 ...
- NiosII软处理器快速入门- 10分钟学会NiosII(1)
http://hi.baidu.com/hieda/blog/item/7f69080e9efb80ce7bcbe13d.html Nios简单介绍: Nios II是一个用户可配置的通用RISC嵌入 ...
- 手机版python3h如何自制游戏_Python 飞机大战|10 分钟学会用 python 写游戏
Python 飞机大战|10 分钟学会用 python 写游戏 2018 年 python 语言大火, 这把火看趋势已然延续到了 2019 年! 除了在科学计算领域 python 有用武之地之外, 在 ...
- #今日论文推荐#1小时学会走路,10分钟学会翻身,世界模型让新生机器狗掌握多项技能
#今日论文推荐#1小时学会走路,10分钟学会翻身,世界模型让新生机器狗掌握多项技能 人类宝宝在出生后的第1年里,就会逐渐掌握协调能力,学习坐.立.翻滚和爬行. 那么机器人呢? 机器人能完成多复杂的任务 ...
- 惠普服务器win10安装系统教程,惠普笔记本U盘装Win10系统图文教程 10分钟学会重装系统...
U盘装系统,是电脑爱好者"老生常谈"的一个话题,在"电脑百事网"能找到许多类似的教程文章,不过今天的教程与往期有些不一样,首先是制作启动U盘,选用了一些更安全的 ...
最新文章
- java实现简单的约瑟夫环问题(二)
- 酒桌游戏c语言,最受欢迎的12种酒桌游戏
- easyui相关解释
- linux 的ip 设置lo_linux网络虚拟化: network namespace 简介及实验
- jquery html data属性,jQuery Mobile Data 属性
- Webpack使用教程五(Babel)
- vsftpd之启用OpenSSL认证
- UCI机器学习数据库
- windows xp 美化大师
- QQ连连看外挂源代码
- 业务流程优化与信息化到底有多远?
- 面试了一个37 岁的程序员 有一些感悟
- SpringBoot集成Redis代码详解,收藏起来
- PHP开发API接口代码展示
- 电源设计中最常见的四种滤波电路原理及特点解析
- Nvidia Tensor Core-MMA PTX编程入门
- wampserver 安装完后一直橙色的处理
- linux CR2 to JPG
- Android Audio FastMixer 实例
- 一个面试回来的程序员的感想
热门文章
- FoveaBox:目标检测新纪元,无Anchor时代来临 | 技术头条
- 用Python解锁“吃鸡”正确姿势
- 如何一夜暴富?这里有一份比特币价格预测指南
- 警告!别再使用 TIMESTAMP 作为日期字段~
- 代码神器:拒绝重复编码,这款IDEA插件了解一下.....
- 一次SQL查询优化原理分析(900W+数据,从17s到300ms)
- CopyOnWriteArrayList实现原理及源码分析
- 使用YOLOv5模型进行目标检测!
- 关于大数据的完整讲解
- kaggle、TDS、arXiv等,我最喜欢的数据科学资源