关于目标检测你必须知道的……
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文转自:人工智能与算法学习
也许你正在学习计算机视觉的路上,并且已经深入研究了图像分类和滑动窗口检测器。
在掌握了这些概念之后,了解最新技术(SOTA)目标检测,往往会变得令人望而生畏和晦涩难懂,尤其是在理解Anchor时。
毋庸讳言,深入大量流行的YOLO、SSD、R-CNN、Fast RCNN、Faster RCNN、Mask RCNN和RetinaNet,了解Anchor是一项艰巨的工作,尤其是在您对实际代码了解有限时。
如果我告诉你,你可以利用今天深入学习目标检测背后的Anchor呢?本文目标是帮助读者梳理Anchor的以下内容:
What:anchor是什么?
Where:如何以及在何处对图像生成anchor以用于目标检测训练?
When:何时可以生成anchor?
Why:为什么要学习偏移而不是实际值?
How:如何在训练过程中修正选定的anchor以实现训练对象检测模型?
1、What:anchor是什么?
anchor是指预定义的框集合,其宽度和高度与数据集中对象的宽度和高度相匹配。预置的anchor包含在数据集中存在的对象大小的组合,这自然包括数据中存在的不同长宽比和比例。通常在图像中的每一个位置预置4-10个anchor。
训练目标检测网络的典型任务包括:生成anchor,搜索潜在anchor,将生成的anchor与可能的ground truth配对,将其余anchor分配给背景类别,然后进行sampling和训练。
而推理过程就是对anchor的分类和回归,score大于阈值的anchor进一步做回归,小于阈值的作为背景舍弃,这样就得到了目标检测的结果。
2、Where:如何以及在何处对图像生成anchor,以用于目标检测训练
本质上,生成anchor是为了确定一组合适的框,这些框可以适合数据中的大多数对象,将假设的、均匀分布的框放置在图像上,并创建一个规则,将卷积特征映射的输出映射到图像中的每个位置。
为了理解锚定框是如何被生成的,假设有一个包含小目标的256px x* 256px图像,其中大多数目标尺度位于40px * 40px或80px * x 40px之间。下面从两个方面考量anchor:
a、aspect ratios(横纵比):因为假设的ground turth宽高比在1:1和2:1之间。因此,应至少考虑两个纵横比(1:1和2:1),用来生成此示例数据集的anchor。这些对象的比例是指对象的长度或宽度占其包含图像的总长度或宽度的比例。例如,假设一个图像的宽度=256px=1个单位,那么一个40px宽的对象占据40px/256px=0.15625个单位的宽度,即这个对象占据整个图像宽度的15.62%。
b、scales (尺度):为了选择一组最能代表数据的尺度,我们可以考虑具有最极端值的对象侧度量,即数据集中所有对象的所有宽度和高度之间的最小值和最大值。如果我们的示例数据集中最大和最小的比例是0.15625和0.3125,并且我们要为锚箱方案选择三个比例,那么三个潜在的比例可能是0.15625、0.3125和0.234375(前面两个尺度的均值)。
如果使用上面提到的两个纵横比(1:1和2:1)和这三个比例(0.15625、0.234375和0.3125)来建议此示例数据集的锚定框,那么我们将总共有六个锚定框来建议输入图像中的任何一个位置。
目标检测器采用这样的规则来生成anchor,假设检测器网络输入的特征图是4-channel 8*8,然后可以在每个单元格中心上生成6个不同aspect ratios和scales的anchor,那么总共384个,这样就尽可能的涵盖所有可能性。
3、When:什么时候在图像上生成anchor?
检测器不预测anchor,而是为每个anchor预测一组值:a、anchor坐标偏移(offset),b、每个类别的置信度得分。
这意味着在每次图像推理过程中都将始终使用相同的anchor,并且将使用网络预测的偏移(offset)来更正该anchor。
知道了这一点,就很容易理解ancor需要初始化,并将此数据结构存储在内存中,以供实际使用时,如:在训练中与ground ruth匹配,在推断时将预测的偏移量应用于anchor。在这些点上,anchor的实际生成其实都已经生成了。
4、Why:为什么要学习偏移而不是实际值?
理论上,如果CNN接收同一类型的物体两次,那么不管CNN在图像中的哪个位置接收到物体,CNN都应该输出大致相同的值两次。
这意味着,如果一幅图像包含两辆车,而输出结果是绝对坐标,那么网络将预测两辆车大致相同的坐标。
而学习anchor偏移,允许这两辆车具有相似偏移输出,但偏移应用于锚定,锚定可映射到输入图像中的不同位置。这是在anchor回归过程中学习锚定盒偏移的主要原因。
5、How:如何在训练过程中修正选定的anchor以实现训练对象检测模型?
(1)回归任务:训练过程中,网络回归任务学习的target并不是feature map上每个位置的所有anchor的offset,而是与ground truth匹配的anchor的实际偏移,背景框的anchor偏移保持为零。
这意味着,一旦anchor内的像素空间被完全视为背景,则anchor不需要调整坐标。换言之,由于分配给背景类别的anchor根本不应该移动或更正,因此没有要预测的偏移量。
(2)分类任务:分类损失通常是使用在总背景框的子集来处理类不平衡。还记得在我们的示例中,每个位置有6个框,总共有384个建议吗?好吧,大多数都是背景框,这就造成了一个严重的阶级不平衡。
解决这类不平衡问题的一个流行的解决方案是所谓的 hard negative mining ——根据预先确定的比率(通常为1:3;foreground:background)选择一些高权重背景框。 在分类损失中处理类不平衡的另一个流行方法是降低易分类实例的权重损失贡献,这就是RetinaNet的focal loss情况。
(3)推理过程:为了获得最终的一组目标检测,网络的预测偏移量被应用到相应的anchor中,可能会有成百上千个候选框,但最终,测器会忽略所有被预测为背景的盒子,保留通过某些标准的前景检测结果,并应用NMS纠正同一对象的重叠预测。
如本文开头所述,了解SOTA的目标检测算法,通常会变得令人望而生畏和晦涩难懂,但一旦您了解anchor的作用,目标检测就有了全新的理解。
参考文献
https://www.wovenware.com/blog/2020/06/anchor-boxes-in-object-detection-when-where-and-how-to-propose-them-for-deep-learning-apps/
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
关于目标检测你必须知道的……相关推荐
- 微调torchvision 0.3的目标检测模型
微调torchvision 0.3的目标检测模型 本文将微调在 Penn-Fudan 数据库中对行人检测和分割的已预先训练的 Mask R-CNN 模型.它包含170个图像和345个行人实例,说明如何 ...
- 部署可扩展的目标检测管道:推理过程(下)
部署可扩展的目标检测管道:推理过程(下) 融合 感兴趣的目标可以被遮挡.有时只能看到目标的一小部分(少至几个像素). • 图19.车辆和交通信号灯被遮挡. • 图20:阻塞了总线. • 图21:左侧的 ...
- 目标检测推理部署:优化和部署
目标检测推理部署:优化和部署 本文简要介绍了端对端推理管道的优化技术和部署. 将在以下三个方面研究推理优化过程:硬件优化,软件优化和模型优化.推理优化的关键指标如下: • 吞吐量(未推理图像/秒) • ...
- 部署可扩展的目标检测管道:推理过程(上)
部署可扩展的目标检测管道:推理过程(上) 基于YOLOv3的目标检测推理过程的所有代码都可以在eriklindernoren/PyTorch-YOLOv3 GitHub repo找到. 为了进行审查, ...
- 大数据目标检测推理管道部署
大数据目标检测推理管道部署 本文提供了一个用于对象检测的深度学习推理的概述. 自主车辆软件开发需要大规模的数据.计算和算法创新,这些都是gpu实现的.一组神经网络构成了感知和决策系统的基础.神经网络的 ...
- GPU端到端目标检测YOLOV3全过程(下)
GPU端到端目标检测YOLOV3全过程(下) Ubuntu18.04系统下最新版GPU环境配置 · 安装显卡驱动 · 安装Cuda 10.0 · 安装cuDNN 1.安装显卡驱动 (1)这里采用的是P ...
- GPU端到端目标检测YOLOV3全过程(上)
GPU端到端目标检测YOLOV3全过程(上) Basic Parameters: Video: mp4, webM, avi Picture: jpg, png, gif, bmp Text: doc ...
- Mask R-CNN用于目标检测和分割代码实现
Mask R-CNN用于目标检测和分割代码实现 Mask R-CNN for object detection and instance segmentation on Keras and Tenso ...
- 目标检测数据集The Object Detection Dataset
目标检测数据集The Object Detection Dataset 在目标检测领域,没有像MNIST或Fashion MNIST这样的小数据集.为了快速测试模型,我们将组装一个小数据集.首先,我们 ...
- 多尺度目标检测 Multiscale Object Detection
多尺度目标检测 Multiscale Object Detection 我们在输入图像的每个像素上生成多个锚框.这些定位框用于对输入图像的不同区域进行采样.但是,如果锚定框是以图像的每个像素为中心生成 ...
最新文章
- 3个月带你通关Go语言
- 基类成员的public访问权限在派生类中变为_C++ 派生类的构造函数(学习笔记:第7章 06)...
- 成功解决 SyntaxError: invalid token
- 10年前腾讯微信后台第一天提交的代码曝光!
- ITK:创建一个点集
- 使用JPA和Hibernate有效删除数据
- LeetCode 226. 翻转二叉树(DFS BFS)
- 第8篇:Flowable快速工作流脚手架Jsite_请假实战_查看历史任务
- 量化策略回测ocobreak
- 不要相信 errno 可靠
- Bailian3728 Blah数集【数学+set】
- c语言中联机停止运行,Win7开机提示Microsoft(C)注册服务器已停止工作怎么办?
- 增强型植被指数——EVI
- 分析mrp主要应用范围_MRP软件行业现状调研分析及发展趋势预测报告(2020)
- python程序输出田字格_Python程序练习题5.1-输出更大的田字格。
- python微服务开发pdf_《微服务设计》中文完整版PDF电子书下载
- 基于mybatis-jsp-bootstrap-servlet-mysql-maven的Javaweb课程设计--刷题后台管理系统(考试题目管理系统)
- MySql常用知识归纳整理(收藏)
- 【天池】金融风控贷款违约预测task5
- java用calendr做个日历,calendR :为你定制私人专属日历
热门文章
- 调侃吴恩达,Diss特斯拉,吐槽OpenAI…《AI寒冬将至》作者点评2019“AI小丑秀”...
- 程序员敲代码时,戴着耳机究竟在听什么?
- ICLR 2019最佳论文揭晓!NLP深度学习、神经网络压缩夺魁 | 技术头条
- AI删库,程序员背锅?
- 《请不要回应外星人2019》
- Elastic Job从单点到高可用、同城主备、同城双活
- Spring越来越强,而我们越来越快餐!离开了Spring,居然API都写不出来了! 程序猿DD...
- 基于Transformers入门自然语言处理!
- 5300亿NLP模型“威震天-图灵”发布,由4480块A100训练,微软英伟达联合出品
- 学完这份「计算机基础知识」,你也可以来字节跳动(附下载)