继续创作,加快成长!这是我参加「日新计划 10 月更文应战」的第23天,点击查看活动详情
导读
以监控摄像头数据集的人体检测模型为例,说明了怎么通过对数据的理解来逐步进步模型的效果,不对模型做任何改动,将mAP从0.46进步到了0.79。
介绍
方针检测能够完结许多视觉使命,如实例分割、姿势估计、盯梢和动作辨认。这些核算机视觉使命在监控、自动驾驶和视觉问答等范畴都有广泛的运用。跟着这种广泛的实际运用,方针检测天然成为一个活跃的研讨范畴。
咱们在Fynd的研讨团队正在练习一个行人检测模型来进步咱们的方针盯梢模型。在本文中,咱们将解释咱们怎么挑选一个模型架构,创立一个数据集,并为咱们的特定的用例来练习它。
什么是物体检测?
方针检测是一种核算机视觉技术,它答应咱们辨认和定位图画或视频中的方针。方针检测能够分为两部分:方针定位和方针分类。定位能够理解为猜测图画中物体的准确位置(鸿沟框),分类是界说它归于哪个类(人/车/狗等)。
物体检测的办法
有各式各样的办法来处理方针检测使命。咱们能够将模型分为三类。
- 两阶段检测器:模型有两种网络,一个是做区域主张,一个做检测。一些典型的比如是RCNN family。
- 带anchor的一阶段探测器:这类架构没有独自的区域主张网络,但依赖于预界说的anchor框。咱们能够通过YOLO宗族来了解这些网络。
- 单阶段无anchor检测器:这是一个适当新的物体检测办法,这样的网络是端到端可微分的,不依赖于感兴趣的区域(ROI)。并且一次性来猜测物体。这是一个十分有趣的办法,它塑造了的新研讨的思路。要了解更多能够看看CornerNet或CenterNet。
什么是COCO数据集?
为了比较模型,业界广泛运用了一个称为COCO的公共数据集(Common Objects in Context)。这是一个具有应战性的数据集,有80个类和超过150万个物体实例,因此这个数据集是初始模型挑选的一个十分好的基准。每年都有各种新的和立异的办法呈现,并在该使命上竞进步功能。
怎么查看功能?
业内提出了点评方针检测的各种指标。其间一些应战包括:
- The PASCAL VOC Challenge(Everingham et al. 2010)
- The COCO Object Detection Challenge(Lin et al. 2014)
- The Open Images Challenge(Kuznetsova 2018).
要理解这些度量规范,你需求很好地理解一些基本概念,如精度、召回率和IOU。下面是这个公式的一个简短界说。
Average Precision
AP能够界说为插值后的precision-recall曲线下的面积,核算公式如下:
Mean average precision
AP的核算只触及一个类。然而,在方针检测中,通常有K>1个类。mAP界说为AP在一切K类上的平均值:
实际问题描述
咱们的使命是在零售商铺的闭路电视视频中检测人的鸿沟框。该模型十分关键,由于盯梢模型依赖于它,检测产生的一切误差都会传播到盯梢模型中。以下是在此类视频中检测的一些主要应战。
应战
- 视角: 闭路电视是顶部装置的,和正常照片的视角不一样。
- 拥堵: 商铺有时会有十分拥堵的场景。
- 布景很乱: 零售商铺有很多的搅扰或杂物(对咱们的模型来说),比如衣服、货架、人体模型等,这或许会导致误报。
- 灯火条件:店内的灯火条件与户外拍摄不同。
- 图画质量:来自闭路电视的视频帧有时会很差,还或许包括运动模糊。
构建测验集
咱们创立了一个验证集,其间包括来自零售店CCTV视频的视频帧。咱们运用person鸿沟框对每帧进行标示,并运用mAP@ 0.50 IOU阈值在整个练习迭代过程中测验模型。
第1个人体检测模型
咱们的第一个模型是COCO的预练习的模型,其间“person”是其间一个类。咱们在每种办法中筛选出了2个模型,并依据COCO mAP val和推理时刻对其进行了评估。
YOLOv5的单阶段特性(快速推理)和在COCO mAP val上的杰出功能被咱们列入了候选名单。它也有更快的版本,如YOLOv5m和YOLOv5s。
YOLOv5
YOLO宗族归于单阶段物体探测器,不像RCNN宗族,它没有一个独自的区域主张网络(RPN),并依赖于不同标准的anchor。整体结构架构可分为三部分:backbone, neck和head。运用CSP (Cross Stage Partial Networks) 作为backbone从输入图画中提取特征。PANet用作搜集特征金字塔的neck,head是运用特征上的anchor检测物体的终究检测层。
YOLO架构运用的激活功用是谷歌Brains在2017年提出的Hard Swish的变体,它看起来和ReLU十分类似,但不像ReLU,它在x=0附近是平滑的。
损失函数用的是二元穿插熵。
功能
0.48 mAP @ 0.50 IOU (在咱们自己的测验集上)
剖析
这个开箱即用的模型不是很好,由于模型是在包括一些不必要的类的COCO数据集上练习的。包括人的实例的图画数量较少,人群密度也较低。此外,包括人的实例的图画散布与CCTV视频帧中的十分不同。
定论
咱们需求更多的数据来练习模型,使其包括更多拥堵的场景,并使摄像机的视角在45⁰- 60⁰之间(和CCTV类似)。
搜集公共数据
咱们的下一步是搜集包括人鸿沟框的揭露数据集。有大量的人检测的数据集,但咱们需求一些关于数据集的额定信息,如视角,图画质量,人的密度和布景,以捕获数据集散布信息。
咱们能够看到满意咱们切当需求的数据集并不是很多,可是咱们依然能够运用这些数据集,由于具有人的鸿沟框的基本要求已经得到了满意。下载一切数据集后,咱们将其转化为常见的COCO格局用于检测。
第2个人体检测模型
咱们用一切搜集到的公共数据集练习模型。
练习迭代 2:
功能
0.65 mAP @ 0.50 IOU
剖析
跟着数据集的添加,模型功能明显进步。一些数据集有高拥堵的场景,满意咱们的一个要求,和一些包括顶部的相机视角,满意另一个要求。
总结
虽然模型的功能有所进步,但有些数据集是视频序列,并且在某些状况下布景依然是静态的,或许会导致过拟合。很少量的数据会集有十分小的人类,这使得使命很难学习。
清洗数据
下一步是整理数据。咱们从练习和验证会集过滤出造成损失最多的图画,或许咱们能够说是那些mAP十分小的图画。咱们挑选了0.3 mAP阈值并对图画进行可视化。咱们从数据会集过滤了三种类型的用例。
- 标签过错的边框
- 图画包括十分小的边框或太多太拥堵
- 重复的或近似重复的帧
为了去除重复的帧,咱们只从视频序列中挑选稀疏的帧。
第3个人体检测模型
有了整理和整理之后的数据集,咱们就能够开端第三次迭代了
练习迭代 3:
- Backbone: YOLOv5x
- 模型初始化:COCO预练习权重
- Epochs: ~100 epochs
功能
0.69 mAP @ 0.50 IOU
剖析
将未整理的数据从练习和验证会集删除后,模型功能略有改善。
总结
数据集被整理,能够看到功能的改善。咱们能够得出定论,进一步改善数据集能够进步模型功能。为了进步功能,咱们需求保证数据集包括与测验用例类似的图画。咱们处理了人群状况和一些视角状况,但大多数数据都是向前的视角。
数据增强
咱们已经列出了在实际事例中检测时将面对的一些应战,可是搜集的数据集散布不同。因此,咱们运用了一些数据增强技术,使练习散布更挨近出产用例或测验散布。
下面是咱们期望对数据集进行的扩大。
- 视角– 透视改换
- 光照条件– 亮度 – 对比度
- 图画质量– 噪声 – 图画压缩 – 运动模糊
通过将一切这些增强加在一起,咱们能够将公共数据散布转化为更挨近出产散布的数据。咱们能够看到从下面的图画和比较原始和转化后的图画。
一切这些增强都是通过运用“albumentation”来实现的,“albumentation”是一个很容易与PyTorch数据转化集成的python库。它还有一个demo运用,咱们运用该运用为不同的办法设置增强参数。在库中还有许多可用于其他用例的扩展。
第4个人体检测模型
现在有了转化后的数据集,咱们就能够进行第四个迭代了
练习迭代 4:
- Backbone: YOLOv5x
- 模型初始化:来自第3个迭代的模型权重
- Epochs: ~100 epochs
功能
0.77 mAP @ 0.50 IOU
剖析
![](How to boost object detection accuracy by understanding data.assets/1_H3gjYDGFDHq5aEk85dSBUw.png)
YOLO v5x 在自界说的测验集上运用TIDE进行剖析的成果,mAP @0.5: 0.77
功能进步了近8%,该模型能够猜测大多数状况,并在摄像机视角进步行了泛化。由于布景杂波和遮挡的影响,视频序列中依然存在误报和漏报的现象。
定论
咱们尝试搜集数据集并覆盖使命中几乎一切的应战,但仍有一个应战阻碍了咱们的模型功能。咱们需求搜集包括这些用例的数据。
创立自界说的标示
通过数据增强,咱们创立了一些实在的事例,但咱们的数据在图画布景方面依然缺少多样性。对于一个零售商铺来说,框架布景充满了凌乱、人体模型或衣服架子,这会导致误报,大遮挡会导致漏报。为了添加多样性,咱们抛弃了谷歌,咱们从商铺中搜集闭路电视录像,并手工标示图画。首要,咱们将迭代4中的一切图画通过模型进行猜测,并创立自动标签,然后运用开源标示东西CVAT(Computer Vision and annotation tool)进一步的修正标示。
终究的人体检测模型
咱们将自界说的存储图画添加到之前的数据会集,并为最后的迭代练习咱们的模型。咱们终究的数据集散布是这样的。
终究练习集的数据散布
练习迭代 5:
- Backbone: YOLOv5x
- 模型初始化: 从第4个迭代的权重开端
- Epochs: ~100 epochs
功能
0.79 mAP @ 0.50 IOU
剖析
YOLO v5x 在自界说的测验集上运用TIDE进行剖析的成果,mAP @0.5: 0.79
模型的功能显示出~ 0.2%的正增长。从TIDE 剖析中能够看出,假阳性对过错的奉献减小了。
定论
额定的数据有助于使模型对布景搅扰更强健,可是搜集的数据量依然比总体数据集的大小少得多,并且模型依然有一些false negatives。当对随机图画进行测验时,该模型能够很好地泛化。
过程概述
咱们从模型挑选开端,以COCO mAP作为基准,咱们选出了一些模型。此外,咱们考虑了推理时刻和模型架构,并挑选YOLO v5。咱们搜集并整理了各种揭露可用的数据集,并运用各种数据增强技术将其转化为咱们的用例。最后,咱们从头搜集图画,并在手工标示之后将它们添加到数据会集。咱们终究的模型是在这个通过整理的数据集上练习的,能够从0.46 mAP @ IOU0.5改善到0.79 mAP @ IOU 0.5。
总结
通过依据用例对数据集进行处理,咱们将物体检测模型改善了约20%。该模型在mAP和推迟方面仍有改善空间。挑选的超参数是YOLO v5默许给出的,咱们能够运用超参数搜索库,如optuna对它们进行优化。当练习散布和测验散布之间存在差异时,域适应是另一种能够运用的技术。此外,这样的状况或许需求运用额定数据集进行连续的练习循环,以保证模型的继续改善。