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

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

3天内不再提示

基于深度学习YOLO系列算法的图像检测

新机器视觉 来源:新机器视觉 作者:XPIG 2020-11-27 10:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目前,基于深度学习算法的一系列目标检测算法大致可以分为两大流派:

两步走(two-stage)算法:先产生候选区域然后再进行CNN分类(RCNN系列)

一步走(one-stage)算法:直接对输入图像应用算法并输出类别和相应的定位(YOLO系列)

1YOLO算法的提出

在图像的识别与定位中,输入一张图片,要求输出其中所包含的对象,以及每个对象的位置(包含该对象的矩形框)。

对象的识别和定位,可以看成两个任务:找到图片中某个存在对象的区域,然后识别出该区域中具体是哪个对象。对象识别这件事(一张图片仅包含一个对象,且基本占据图片的整个范围),最近几年基于CNN卷积神经网络的各种方法已经能达到不错的效果了。所以主要需要解决的问题是,对象在哪里。最简单的想法,就是遍历图片中所有可能的位置,地毯式搜索不同大小,不同宽高比,不同位置的每个区域,逐一检测其中是否存在某个对象,挑选其中概率最大的结果作为输出。

显然这种方法效率太低。RCNN开创性的提出了候选区(Region Proposals)的方法,先从图片中搜索出一些可能存在对象的候选区(Selective Search),大概2000个左右,然后对每个候选区进行对象识别,总体来说,RCNN系列依然是两阶段处理模式:先提出候选区,再识别候选区中的对象,大幅提升了对象识别和定位的效率。不过RCNN的速度依然很慢,其处理一张图片大概需要49秒。因此又有了后续的Fast RCNN 和 Faster RCNN,针对 RCNN的神经网络结构和候选区的算法不断改进,Faster RCNN已经可以达到一张图片约0.2秒的处理速度。

R-CNN系列虽然准确率比较高,但是即使是发展到Faster R-CNN,检测一张图片如下图所示也要7fps(原文为5fps),为了使得检测的工作能够用到实时的场景中,提出了YOLO。

2 算法的简介

YOLO意思是You Only Look Once,创造性的将候选区和对象识别这两个阶段合二为一,看一眼图片(不用看两眼哦)就能知道有哪些对象以及它们的位置。

实际上,YOLO并没有真正去掉候选区,而是采用了预定义的候选区(准确点说应该是预测区,因为并不是Faster RCNN所采用的Anchor)。也就是将图片划分为 7*7=49 个网格(grid),每个网格允许预测出2个边框(bounding box,包含某个对象的矩形框),总共 49*2=98 个bounding box。可以理解为98个候选区,它们很粗略的覆盖了图片的整个区域。

RCNN虽然会找到一些候选区,但毕竟只是候选,等真正识别出其中的对象以后,还要对候选区进行微调,使之更接近真实的bounding box。这个过程就是边框回归:将候选区bounding box调整到更接近真实的bounding box。既然反正最后都是要调整的,干嘛还要先费劲去寻找候选区呢,大致有个区域范围就行了,所以YOLO就这么干了。

边框回归为什么能起作用,本质上是因为分类信息中已经包含了位置信息。就像你看到一只猫的脸和身体,就能推测出耳朵和屁股的位置。

3 算法的结构

去掉候选区这个步骤以后,YOLO的结构非常简单,就是单纯的卷积、池化最后加了两层全连接。单看网络结构的话,和普通的CNN对象分类网络几乎没有本质的区别,最大的差异是最后输出层用线性函数做激活函数,因为需要预测bounding box的位置(数值型),而不仅仅是对象的概率。所以粗略来说,YOLO的整个结构就是输入图片经过神经网络的变换得到一个输出的张量,如下图所示。

4 输入输出映射关系

因为只是一些常规的神经网络结构,所以,理解YOLO的设计的时候,重要的是理解输入和输出的映射关系。

参考图5,输入就是原始图像,唯一的要求是缩放到448*448的大小。主要是因为YOLO的网络中,卷积层最后接了两个全连接层,全连接层是要求固定大小的向量作为输入,所以倒推回去也就要求原始图像有固定的尺寸。那么YOLO设计的尺寸就是448*448。输出是一个 7*7*30 的张量(tensor)。根据YOLO的设计,输入图像被划分为 7*7 的网格(grid),输出张量中的 7*7 就对应着输入图像的 7*7 网格。或者我们把 7*7*30 的张量看作 7*7=49个30维的向量,也就是输入图像中的每个网格对应输出一个30维的向量。参考上面图5,比如输入图像左上角的网格对应到输出张量中左上角的向量。

要注意的是,并不是说仅仅网格内的信息被映射到一个30维向量。经过神经网络对输入图像信息的提取和变换,网格周边的信息也会被识别和整理,最后编码到那个30维向量中。

具体来看每个网格对应的30维向量中包含了哪些信息。

① 20个对象分类的概率

因为YOLO支持识别20种不同的对象(人、鸟、猫、汽车、椅子等),所以这里有20个值表示该网格位置存在任一种对象的概率。也对应为20个object条件概率。

② 2个bounding box的位置

每个bounding box需要4个数值来表示其位置,(Center_x,Center_y,width,height),即(bounding box的中心点的x坐标,y坐标,bounding box的宽度,高度),2个bounding box共需要8个数值来表示其位置。

③ 2个bounding box的置信度

bounding box的置信度 = 该bounding box内存在对象的概率 * 该bounding box与该对象实际bounding box的IOU, IOU=交集部分面积/并集部分面积,2个box完全重合时IOU=1,不相交时IOU=0。

综合来说,一个bounding box的置信度Confidence意味着它 是否包含对象且位置准确的程度。置信度高表示这里存在一个对象且位置比较准确,置信度低表示可能没有对象 或者 即便有对象也存在较大的位置偏差。作为监督学习,我们需要先构造好训练样本,才能让模型从中学习。对于一张输入图片,其对应输出的7*7*30张量(也就是通常监督学习所说的标签y或者label)应该填写什么数据呢。

首先,输出的 7*7维度 对应于输入的 7*7 网格。

① 20个对象分类的概率

② 2个bounding box的位置

③ 2个bounding box的置信度

(请对照上面图6)

5 损失函数

损失就是网络实际输出值与样本标签值之间的偏差。

YOLO给出的损失函数如下。

6 预测

训练好的YOLO网络,输入一张图片,将输出一个 7*7*30 的张量(tensor)来表示图片中所有网格包含的对象(概率)以及该对象可能的2个位置(bounding box)和可信程度(置信度)。为了从中提取出最有可能的那些对象和位置,YOLO采用NMS(Non-maximal suppression,非极大值抑制)算法。

7 总结

YOLO以速度见长,处理速度可以达到45fps,其YoloV4版本(网络较小)甚至可以达到155fps。这得益于其识别和定位合二为一的网络设计,而且这种统一的设计也使得训练和预测可以端到端的进行,非常简便。不足之处是小对象检测效果不太好(尤其是一些聚集在一起的小对象),对边框的预测准确度不是很高,总体预测精度略低于Fast RCNN。主要是因为网格设置比较稀疏,而且每个网格只预测两个边框,另外Pooling层会丢失一些细节信息,对定位存在影响。

责任编辑:xj

原文标题:基于YOLO系列算法的图像检测

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

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

    关注

    23

    文章

    4800

    浏览量

    98507
  • 图像检测
    +关注

    关注

    0

    文章

    36

    浏览量

    12200
  • 深度学习
    +关注

    关注

    73

    文章

    5603

    浏览量

    124609

原文标题:基于YOLO系列算法的图像检测

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【幸狐Omni3576边缘计算套件试用体验】YOLO26 板端部署

    识别、姿态估计、图像分割、图像分类、旋转框检测的项目设计,包括环境部署、模型获取、关键代码、效果演示等。 项目介绍 准备工作:OpenCV 安装、Ultralytics 软件包安装、YOLO
    发表于 04-19 22:02

    【智能检测】基于AI深度学习与飞拍技术的影像测量系统:实现高效精准的全自动光学检测与智能制造数据闭环

    内容概要:文档内容介绍了中图仪器(Chotest)影像测量仪融合人工智能深度学习与飞拍技术的自动化检测解决方案。系统通过AI深度学习实现
    发表于 03-31 17:11

    穿孔机顶头检测仪 机器视觉深度学习

    顶头状态。 检测顶头算法 引入人工智深度学习技术,通过Keras实现卷积神经网络(CNN),用Numpy实现采集数据的训练,得到符合现场需求的模型,进一步提升
    发表于 12-22 14:33

    Termux手机摄像头采集图像/视频流 部署 YOLO 模型推理

    Termux手机摄像头采集图像/视频流 部署 YOLO 模型推理
    的头像 发表于 12-14 07:26 3271次阅读

    【团购】独家全套珍藏!龙哥LabVIEW视觉深度学习实战课(11大系列课程,共5000+分钟)

    行业市场具备深度学习能力的视觉系统占比已突破40%,催生大量复合型技术岗位需求: • 岗位缺口:视觉算法工程师全国缺口15万+,缺陷检测专项人才招聘响应率仅32% • 薪资水平:掌握L
    发表于 12-04 09:28

    【团购】独家全套珍藏!龙哥LabVIEW视觉深度学习实战课程(11大系列课程,共5000+分钟)

    行业市场具备深度学习能力的视觉系统占比已突破40%,催生大量复合型技术岗位需求: • 岗位缺口:视觉算法工程师全国缺口15万+,缺陷检测专项人才招聘响应率仅32% • 薪资水平:掌握L
    发表于 12-03 13:50

    如何深度学习机器视觉的应用场景

    深度学习视觉应用场景大全 工业制造领域 复杂缺陷检测:处理传统算法难以描述的非标准化缺陷模式 非标产品分类:对形状、颜色、纹理多变的产品进行智能分类 外观质量评估:基于
    的头像 发表于 11-27 10:19 317次阅读

    在k230上使用yolov5检测图像卡死,怎么解决?

    在Ubuntu上将onnx转换kmodel后,使用示例仓库中的test_det_kmodel.py检测图像没问题 打印位置: 模型转换过程中也没有报错,onnx与kmodel对比结果也在
    发表于 08-11 07:41

    RK3576 yolo11-seg训练部署教程

    1.yolov11-seg简介yolov11-seg是YOLO(YouOnlyLookOnce)系列的最新成员,专为实时实例分割任务设计。它在保持YOLO家族高效推理速度的同时,通过创新的网络结构
    的头像 发表于 07-25 15:21 2038次阅读
    RK3576 <b class='flag-5'>yolo</b>11-seg训练部署教程

    如何在树莓派 AI HAT+上进行YOLO目标检测

    YOLO目标检测?如何在树莓派AIHAT+上进行YOLO姿态估计?今天是第三部分:如何在树莓派AIHAT+上进行YOLO目标检测?如果大家
    的头像 发表于 07-19 08:34 1944次阅读
    如何在树莓派 AI HAT+上进行<b class='flag-5'>YOLO</b>目标<b class='flag-5'>检测</b>?

    K230在同时使用H265编码与yolo进行检测时出现错误怎么解决?

    1、单独使用H265编码时或者yolo检测没有问题 2.一旦将二者结合,因为H265编码时YUV格式,所以我另外开了一个RGB平面格式来运行yolo推理 3.报错信息显示:两者的空间会冲突然后导致
    发表于 07-11 08:15

    k210在线训练的算法yolo5吗?

    k210在线训练的算法yolo5吗
    发表于 06-16 08:25

    usb摄像头输入的图像,哪种格式才能让yolo正常检测

    问题1. usb摄像头捕获的图片,通过硬件解码后,送入yolo,系统卡死。 经过验证,就是 img = UVC.snapshot() img = csc.convert(img) res
    发表于 06-13 07:55

    基于RK3576开发板的车辆检测算法

    车辆检测是一种基于深度学习的对人进行检测定位的目标检测,能广泛的用于园区管理、交通分析等多种场景,是违停识别、堵车识别、车流统计等多种
    的头像 发表于 05-08 17:34 1620次阅读
    基于RK3576开发板的车辆<b class='flag-5'>检测算法</b>

    基于RV1126开发板实现自学习图像分类方案

    在RV1126开发板上实现自学习:在识别前对物体图片进行模型学习,训练完成后通过算法分类得出图像的模型ID。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负
    的头像 发表于 04-21 13:37 11次阅读
    基于RV1126开发板实现自<b class='flag-5'>学习</b><b class='flag-5'>图像</b>分类方案