文章目录

  • 一、目标检测简介
  • 二、Yolov3-tiny
    • 2.1 anchor box
    • 2.2 NMS算法
  • 三、后记

一、目标检测简介

针对一张图片,根据后续任务的需要,有三个主要层次。

一是分类(Classification),即是将图像结构化为某一类别的信息,用事先确定好的类别或实例ID来描述图片,这一任务是最简单、最基础的图像理解任务,也是深度学习模型最先取得突破和实现大规模应用的任务。其中ImageNet是最权威的评测集,每年的ILSVRC催生了大量的优秀深度网络结构,为其他任务提供了基础。在应用领域,人脸、场景的识别等,都可以归为分类任务。
二是检测(Detection),分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因而,检测模型的输出是一个列表,列表的每一项使用一个数据组给出检测目标的类别和位置(常用矩形检测框的坐标表示)。
三是分割(segmentation),分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者是对前背景分离的拓展,要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测更为精细)。分割是对图像的像素级描述,它赋予每个像素类别意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。

常见的深度学习目标检测算法分为两类:以yolo系列网络为代表的One-stage网络和以Faster RCNN为代表的Two-stage网络。对于上述网络的常见理解是,one-stage网络速度要快很多,但是准确性低于two-stage。

Two-stage检测分两个阶段进行:(1)首先,模型通过选择搜索或区域提议网络生成一组候选区域。由于潜在的边界框候选可以是无限的,因此所提出的区域是稀疏的。(2)然后分类器仅处理候选区域。

One-stage会跳过区域提议阶段,并直接在可能位置的密集采样上运行检测。这样更快更简单,但可能会降低性能。

二、Yolov3-tiny

有关yolov1-yolov4的其他详细内容,参考大佬博客:https://blog.csdn.net/wjinjie/article/details/107509243

yolov3-tiny以416x416x3的图片作为输入,两个尺度的输出分支大小分别为13x13x255, 26x26x255用来进行多尺度预测。以13x13x255的分支为例,解释各个参数的含义。

首先,yolov3-tiny将图片分成13x13个网格(grid cell),每个网格产生3个anchor box的位置坐标(x, y, w, h)和1个confidence(置信度),此外还有,80个类别的预测值。因此最后的输出为13x13x3x(5+80)。之后对输出的13x13x3个box,使用nms算法进行过滤

2.1 anchor box

anchor box就是从训练集中真实框(ground truth)中统计或聚类得到的几个不同尺寸的框。避免模型在训练的时候盲目的找,有助于模型快速收敛。假设每个网格对应k个anchor,也就是模型在训练的时候,只会在每一个网格附近找出k种形状。anchor其实就是对预测的对象范围进行约束,并加入了尺寸先验经验,从而实现多尺度学习的目的。

yolo从v2引入anchor机制,yolov3使用k-mean算法在训练集中所有样本的真实框中聚类,得到具有代表性质的宽高。但是具体几个anchor才是最合适的,作者采用实验的方式,分别用不同数量的anchor应用到模型,然后在模型的复杂度和高召回率之间找到最优的那组anchor box,最终得出9个anchor box最佳。yolov3存在三种尺度的输出,在yolov3-tiny上,两种尺度anchor box的个数为6个,即每个网格有3个anchor,anchor box的信息可以在cfg文件中看到。

  • mask = 3, 4, 5

  • anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319

表示从anchor列表中选取index为3,4,5 的anchor,选取的anchor尺寸分别为[81,82],[135,169],[344,319]。

关于anchor box的更多内容,参考:https://blog.csdn.net/csdnwei/article/details/108388151

2.2 NMS算法

首先,来介绍一下什么是NMS(Non-Maximum Suppression)算法。目标检测在使用了基于深度学习的端到端模型后效果斐然。目前,常用的目标检测算法,无论是One-stage的SSD系列算法,YOLO系列算法还是Two-stage的基于R-CNN系列的算法,NMS都是其中必不可少的一个组件。在现有的基于anchor的目标检测算法中,都会产生数量巨大的候选矩形框,这些矩形框有很多是指向同一目标,因此就存在大量冗余的候选矩形框。NMS的算法目的正在于此,它可以消除多余的框,找到最佳的物体检测位置。

非极大值抑制(Non-Maximum Suppression,以下简称NMS算法)的思想是搜索局部极大值,抑制非极大值元素。针对不同的应用场景和检测算法,由于矩形框的表征方式不同,NMS算法具有各种变体,如:soft-NMS、Locality-Aware NMS等,本文仅对NMS算法进行简单介绍。

在实际的应用中,针对yolov3-tiny产生的13x13x3的预选框中包含的信息,首先对confidence做sigmoid,然后对box包含的80个分类概率做softmax,取其中最大的值,(该值的索引为分类的结果),将二者相乘的结果更新为新的confidence。然后使用NMS算法对候选框进行筛选:

  • 首先设置两个阈值,一个用于筛选置信度较低的框,一个用于筛选iou(交并比)较高的框,一般设置为0.5
  • 根据置信度降序排列候选框列表
  • 选取置信度最高的框A添加到输出列表,并将其从候选框列表中删除
  • 计算A与候选框列表中同一类别所有框的IOU值,删除大于IOU阈值的候选框
  • 重复上述过程,直到候选框列表为空,返回输出列表

NMS算法的核心在于交并比的计算,计算方式为两个框选区域的交集除以两个框选区域的并集。其中需要注意的是,IOU的计算必须在两个框的分类信息一致时才有意义。NMS算法筛选的是分类结果为同一个目标的多个框,当两个框的IOU结果较大时,证明两个框框选了同一个目标,过滤掉置信度较低的那个即可。

关于NMS算法的更多内容,参考:https://blog.csdn.net/lz867422770/article/details/100019587

关于cfg文件的说明,参考:
https://blog.csdn.net/qq_30011277/article/details/109575773

三、后记

目前产品上已经部署了yolo-fastest和yolov3-tiny等轻量级目标检测模型,yolov3-tiny的部署还有问题尚未解决,在模型训练上更是心有余而力不足。本文所记,大多来自参考链接中的他人博客,附上个人浅薄理解,希望以此为契机,初窥深度学习之门径。

yolov3-tiny相关推荐

  1. yolov3 tiny训练自己的数据集进行物体检测 (只检测行人)

    说明:我的电脑是个16年3500元买的笔记本(勇气可嘉:) 环境:额外的包之类的,我用的anaconda,可以非常容易安装各类包,如果运行显示缺包,那就去environment去安装对应的包. 我的版 ...

  2. AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(二) 版本3有什么新功能? YOLOv3使用了一些技巧来改进训练和提高性能,包括:多尺度预测.更好的主干分类器等等.全部细节都在我们的 ...

  3. Yolo:实时目标检测实战(上)

    Yolo:实时目标检测实战(上) YOLO:Real-Time Object Detection 你只看一次(YOLO)是一个最先进的实时物体检测系统.在帕斯卡泰坦X上,它以每秒30帧的速度处理图像, ...

  4. YOLOv4官方改进版来了!指标炸裂55.8% AP!Scaled-YOLOv4:扩展跨阶段局部网络

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 YOLOv4-large在COCO上最高可达55.8 AP!速度也高达15 FPS!YOLOv4-ti ...

  5. python条码识别

    Yolov3 tiny,可以用来标注,有预训练 https://github.com/dchakour/Barcode-detection dbnet:有onnx模型,48m https://gith ...

  6. mavros 基于体轴坐标系下的无人机行人跟踪

    该任务是为了实现无人机对于行人的跟踪,飞控采用的是px4,机载的板子是使用jetson nano.利用darknet_ros和自己训练的行人检测的yolov3 tiny模型,在jetson nano板 ...

  7. 君正Magik算法平台介绍

    ------------摘自君正官方<magik_introduce> 00 引言 君正简介,芯片 + AI 算力 + AI 开发平台」方案落地,公布全栈式低功耗 AI 技术 01 Mag ...

  8. Scaled-YOLOv4: Scaling Cross Stage Partial Network

    链接:https://arxiv.org/abs/2011.08036 代码: https://github.com/WongKinYiu/ScaledYOLOv4 本文的贡献: (1)针对小模型设计 ...

  9. 与其道听途说,不如少走点弯路,轻松跟我来全面剖析 darknet 官网!

    仔细研读官网,你绝对不会失望!很多人以为 darknet 就是一个实现 yolo 算法的私人代码.事实上, darknet 官网全面介绍了darknet 在更多领域的优秀表现,包括图像检测.图像分类. ...

  10. 综述:目标检测2001-2021

    目标检测综述 转自:https://zhuanlan.zhihu.com/p/383616728 论文参考:[Object Detection in 20 Years: A Survey][https ...

最新文章

  1. 航空频率表 2020_航空波段+调频、中波、短波,这个美国TR608收音机值40美元吗?...
  2. Redis 集群介绍
  3. iOS键盘弹出通知后加入动画
  4. Linux内存压力,linux下的CPU、内存、IO、网络的压力测试
  5. .NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)--学习笔记(上)...
  6. 无为职业学校计算机班,致盐亭职中2000级计算机三班全体同学的一封信
  7. Unity手机摇一摇
  8. Linux(ARM glibc)使用libhybris调用Android(ARM bionic)
  9. 蓝桥杯2016年第七届JavaC组国赛第一题-平方末尾
  10. 继承与data member之多重继承
  11. matlab:Matlab基础教程 第三章 数组和向量
  12. 如何制作移动端静态网页
  13. RouterOS的DNS设置说明
  14. Dialog常用写法
  15. python基_python之地基(一)
  16. 插画版Kubernetes指南(小孩子也能看懂的kubernetes教程)
  17. 如何修改PDF,怎么把一个PDF拆分成多个
  18. 计算机预测自己未来的相貌,AI算法预测未来相貌,准确率高达90%以上
  19. 机械硬盘哪个好?买1T好还是2T好?注意别买到叠瓦盘
  20. 程序员职场起点6要素 前辈们那些经历告诉你

热门文章

  1. 【Linux环境下C语言编程】
  2. 推荐一本 python自动化框架pytest -上海悠悠
  3. html分辨手机电脑,html自动识别手机或者pc端
  4. python身份证号码共18位_涨姿势:用Python完成15位18位身份证的互转
  5. 神奇的 Magisk
  6. 浏览器密码查看工具-WebBrowserPassView使用实验 ——合天网安实验室学习笔记
  7. 开关电源损耗分析 以Buck为例
  8. 大数据处理的基本流程
  9. 设计师提高效率必备的10大在线工具
  10. osgearth 利用经纬度得到高程