yolov3-tiny
文章目录
- 一、目标检测简介
- 二、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相关推荐
- yolov3 tiny训练自己的数据集进行物体检测 (只检测行人)
说明:我的电脑是个16年3500元买的笔记本(勇气可嘉:) 环境:额外的包之类的,我用的anaconda,可以非常容易安装各类包,如果运行显示缺包,那就去environment去安装对应的包. 我的版 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(二) 版本3有什么新功能? YOLOv3使用了一些技巧来改进训练和提高性能,包括:多尺度预测.更好的主干分类器等等.全部细节都在我们的 ...
- Yolo:实时目标检测实战(上)
Yolo:实时目标检测实战(上) YOLO:Real-Time Object Detection 你只看一次(YOLO)是一个最先进的实时物体检测系统.在帕斯卡泰坦X上,它以每秒30帧的速度处理图像, ...
- YOLOv4官方改进版来了!指标炸裂55.8% AP!Scaled-YOLOv4:扩展跨阶段局部网络
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 YOLOv4-large在COCO上最高可达55.8 AP!速度也高达15 FPS!YOLOv4-ti ...
- python条码识别
Yolov3 tiny,可以用来标注,有预训练 https://github.com/dchakour/Barcode-detection dbnet:有onnx模型,48m https://gith ...
- mavros 基于体轴坐标系下的无人机行人跟踪
该任务是为了实现无人机对于行人的跟踪,飞控采用的是px4,机载的板子是使用jetson nano.利用darknet_ros和自己训练的行人检测的yolov3 tiny模型,在jetson nano板 ...
- 君正Magik算法平台介绍
------------摘自君正官方<magik_introduce> 00 引言 君正简介,芯片 + AI 算力 + AI 开发平台」方案落地,公布全栈式低功耗 AI 技术 01 Mag ...
- Scaled-YOLOv4: Scaling Cross Stage Partial Network
链接:https://arxiv.org/abs/2011.08036 代码: https://github.com/WongKinYiu/ScaledYOLOv4 本文的贡献: (1)针对小模型设计 ...
- 与其道听途说,不如少走点弯路,轻松跟我来全面剖析 darknet 官网!
仔细研读官网,你绝对不会失望!很多人以为 darknet 就是一个实现 yolo 算法的私人代码.事实上, darknet 官网全面介绍了darknet 在更多领域的优秀表现,包括图像检测.图像分类. ...
- 综述:目标检测2001-2021
目标检测综述 转自:https://zhuanlan.zhihu.com/p/383616728 论文参考:[Object Detection in 20 Years: A Survey][https ...
最新文章
- 航空频率表 2020_航空波段+调频、中波、短波,这个美国TR608收音机值40美元吗?...
- Redis 集群介绍
- iOS键盘弹出通知后加入动画
- Linux内存压力,linux下的CPU、内存、IO、网络的压力测试
- .NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)--学习笔记(上)...
- 无为职业学校计算机班,致盐亭职中2000级计算机三班全体同学的一封信
- Unity手机摇一摇
- Linux(ARM glibc)使用libhybris调用Android(ARM bionic)
- 蓝桥杯2016年第七届JavaC组国赛第一题-平方末尾
- 继承与data member之多重继承
- matlab:Matlab基础教程 第三章 数组和向量
- 如何制作移动端静态网页
- RouterOS的DNS设置说明
- Dialog常用写法
- python基_python之地基(一)
- 插画版Kubernetes指南(小孩子也能看懂的kubernetes教程)
- 如何修改PDF,怎么把一个PDF拆分成多个
- 计算机预测自己未来的相貌,AI算法预测未来相貌,准确率高达90%以上
- 机械硬盘哪个好?买1T好还是2T好?注意别买到叠瓦盘
- 程序员职场起点6要素 前辈们那些经历告诉你