0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何10分钟学会使用YOLO及Opencv实现目标检测?

新机器视觉 来源:snnu驿站 作者:snnu驿站 2020-11-19 14:26 次阅读

计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别、行人检测等,国内的旷视科技、商汤科技等公司在该领域占据行业领先地位。相对于图像分类任务而言,目标检测会更加复杂一些,不仅需要知道这是哪一类图像,而且要知道图像中所包含的内容有什么及其在图像中的位置,因此,其工业应用比较广泛。那么,今天将向读者介绍该领域中表现优异的一种算算法——“你只需要看一次”(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数据集上训练的内容的完整列表。

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 ,第一个脚本用于图像处理,第二个脚本用于视频处理。下面进入实战内容,你准备好了吗?

2

将YOLO应用于图像对象检测

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

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

假设存在至少一个检测结果,就循环用非最大值抑制确定idx 。然后,我们使用随机类颜色在图像上绘制边界框和文本。最后,显示结果图像,直到用户按下键盘上的任意键。
下面进入测试环节,打开一个终端并执行以下命令:

$python yolo.py --imageimages/baggage_claim.jpg --yolo yolo-coco

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

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算法;

原文标题:10分钟学会使用YOLO及Opencv实现目标检测

文章出处:【微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器视觉
    +关注

    关注

    162

    文章

    4388

    浏览量

    120434
  • 人脸识别
    +关注

    关注

    76

    文章

    4012

    浏览量

    82011

原文标题:10分钟学会使用YOLO及Opencv实现目标检测

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    助力AIoT应用:在米尔FPGA开发板上实现Tiny YOLO V4

    Only Look Once)是一种实时物体检测模型,它通过一次性扫描整个图像,实现高效的对象识别。而其简化版 Tiny YOLO V4 更适合嵌入式设备,具有较少的层数和参数。其轻量化特性更适合在资源
    发表于 12-06 17:18

    YOLOv10自定义目标检测之理论+实践

    保持先进性能的同时,降低了计算需求。大量实验表明,YOLOv10 在各种模型规模上提供了更优的准确率-延迟权衡。 正如读过我之前文章的朋友所知道的,我分享了使用 YOLO 模型的各种项目,因为在预训练模型中,YOLO 模型在性能
    的头像 发表于 11-16 10:23 549次阅读
    YOLOv<b class='flag-5'>10</b>自定义<b class='flag-5'>目标</b><b class='flag-5'>检测</b>之理论+实践

    如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板

    : breakvideo.release()cv2.destroyAllWindows() 保存后执行”python3 opencv_test.py OpenCV装好后,可以为后面的人脸检测提供可行性。 要
    发表于 11-15 17:58

    《DNK210使用指南 -CanMV版 V1.0》第四十一章 YOLO2物体检测实验

    第四十一章 YOLO2物体检测实验 在上一章节中,介绍了利用maix.KPU模块实现YOLO2的人手检测,本章将继续介绍利用maix.KPU
    发表于 11-14 09:22

    《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验

    第四十章 YOLO2人手检测实验 在上一章节中,介绍了利用maix.KPU模块实现YOLO2的人脸检测,本章将继续介绍利用maix.KPU模
    发表于 11-14 09:20

    《DNK210使用指南 -CanMV版 V1.0》第三十九章 YOLO2人脸检测实验

    第三十九章 YOLO2人脸检测实验 从本章开始,将通过几个实例介绍Kendryte K210上的KPU,以及CanMV下KPU的使用方法,本章将先介绍YOLO2网络的人脸检测应用在Ca
    发表于 11-13 09:37

    使用OpenVINO C# API部署YOLO-World实现实时开放词汇对象检测

    YOLO-World是一个融合了实时目标检测与增强现实(AR)技术的创新平台,旨在将现实世界与数字世界无缝对接。该平台以YOLO(You Only Look Once)算法为核心,
    的头像 发表于 08-30 16:27 715次阅读
    使用OpenVINO C# API部署<b class='flag-5'>YOLO</b>-World<b class='flag-5'>实现</b>实时开放词汇对象<b class='flag-5'>检测</b>

    慧视小目标识别算法 解决目标检测中的老大难问题

    随着深度学习和人工智能技术的兴起与技术成熟,一大批如FasterR-CNN、RetinaNet、YOLO等可以在工业界使用的目标检测算法已逐步成熟并进入实际应用,大多数场景下的目标
    的头像 发表于 07-17 08:29 522次阅读
    慧视小<b class='flag-5'>目标</b>识别算法   解决<b class='flag-5'>目标</b><b class='flag-5'>检测</b>中的老大难问题

    opencv的主要功能有哪些

    OpenCV提供了丰富的图像处理功能,包括图像的读取、显示、保存、转换等。此外,OpenCV还支持图像的滤波、边缘检测、形态学操作、图像金字塔等高级图像处理技术。 特征检测与描述:
    的头像 发表于 07-16 10:35 1604次阅读

    用OpenVINO C# API在intel平台部署YOLOv10目标检测模型

    的模型设计策略,从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,增强了性能。在本文中,我们将结合OpenVINO C# API使用最新发布的OpenVINO 2024.1部署YOLOv10目标检测
    的头像 发表于 06-21 09:23 1059次阅读
    用OpenVINO C# API在intel平台部署YOLOv<b class='flag-5'>10</b><b class='flag-5'>目标</b><b class='flag-5'>检测</b>模型

    岚图发布“琥珀电池”,续航达900km,10分钟充电即可满足450km续航 

    琥珀电池基于800V平台研发,具备5C超快速充电性能,能实现10分钟内为车辆补充450公里续航里程。此外,该电池在-10℃至40℃的宽泛温度范围内均能正常工作。
    的头像 发表于 04-24 17:38 1395次阅读

    OpenVINO™ C# API部署YOLOv9目标检测和实例分割模型

    YOLOv9模型是YOLO系列实时目标检测算法中的最新版本,代表着该系列在准确性、速度和效率方面的又一次重大飞跃。
    的头像 发表于 04-03 17:35 906次阅读
    OpenVINO™ C# API部署YOLOv9<b class='flag-5'>目标</b><b class='flag-5'>检测</b>和实例分割模型

    纵观全局:YOLO助力实时物体检测原理及代码

    YOLO 流程的最后一步是将边界框预测与类别概率相结合,以提供完整的检测输出。每个边界框的置信度分数由类别概率调整,确保检测既反映边界框的准确性,又反映模型对对象类别的置信度。
    的头像 发表于 03-30 14:43 2502次阅读

    基于OpenCV DNN实现YOLOv8的模型部署与推理演示

    基于OpenCV DNN实现YOLOv8推理的好处就是一套代码就可以部署在Windows10系统、乌班图系统、Jetson的Jetpack系统
    的头像 发表于 03-01 15:52 1717次阅读
    基于<b class='flag-5'>OpenCV</b> DNN<b class='flag-5'>实现</b>YOLOv8的模型部署与推理演示

    【EASY EAI Nano】RV1126实时读取摄像头并进行yolo检测显示

    实现了三个并行模块,分别是 摄像头读取,使用opencv转换到适合大小 yolo检测 托管到Qt进行现实 检测的DEMO从每帧
    发表于 01-14 18:53