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的部署还有问题尚未解决,在模型训练上更是心有余而力不足。本文所记,大多来自参考链接中的他人博客,附上个人浅薄理解,希望以此为契机,初窥深度学习之门径。

你可能感兴趣的:(CNN模型介绍,自动驾驶,深度学习,神经网络)