目标检测问题总结

news2024/11/25 13:47:46

目标检测问题总结

  • 目标检测二阶段和一阶段的核心区别
  • 目标检测二阶段比一阶段的算法精度高的原因
    • 1. 正负样本不平衡
    • 2.样本的不一致性
  • 如何解决目标检测中遮挡问题
  • 如何解决动态目标检测
  • FPN的作用
  • 如何解决训练数据样本过少的问题
  • IOU代码实现
  • NMS代码实现
  • NMS的改进思路

目标检测二阶段和一阶段的核心区别

目标检测技术从阶段上分为两种,一阶段和二阶段。
二阶段的核心思想是:首先提出proposal框,通过第一阶段的网络回归出目标框的大致位置大小以及是前景的概率,第二阶段是通过另一个网络回归出目标框的位置、大小及类别。
一阶段网络的核心:对于输入图像,通过网络直接回归出目标大小、位置和类别

目标检测二阶段比一阶段的算法精度高的原因

1. 正负样本不平衡

当某个类别的样本数特别多的时候,训练出来的网络对该类的检测精度往往会比较高,而当某一类的训练样本数较少的时候,模型对该类目标的检测精度就会有所下降。
对于一阶段目标检测来说,它既要做定位又要做分类,最后几层中1X1的卷积层的loss都是混合在一起,没有明确的分工。
对于二阶段目标检测来说,在RPN网络结构中进行了前景和背景的分类和检测,这个过程与一阶段的目标检测直接一上来就进行分类和检测要简单的多,有了前景和背景的区分,就可以选择性的挑选样本,这样正负样本就更加的均衡,然后重点对一些参数进行分类训练,训练的分类难度会比一阶段目标检测直接做混合分类和预测框回归要来的简单很多。
但是一阶段检测算法要比二阶段检测算法快。

2.样本的不一致性

RPN获得多个anchors的时候,会使用一个NMS,在进行回归 操作的时候,预测框和标签的IOU同回归后预测框和标签的IOU相比,一般会有较大的变化,但是NMS使用的时候用的是回归前的置信度,这样就会导致一些回归后高IOU的预测框被删除。这就使得回归前的置信度并不能完全表征回归后的IOU大小。这样就会导致算法精度的下降,在第一次使用NMS时候这种情况会比较明显,第二次使用的时候就会好很多。因此,一阶段只使用一次NMS是会对精度有影响的,而二阶段目标检测中会在RPN之后进行一个更为精细的回归,在该处也会用到NMS,此时检测的精度就会好很多。

如何解决目标检测中遮挡问题

遮挡本身也可以分为两种类型,一种是由于非目标造成的遮挡,一种是由于也是需要检测的目标造成的遮挡。这两种遮挡分别被叫做occlusion和crowded。
对于前一种类型遮挡,很难有针对性的办法去解决,最好的办法也就是使用更多的数据和更强的feature。可以从训练数据入手。加掩膜,加扰动,提高算法对遮挡的应对能力。
对于第二种遮挡,提出了Repulsion Loss

如何解决动态目标检测

在这里插入图片描述

FPN的作用

FPN是在卷积神经网络中图像金字塔的应用。图像金字塔在多尺度识别中有重要的作用,尤其是小目标检测。顶层特征上采样后和底层特征融合,每层独立预测。
FPN的设计动机:

  1. 高层特征向低层特征融合,增加低层特征表达能力,提升性能
  2. 不同尺度的目标可以分配到不同层预测,达到分而治之。
  3. FPN每层做特征融合的特征图有两个,首先是前向传播,然后取了每个特征图做上采样(最近邻插值),对应前向传播的特征图做融合。融合的方式是:通过1x1卷积调整通道数,然后直接add。之后进行3x3卷积操作,目的是消除上采样的混叠效应。
  4. 其实,fpn真正起作用的是分而治之的策略,特征融合的作用其实很有限,此外fpn存在消耗大量显存,降低推理速度
    在这里插入图片描述

如何解决训练数据样本过少的问题

利用预训练模型进行迁移微调(fine-tuning),预训练模型通常在特征上拥有很好的语义表达。此时,只需将模型在小数据集上进行微调就能取得不错的效果。这也是目前大部分小数据集常用的训练方式。视觉领域内,通常会ImageNet上训练完成的模型。自然语言处理领域,也有BERT模型等预训练模型可以使用。

单样本或者少样本学习(one-shot,few-shot learning),这种方式适用于样本类别远远大于样本数量的情况等极端数据集。例如有1000个类别,每个类别只提供1-5个样本。少样本学习同样也需要借助预训练模型,但有别于微调的在于,微调通常仍然在学习不同类别的语义,而少样本学习通常需要学习样本之间的距离度量。例如孪生网络(Siamese Neural Networks)就是通过训练两个同种结构的网络来判别输入的两张图片是否属于同一类。3. 以上两种是常用训练小样本数据集的方式。此外,也有些常用的方式:数据集增强、正则或者半监督学习等方式来解决小样本数据集的训练问题。

IOU代码实现

import numpy as np
def ComputeIOU(boxA,boxB):
    # 计算相交框的坐标
    # bbox[0][1] 左上角坐标 
    # bbox[2][3] 右下角坐标
    x1 = np.max([boxA[0],boxB[0]])
    y1 = np.max([boxA[1], boxB[1]])
    x2 = np.min([boxA[2], boxB[2]])
    y2 = np.min([boxA[3], boxB[3]])
    # 计算交区域 并区域 及IOU
    S_A = (boxA[2]-boxA[0]+1)*(boxA[3]-boxA[1]+1)
    S_B = (boxB[2]-boxB[0]+1)*(boxB[3]-boxB[1]+1)
    interArea = np.max([x2-x1+1, 0])*np.max([y2-y1+1,0])	##一定要和0比较大小,如果是负数就说明压根不相交
    unionArea = S_A + S_B - interArea
    iou = interArea/unionArea
    return iou
boxA = [1,1,3,3]
boxB = [2,2,4,4]
IOU = ComputeIOU(boxA, boxB)

NMS代码实现

import numpy as np
def nms(dets,iou_thred,cfd_thred):
    if len(dets) == 0:
        return []
    bboxes = np.array(dets)
    # 对整个bboxes排序
    bboxes = bboxes[np.argsort(bboxes[:,4])]
    pick_bboxes = []
    while bboxes.shape[0] and bboxes[-1,-1] >= cfd_thred:
        bbox = bboxes[-1]
        x1 = np.maximum(bbox[0],bboxes[:-1,0])
        y1 = np.maximum(bbox[1], bboxes[:-1,1])
        x2 = np.minimum(bbox[2], bboxes[:-1,2])
        y2 = np.minimum(bbox[3], bboxes[:-1,3])
        inters = np.maximum(x2-x1+1, 0) * np.maximum(y2-y1+1, 0)
        unions = (bbox[2]-bbox[0]+1)*(bbox[3]-bbox[1]+1) + (bboxes[:-1,2]-bboxes[:-1,0]+1)*(bboxes[:-1,3]-bboxes[:-1,1]+1) - inters
        ious = inters/unions
        keep_indices = np.where(ious<iou_thred)
        bboxes = bboxes[keep_indices]	## indices一定不包括自己
        pick_bboxes.append(bbox)
    return np.asarray(pick_bboxes)  
dets = [[187, 82, 337, 317, 0.9], [150, 67, 305, 282, 0.75], [246, 121, 368, 304, 0.8]]
dets_nms =  nms(dets, 0.5, 0.3)
print(dets_nms)

NMS的改进思路

  1. 根据手动设置阈值的缺陷,通过自适应的方法在目标系数时使用小阈值,目标稠密时使用大阈值。例如Adaptive NMS
  2. 将低于阈值的直接置为0的做法太hard,通过将其根据IoU大小来进行惩罚衰减,则变得更加soft。例如Soft NMS,Softer NMS。
  3. 只能在CPU上运行,速度太慢的改进思路有三个,一个是设计在GPU上的NMS,如CUDA NMS,一个是设计更快的NMS,如Fast NMS,最后一个是掀桌子,设计一个神经网络来实现NMS,如 ConvNMS。
  4. IoU的做法存在一定缺陷,改进思路是将目标尺度、距离引进IoU的考虑中。如DIoU

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

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

相关文章

DBC文件解析成C语言

1. 安装python环境 例如Windows安装python3.10版本 下载地址https://cdn.npmmirror.com/binaries/python/3.10.9/python-3.10.9-amd64.exe 2. 安装cantools函数库 打开CMD窗口后&#xff0c;输入pip install cantools 3. 执行dbc文件转为C语言 注意&#xff1a;c文件和…

时间序列预测(2) — 时间序列预测数据集

目录 数据集1&#xff1a;GEFCom2014负荷数据 数据集2&#xff1a;爱奇艺用户留存预测挑战赛数据集 数据集1&#xff1a;GEFCom2014负荷数据 数据集下载&#xff1a; 百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1PgCWHx8vYUfGB9UGtCmaVA?pwdktn0 提取码…

儿童HPV感染有哪些症状?皮肤性病科谭巍主任讲述五大要点

HPV&#xff0c;人乳头瘤病毒&#xff0c;是一种常见的感染性强的病毒&#xff0c;相比成人儿童也会感染HPV。家长及时了解儿童感染HPV的症状对于早期发现和治疗至关重要。为了帮助家长们更好预防儿童HPV感染&#xff0c;今日特邀劲松中西医医院皮肤性病科主任谭巍详细介绍儿童…

MoveIt 机械臂运动 学习 01-MoveIt 初次见面

ROS中有针对机器人进行移动操作的一套工具——MoveIt&#xff01;。在主页http://moveit.ros.org 上 包含使用MoveIt&#xff01;的文档、教程、安装说明以及多种机械臂&#xff08;或机器人&#xff09;的示例演示&#xff0c;如一些 移动操作任务&#xff0c;包括抓握、拾取和…

前端框架图谱

以上图谱基于个人经验总结&#xff0c;比如小程序、第三方平台等未在其中有所体现

Web安全之PHP的伪协议漏洞利用,以及伪协议漏洞防护方法

一、背景 今天介绍一个比较冷门的知识&#xff0c;只有在PHP环境中存在的伪协议漏洞&#xff0c;那么什么是PHP伪协议呢&#xff1f;PHP伪协议事实上就是支持的协议与封装协议。可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议…

sqlmap requires ‘python-pymysql‘ third-party library

使用sqlmap进行udf提权报错&#xff1a; [14:06:04] [CRITICAL] sqlmap requires python-pymysql third-party library in order to directly connect to the DBMS MySQL. You can download it from https://github.com/PyMySQL/PyMySQL. Alternative is to use a package pyt…

[WSL] 安装MySQL8

安装版本 mysql --version mysql Ver 8.0.35-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))安装步骤 sudo apt-get update sudo apt-get upgradesudo apt-get install mysql-server apt install mysql-client apt install libmysqlclient-devsudo usermod -d /var/lib/m…

excel中通过ROW函数返回引用的行号

例如&#xff0c;想引用B3的行号&#xff08;行号应该是3&#xff09;&#xff1a; 鼠标点在想输入函数的单元格&#xff1a; 插入-》函数&#xff1a; 选择ROW函数&#xff1a; 点击“继续”&#xff0c;然后点击红框圈出来的按钮&#xff1a; 鼠标点击B3单元格&…

亚马逊鲲鹏系统能注册哪些国家的买家号

亚马逊鲲鹏系统全面支持12个站点&#xff1a;美国站点、加拿大站点、德国站点、英国站点、法国站点、意大利站点、西班牙站点、日本站点、印度站点、新加坡站点、澳大利亚站点、荷兰站点。 对于注册可以用手机号或者用邮箱进行注册&#xff0c;注册时自动模拟真人点击输入账号、…

VB.net TCP服务端监听端口接收客户端RFID网络读卡器上传的读卡数据

本 示例使用设备介绍&#xff1a;WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) Imports System.Threading Imports System.Net Imports System.Net.Sockets Public Class Form1Dim ListenSocket As SocketDim Dict As New Dictionary(Of…

vscode 内置扩展找不到? 设置之后不知道怎么还原?

搜索上面框起来的就是内置扩展 vscode这一招太恶心。。。

自动化测试项目:浅谈分层设计的思路

本文以笔者当前使用的自动化测试项目为例&#xff0c;浅谈分层设计的思路&#xff0c;不涉及到具体的代码细节和某个框架的实现原理&#xff0c;重点关注在分层前后的使用对比&#xff0c;可能会以一些伪代码为例来说明举例。 接口测试三要素&#xff1a; 参数构造发起请求&a…

3种方法,教你用Pytest更改自动化测试用例执行顺序!

前言 在自动化测试中&#xff0c;自动化测试用例设计原则就是&#xff1a;执行过程时不能存在依赖顺序。那么如果测试用例需要按照指定顺序执行&#xff0c;这个时候应该怎么做呢&#xff1f; 目前单元测试框架中UnitTest没有办法改变测试用例的执行顺序&#xff0c;但是另一…

1688商品采集api接口1688代购商品采集API商品详情数据获取

做小程序商城时&#xff0c;最崩溃的瞬间是什么&#xff1f; 一定是当你有几百件商品&#xff0c;却要一件一件编辑商品名称、规格、上传图片吧…… 为了帮助商家快速上货开店&#xff0c;特意提供了1688的获取商品详情数据的接口&#xff0c;方便商家一键采集淘宝、天猫、京…

【广州华锐视点】海外制片人VR虚拟情景教学带来全新的学习体验

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种利用电脑模拟产生一个三维的虚拟世界&#xff0c;提供用户关于视觉、听觉、触觉等感官的模拟体验的技术。随着科技的进步&#xff0c;VR已经被广泛应用到许多领域&#xff0c;包括游戏、教育、医疗、房…

Outlook如何恢复已删除邮件

Outlook如何恢复已删除邮件 操作指引&#xff1a; Outlook客户端恢复最近7天删除的邮件&#xff1a; Outlook客户端要求最新版本&#xff0c;如没有如下选项&#xff0c;建议联机更新windows update 网页邮箱恢复最近7天删除的邮件&#xff1a;

极智芯 | GPU架构与计算能力

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文分享一下 GPU架构与计算能力。 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xff1a;https:…

黑客技术(网络安全)—高效自学

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0c;但是连方向都没搞清楚就开始学习…