百面算法工程师 | 目标检测网络总结——object detect

news2024/9/25 1:20:37

目录

5.1 Single Shot MultiBox Detector(SSD)

5.2 YOLO

5.2.1 v1

5.2.2 v2

5.2.3 v3

5.2.4 v4

5.2.5 v5 【后续出详细面试考点,订阅我的专栏,更新第一时间通知】

已更新: 百面算法工程师 | YOLOv5面试考点原理全解析-CSDN博客

5.2.6 v6 

5.2.7 v7

5.2.8 v8 【后续出详细面试考点,订阅我的专栏,更新第一时间通知】

5.2.9 v9

5.3 NMS

5.4 Anchor

5.4.1 Anchor based

5.4.2 Anchor free

5.5 类别不均衡

5.6 anchor free FCOS 

5.7 YOLOX


标题有超链接的,是对应网络的论文地址

 欢迎大家订阅我的专栏一起学习共同进步

祝大家早日拿到offer! let's go

🚀🚀🚀http://t.csdnimg.cn/dfcH3🚀🚀🚀

Two stage : R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN

one stage: OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet

  • anchor based:
  1. yolov3, yolov4, yolov5, yolov6, yolov7
  • anchor free:
  1. FCOS, yolov8
5.1 Single Shot MultiBox Detector(SSD)

创新点

 (1)基于Faster R-CNN的Anchor机制,提出了先验框(Prior box)

 (2)从不同比例的特征图(多尺度特征)中产生不同比例的预测,并明确地按长宽比分离预测。

SSD在多个特征图上设置不同缩放比例和不同宽高比的先验框以融合多尺度特征图进行检测,大尺度特征图可以检测小物体信息,小尺度特征图能捕捉大物体信息,从而提高检测的准确性和定位的准确性。

不同于Faster R-CNN只在最后一个特征层取anchor, SSD在多个特征层上取default box,可以得到不同尺度的default box。在特征图的每个单元上取不同宽高比的default box,一般宽高比在{1,2,3,1/2,1/3}中选取,有时还会额外增加一个宽高比为1但具有特殊尺度的box。如下图所示,在8x8的feature map和4x4的feature map上的每个单元取4个不同的default box。

先验框匹配准则 【正负样本匹配】

 (1)对图片中的每个ground truth, 在先验框中找到与其IOU最大的先验框,则该先验框对应的预测边界框与ground truth 匹配。
 (2)对于(1)中每个剩下的没有与任何ground truth匹配到的先验框,找到与其IOU最大的ground truth,若其与该ground truth的IOU值大于某个阈值(一般设为0.5),则该先验框对应的预测边界框与该ground truth匹配。

按照这两个原则进行匹配,匹配到ground truth的先验框对应的预测边界框作为正样本,没有匹配到ground truth的先验框对应的预测边界框作为负样本。尽管一个ground truth可以与多个先验框匹配,但是ground truth的数量相对先验框还是很少,按照上面的原则进行匹配还是会造成负样本远多于正样本的情况。为了使正负样本尽量均衡(一般保证正负样本比例约为1:3),SSD采用hard negative mining, 即对负样本按照其预测背景类的置信度进行降序排列,选取置信度较小的top-k作为训练的负样本。

5.2 YOLO
5.2.1 v1

创新点

 将整张图作为网络的输入,Anchor free方法直接在输出层回归bounding box的位置和类别

anchor based 缺点:FCOS论文总结

  1. 检测器的性能和Anchor的size以及aspect ratio相关,比如在RetinaNet中改变Anchor(论文中说这是个超参数hyper-parameters)能够产生约4%的AP变化。换句话说,Anchor要设置的合适才行。
  2. 一般Anchor的size和aspect ratio都是固定的,所以很难处理那些形状变化很大的目标(比如一本书横着放w远大于h,竖着放h远大于w,斜着放w可能等于h,很难设计出合适的Anchor)。而且迁移到其他任务中时,如果新的数据集目标和预训练数据集中的目标形状差异很大,一般需要重新设计Anchor。(kmeans)【比如书本竖着放和斜着放还有平着放它的anchor大小就不同】
  3. 为了达到更高的召回率(查全率),一般需要在图片中生成非常密集的Anchor Boxes尽可能保证每个目标都会有Anchor Boxes和它相交。比如说在FPN(Feature Pyramid Network)中会生成超过18万个Anchor Boxes(以输入图片最小边长800为例),那么在训练时绝大部分的Anchor Boxes都会被分为负样本,这样会导致正负样本极度不均。
  4. Anchor的引入使得网络在训练过程中更加的繁琐,因为匹配正负样本时需要计算每个Anchor Boxes和每个GT BBoxes之间的IoU。

预测

YOLO将输入图像分成7x7的网格,每个网格预测2个边界框,总共 49x2=98 个bounding box。若某物体的ground truth的中心落在该网格,则该网格中与这个ground truth IOU最大的边界框负责预测该物体。

对每个边界框预测5个值,分别是边界框的中心x,y(相对于所属网格的边界),边界框的宽高w,h(相对于原始输入图像的宽高的比例),以及这些边界框的confidence scores(边界框与ground truth box的IOU值)。同时每个网格还需要预测c个类条件概率 (是一个c维向量,表示某个物体object在这个网格中,且该object分别属于各个类别的概率,这里的c类物体不包含背景)。论文中的c=20,则每个网格需要预测2x5+20=30个值,这些值被映射到一个30维的向量。

5.2.2 v2

YOLOv2相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进

创新点有如下:

 (1)Batch Normalization:在每个卷积层后加Batch Normalization(BN)层,去掉dropout。

 (2)High Resolution:YOLOv2将输入图片的分辨率提升至448x448。

 (3)Convolutional With Anchor Boxes:使用Anchor Boxes预测边界框

 (4)Dimension Clusters:采用k-means聚类算法对训练集中的边界框做了聚类分析,选用boxes之间的IOU值作为聚类指标。

 (5)New Network,Darknet-19:19个卷积层和5个max pooling层的新Backbone。

 (6)Direct location prediction:对预测框的偏移量进行约束

 (7)Fine-Grained Features:提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。

 (8)Multi-Scale Training:YOLOv2采用多尺度输入的方式训练,在训练过程中每隔10个batches,重新随机选择输入图片的尺寸,由于Darknet-19下采样总步长为32,输入图片的尺寸一般选择32的倍数{320,352,…,608}。

5.2.3 v3

创新点:

 backbone部分由Yolov2时期的Darknet-19进化至Darknet-53,加深了网络层数,引入了Resnet中的跨层加和操作。

 Yolov3借鉴了金字塔特征图思想,小尺寸特征图用于检测大尺寸物体,而大尺寸特征图检测小尺寸物体。

 针对anchor box采用聚类的方法获取合适的尺寸。

5.2.4 v4

创新点:

 使用了新的Backbone: CSDarknet50。

 为了增大感受野,YOLOv4使用了SPP-block(金字塔池化)

 改进SAM,改进PAN,和交叉小批量标准化(CmBN),使YOLOv4的设计适合于有效的训练和检测

 Mosaic数据增强

 使用IOU损失代替原始xywh位置损失,其他的采用交叉熵损失函数。

 加权残差连接、跨阶段部分连接、DropBlock正则化、Mish激活等。

5.2.5 v5 【后续出详细面试考点,订阅我的专栏,更新第一时间通知】

百面算法工程师 | YOLOv5面试考点原理全解析-CSDN博客

5.2.6 v6 

【后续可能出详细流程,提前订阅我的专栏,更新第一时间通知】

5.2.7 v7
5.2.8 v8 【后续出详细面试考点,订阅我的专栏,更新第一时间通知】
5.2.9 v9
5.3 NMS
  1. 根据置信度得分进行排序
  2. 选择置信度最高的边界框添加到最终输出列表中,将其从边界框列表中删除
  3. 计算所有边界框的面积
  4. 计算置信度最高的边界框与其它候选框的IoU。
  5. 删除IoU大于阈值的边界框
  6. 重复上述过程,直至边界框列表为空。

Code

import numpy as np
import torch

def nms(boxes, score, conf_thres, iou_thres, classes, agnostic = True):

    tf = score[:] > conf_thres
    score = score[tf]

    keep = []
    idx = np.argsort(score)[::-1] # start:stop:step

    if agnostic:
        pred = torch.hstack((boxes,classes))
        offset = pred[:,4:5] * 4096
        boxes = pred[:,0:4] + offset

    # print(boxes)

    while len(idx) > 0:

        keep.append(idx[0])
        overlap = np.zeros_like(idx[1:], dtype= np.float32)
       
        for i, j in enumerate(idx[1:]):
            bbox1 = boxes[idx[0]]
            bbox2 = boxes[j]
            out = iou(bbox1, bbox2)
            overlap[i] = out
        idx = idx[1:][overlap < iou_thres]

    # return keep
    # box = []
    # for i in keep:
    #     box.append(boxes[i])
    # return box
    return keep, boxes[keep]

def iou(bbox1,bbox2):

    x1, y1, x2, y2 = bbox1 # left_top right_bottom
    x3, y3, x4, y4 = bbox2

    if (x1 <= (x3 + x4) /2 <= x2 ) or (y1 <= (y3 + y4) /2 <= y2):
        left_top_x = max(x1, x3)
        left_top_y = max(y1, y3)
        right_bottom_x = min(x2, x4)
        right_bottom_y = min(y2, y4)

        i = (right_bottom_x - left_top_x) * (right_bottom_y - left_top_y)
        o = (x2 - x1) * (y2 - y1) + (x4 - x3) * (y4 - y3) - i

        IoU = i / o
       
        return IoU
   
    else:
        return 0 # 不相交
   
if __name__ == '__main__':
    boxes = torch.Tensor([
        [100, 100, 200, 200],
        [120, 110, 220, 210],
        [300, 320, 400, 400],
        [180, 100, 300, 180]
    ])
    scores = np.array([0.9, 0.8, 0.7, 0.6])
    classes = torch.Tensor([[0],[1],[1],[2]])
    # np.concatenate 先转置 可以拼接
    out = nms(boxes=boxes, score=scores, conf_thres=0.5, iou_thres=0.25, classes=classes)
    print(out)
5.4 Anchor
5.4.1 Anchor based

anchor通俗来讲就是先验框。首先预设一组不同尺度不同位置的固定参考框,覆盖几乎所有位置和尺度,每个参考框负责检测与其交并比大于阈值 (训练预设值,常用0.5或0.7) 的目标,anchor技术将问题转换为"这个固定参考框中有没有认识的目标,目标框偏离参考框多远",不再需要多尺度遍历滑窗,真正实现了又好又快

优点 【缺点见5.2.1】

 使用anchor机制产生密集的anchor box,使得网络可直接在此基础上进行目标分类及边界框坐标回归。加入先验,训练稳定

 密集的anchor box可有效提高网络目标召回能力,对于小目标检测来说提升非常明显。

5.4.2 Anchor free

优点

 更大更灵活的解空间、摆脱了使用anchor而带来计算量从而让检测和分割都进一步走向实时高精度

缺点

 正负样本极端不平衡

 语义模糊性(两个目标中心点重叠)

 检测结果不稳定,需要设计更多的方法来进行re-weight

5.5 类别不均衡

负样本的数量极大于正样本的数量,比如包含物体的区域(正样本)很少,而不包含物体的区域(负样本)很多。比如检测算法在早期会生成许多bbox。而一幅常规的图片中,object占少数。这意味着绝大多数的bbox属于background。

由于大多数都是简单易分的负样本(属于背景的样本),使得训练过程不能充分学习到属于那些有类别样本的信息;其次简单易分的负样本太多,可能掩盖了其他有类别样本的作用(这些简单易分的负样本仍产生一定幅度的loss,数量多会对loss起主要贡献作用,因此就主导了梯度的更新方向,掩盖了重要的信息)

为什么二阶段网络不会出现类别不均衡问题

 因为通过RPN阶段可以减少候选目标区域,而在分类阶段,可以固定前景与背景比值(foreground-to-background ratio)为1:3,或者使用OHEM(online hard example mining)使得前景和背景的数量达到均衡。

5.6 anchor free FCOS 【以下内容参考B站up主霹雳吧啦wz】

FCOS https://arxiv.org/abs/1904.01355 https://arxiv.org/abs/2006.09214

现今有关Anchor-Free的网络也很多,比如DenseBox、YOLO v1、CornerNet、FCOS以及CenterNet,YOLOX等等,而FCOS它不仅是Anchor-Free还是One-Stage,FCN-base detector

对于Classification分支,在预测特征图的每个位置上都会预测80个score参数(MS COCO数据集目标检测任务的类别数为80)。

对于Regression分支,在预测特征图的每个位置上都会预测4个距离参数(距离目标左侧距离l,上侧距离t,右侧距离r以及下侧距离b,注意,这里预测的数值是相对特征图尺度上的)。假设对于预测特征图上某个点映射回原图的坐标是( c x , c y ) (c_x, c_y)(c x ,c y),特征图相对原图的步距是s,那么网络预测该点对应的目标边界框坐标为

对于Center-ness分支,在预测特征图的每个位置上都会预测1个参数,center-ness反映的是该点(特征图上的某一点)距离目标中心的远近程度,它的值域在0~1之间,距离目标中心越近center-ness越接近于1,下面是center-ness真实标签的计算公式

Anchor free 正负样本匹配

Specifically, location (x, y) is considered as a positive sample if it falls into the center area of any ground-truth box, by following [42]. The center area of a box centered at (cx , cy ) is defined as the sub-box (cx − rs, cy − rs, cx + rs, cy + rs) , where s is the total stride until the current feature maps and r is a hyper-parameter being 1.5 on COCO. The sub-box is clipped so that it is not beyond the original box. Note that this is different from our original conference version, where we consider the locations positive as long as they are in a ground-truth box.

最开始的一句话是说,对于特征图上的某一点( x , y ) (x,y)(x,y),只要它落入GT box中心区域,那么它就被视为正样本(其实在2019年的文章中,最开始说的是只要落入GT内就算正样本)。对应的参考文献[42]就是2019年发表的FCOS版本。但在2020年发表的FCOS版本中,新加了一条规则,在满足以上条件外,还需要满足点( x , y ) (x,y)(x,y)在( c x − r s , c y − r s , c x + r s , c y + r s ) (c_x - rs, c_y - rs, c_x + rs, c_y + rs)(cx−rs,cy−rs,cx+rs,cy+rs)这个sub-box范围内,其中( c x , c y ) (cx, cy)(cx,cy)是GT的中心点,s是特征图相对原图的步距,r是一个超参数控制距离GT中心的远近,在COCO数据集中r设置为1.5,关于r的消融实验可以看2020版论文的表6。换句话说点( x , y ) (x,y)(x,y)不仅要在GT的范围内,还要离GT的中心点( c x , c y ) (c_x, c_y)(cx,cy)足够近才能被视为正样本。

如果feature map上的某个点同时落入两个GT Box内(即两个GT Box相交区域),那该点到底分配给哪个GT Box,【FPN能够减少这种情况】

5.7 YOLOX

主要的差别就在检测头head部分。之前的检测头就是通过一个卷积核大小为1x1的卷积层实现的,即这个卷积层要同时预测类别分数、边界框回归参数以及object ness(耦合头),这种方式在文章中称之为coupled detection head(耦合的检测头)。作者说采用coupled detection head是对网络有害的,如果将coupled detection head换成decoupled detection head(解耦的检测头)分开预测cls,bbox,obj能够大幅提升网络的收敛速度。

解码:

注意这些值都是相对预测特征图尺度上的,如果要映射回原图需要乘上当前特征图相对原图的步距stride

正负样本匹配SimOTA[最优传输成本] 最小化cost可以理解为让网络以最小的学习成本学习到有用的知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1644761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis-三主三从高可用集群搭建

正式搭建之前&#xff0c;注意事项&#xff08;坑&#xff09;提前放到最开始&#xff0c;也可以出问题回来看&#xff0c; &#xff08;1&#xff09;第二步中最好将配置文件中的logfile自定义一个目录&#xff0c;以便于在第五步中启动出错的时候迅速定位错误。 &#xff0…

羊毛项目(华为iPhone茅台),讲解抢购渠道与抢购注意事项

薅羊毛天花板&#xff0c;华为iPhone茅台无脑撸&#xff0c;几分钟换几百元(非脚本项目) 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码&#xff1a;0b8x

Edge扩展应用程序的上架流程

前言 在软件开发的生命周期中&#xff0c;发布流程是将产品推向市场并交付给用户的关键阶段。它不仅标志着一个项目从开发阶段到用户手中的转变&#xff0c;也是确保软件质量和用户体验的重要环节。那么一个清晰、高效且可重复的发布流程对于任何软件项目的成功至关重要&#…

git/gerrit使用遇到的问题

Push时出现的多个问题及其解决 branch【...】not found 这个错误通常出现在 Git 命令中指定的分支名称中包含特殊字符或者语法错误时。需要确保指定的分支名称是正确的&#xff0c;并且没有任何不支持的字符。 例如&#xff0c;如果分支名称是 feature/branch&#xff0c;应该…

webrtc初步了解

WebRTC搭建点对点实时音视频对话&#xff0c;起始需要保证完成两点&#xff1a; 1.媒体协商&#xff0c;了解彼此支持的媒体格式。参与视频通讯的双方必须先交换SDP信息&#xff0c;交换SDP的过程。 2.网络协商&#xff0c;了解彼此的网络环境&#xff0c;找到一条相互通讯的链…

【NI 国产替代】cDAQ-9178, 8槽USB CompactDAQ机箱,国产数据采集卡控制器进口替代方案

8槽USB CompactDAQ机箱 cDAQ-9178是专为小型便携式传感器测量系统而设计的总线供电CompactDAQ USB机箱。机箱通过即插即用的USB可轻松连接传感器和电气测量。该机箱还可控制C系列I/O模块与外部主机之间的定时、同步和数据传输。机箱可以搭配不同的C系列I/O模块组合&#xff0c…

C语言结构体类型

C语言结构体类型 个人主页&#xff1a;大白的编程日记 个人主页&#xff1a;C语言学习之路 文章目录 C语言结构体类型前言一.结构体1.1结构体类型的声明1.2结构体变量的创建和初始化1.3结构成员访问操作符1.4结构的特殊声明1.5 结构的自引用 二.结构体内存对齐2.1对齐规则2.2内…

不错的PMP培训机构推荐,高通过高性价比哪家靠谱

PMP培训班的选择对刚接触到PMP的小白来说的确会有点头大&#xff0c;不过只要记住几个选择标准就可以了&#xff0c;比如说可以从机构实力、讲师师资、服务、通过率&#xff0c;性价比等方面开始&#xff0c;最好也是选择老牌机构&#xff0c;因为后面还涉及到续证方面的问题&a…

Android 14 init进程解析

前言 当bootloader启动后&#xff0c;启动kernel&#xff0c;kernel启动完后&#xff0c;在用户空间启动init进程&#xff0c;再通过init进程&#xff0c;来读取init.rc中的相关配置&#xff0c;从而来启动其他相关进程以及其他操作。 init进程启动主要分为两个阶段&#xff1…

Java八股文3

3.垃圾回收 1.对象什么时候可以被垃圾器回收 1.垃圾回收的概念 为了让程序员更专注于代码的实现&#xff0c;而不用过多的考虑内存释放的问题&#xff0c;所以&#xff0c; 在Java语言中&#xff0c;有了自动的垃圾回收机制&#xff0c;也就是我们熟悉的GC(Garbage Collection)…

linux部署yum仓库

一. Yum概述 1.yum简介 基于RPM包构建的软件更新机制 可以自动解决依赖关系 所有软件包由集中到YUM软件仓库提供 2.yum工作原理 c/s模式 客户端根据配置文件找到yum仓库服务器的位置 服务端向客户端发送元数据包(包含 软件依赖关系 软件的位置) #相当于软件安装目录 客户…

leecode每日一练

打家劫舍 我一开始的思路也是dp&#xff0c;但是转移方程想错了&#xff0c;这个题目转移方程应该是dp[i] max(dp[i-2]nums[i],dp[i-1]) class Solution { public:int rob(vector<int>& nums) {int len nums.size();vector<int> dp(len);int ans 0;if(len&g…

56.基于SSM实现的在线教育网站系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用Java的SSM框架作为开发技术&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SSM的在线教育网站的设计与实现管理工作系统化、规范…

【MySQL】第一次作业

【MySQL】第一次作业 1、在官网下载安装包2、解压安装包&#xff0c;创建一个dev_soft文件夹&#xff0c;解压到里面。3、创建一个数据库db_classes4、创建一行表db_hero5、将四大名著中的常见人物插入这个英雄表 写一篇博客&#xff0c;在window系统安装MySQL将本机的MySQL一定…

【华为】路由综合实验(OSPF+BGP基础)

【华为】路由综合实验 实验需求拓扑配置AR1AR2AR3AR4AR5PC1PC2 查看通信OSPF邻居OSPF路由表 BGPBGP邻居BGP 路由表 配置文档 实验需求 ① 自行规划IP地址 ② 在区域1里面 启用OSPF ③ 在区域1和区域2 启用BGP&#xff0c;使AR4和AR3成为eBGP&#xff0c;AR4和AR5成为iBGP对等体…

06.Git远程仓库

Git远程仓库 #仓库种类&#xff0c;举例说明 github gitlab gitee #以这个仓库为例子操作登录码云 https://gitee.com/projects/new 创建仓库 选择ssh方式 需要配置ssh公钥 在系统上获取公钥输入命令&#xff1a;ssh-keygen 查看文件&#xff0c;复制公钥信息内…

8.表格标签

为什么使用表格 表格简单通用表格结构稳定 表格的基本结构 单元格 行列跨行n为要跨的行数跨列n为要跨的列数 首先&#xff0c;我们做一个最基本的3x4表格&#xff0c;只用到了上述1.2.3三个标签&#xff0c;其中table标签里面的border是表格的边框线&#xff0c;代码和效果…

【DISC交流模型】项目管理必会的思维分析工具11

如何提升自己的领导力&#xff1f;我们可以根据DiSC模型&#xff0c;有针对性提升自我领导力 DISC模型是一种描述性格、行为风格倾向性的理论&#xff0c;也被称为“人类行为语言”。这一模型最初是由美国心理学家威廉莫尔顿马斯顿在20世纪初提出的&#xff0c;并在其1928年…

模电·静态工作点稳定的必要性

静态工作点稳定的必要性 静态工作点不但决定了电路是否会产生失真&#xff0c;而且还影响着电压放大倍数、输入电阻等动态参数。实际上&#xff0c;电源电压的波动、元件的老化以及因温度变化所引起晶体管参数的变化&#xff0c;都会造成静态工作点的不稳定&#xff0c;从而使动…

五一假期后,必读的10篇大模型论文

1.同时预测多个 token&#xff1a;更好更快的大型语言模型 目前&#xff0c;GPT 和 Llama 等大型语言模型&#xff08;LLMs&#xff09;都是通过下一个 token 预测损失来训练的。 在这项工作中&#xff0c;来自 Meta FAIR 的研究团队认为&#xff0c;训练语言模型同时预测多个…