目标检测算法SSD与FasterRCNN

目标检测算法SSD与FasterRCNN

SSD:( Single Shot MultiBox Detector)特点是在不同特征尺度上预测不同尺度的目标。

SSD网络结构

在这里插入图片描述
首先对网络的特征进行说明:输入的图像是300x300的三通道彩色图像。

网络的第一个部分贯穿到Vgg16模型 Conv5的第三层上

在这里插入图片描述
整个SSD网络的第一个预测特征层就是conv4的第三层,得到的是38x38的512通道的特征图。

采用vgg网络通常是将大小进行减半,通道数进行翻倍的操作。300 150 75 38即为ssd网络的第一个预测特征层。

之后我们对maxpooling进行一个更改操作。变为3x3步幅为1是特征层的大小保持不变。

之后FC6和FC7替代的是vgg网络中的两个全连接层:首先是通过3x3的卷积核步距为2对其进行一个缩放处理得到的是19x19的一个特征输出,之后连接一个1x1的卷积核进行通道的融合,从而得到了第二个预测的特征。

后面的分析过程基本相同:按照图示来进行分析即可,最后会得到6个预测特征层4
即为1x1的256通道的预测特征层。

不同特征尺度上预测不同尺度的目标:在较小的特征层上检测较大的目标,在较大的特征层上检测较小的目标。

在这里插入图片描述

Default Box的scale以及aspect设定

在这里插入图片描述
论文中的原文提到了conv4_3 conv10_2和conv11_2我们只使用4个default box而其他的层使用的是默认的6个default box并且这4个default box会忽略掉1:3和3:1的两个比例。

不使用论文中的计算公式而采用:下面提供的比例和尺度信息。

在这里插入图片描述

下面的图表从总体上说明了各个特征图的Default Box的scale以及aspect

在这里插入图片描述
总共会生成:38x38x4 + 19x19x6 + 10x10x6 + 5x5x6 + 3x3x4 + 1x1x4 = 8732个Default Box

与ssd论文网络结构图中的8732个特征层相同。
也体现了之前学习的动手学深度学习中的多尺度锚框的思想,在特征图的每一个像素位置生成锚框。

在这里插入图片描述

图示即为在feature map1 feature map4中生成的锚框。

在这里插入图片描述

Predictor的实现

预测器的实现步骤

首先我们会采用(C+4)×k =cxk+4xk个卷积核来进行预测其中ck个是用来预测我们的类别分数。4k即为边界框回归参数。x y w h

注意是:c是包含背景类别的

在这里插入图片描述

损失函数计算

L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L(x, c, l, g)=\frac{1}{N}\left(L_{c o n f}(x, c)+\alpha\right. L(x,c,l,g)=N1(Lconf(x,c)+α

损失的计算也主要包括两个部分组成,分别是类别损失定位损失两个部分。

其中N为匹配到的正样本个数,α为1

类别损失的概率为:(相当于是一个softmax的损失)

L conf  ( x , c ) = − ∑ i ∈  Pos  N x i j p log ⁡ ( c ^ i p ) − ∑ i ∈ N e g log ⁡ ( c ^ i 0 )  where  c ^ i p = exp ⁡ ( c i p ) ∑ p exp ⁡ ( c i p ) L_{\text {conf }}(x, c)=-\sum_{i \in \text { Pos }}^{N} x_{i j}^{p} \log \left(\hat{c}_{i}^{p}\right)-\sum_{i \in N e g} \log \left(\hat{c}_{i}^{0}\right) \quad \text { where } \quad \hat{c}_{i}^{p}=\frac{\exp \left(c_{i}^{p}\right)}{\sum_{p} \exp \left(c_{i}^{p}\right)} Lconf (x,c)=i Pos Nxijplog(c^ip)iNeglog(c^i0) where c^ip=pexp(cip)exp(cip)

在这里插入图片描述
定位损失与FastRcnn相同,具体参考fastRcnn的部分进行补充学习。

L l o c ( x , l , g ) = ∑ i ∈ P o s N ∑ m ∈ { c x , c y , w , h } x i j k smooth ⁡ L 1 ( l i m − g ^ j m ) g ^ j c x = ( g j c x − d i c x ) / d i w g ^ j c y = ( g j c y − d i c y ) / d i h g ^ j w = log ⁡ ( g j w d i w ) g ^ j h = log ⁡ ( g j h d i h ) \begin{aligned} L_{l o c}(x, l, g) & =\sum_{i \in P o s}^{N} \sum_{m \in\{c x, c y, w, h\}} x_{i j}^{k} \operatorname{smooth}_{\mathrm{L} 1}\left(l_{i}^{m}-\hat{g}_{j}^{m}\right) \\ \hat{g}_{j}^{c x}=\left(g_{j}^{c x}-d_{i}^{c x}\right) / d_{i}^{w} & \hat{g}_{j}^{c y}=\left(g_{j}^{c y}-d_{i}^{c y}\right) / d_{i}^{h} \\ \hat{g}_{j}^{w}=\log \left(\frac{g_{j}^{w}}{d_{i}^{w}}\right) & \hat{g}_{j}^{h}=\log \left(\frac{g_{j}^{h}}{d_{i}^{h}}\right) \end{aligned} Lloc(x,l,g)g^jcx=(gjcxdicx)/diwg^jw=log(diwgjw)=iPosNm{cx,cy,w,h}xijksmoothL1(limg^jm)g^jcy=(gjcydicy)/dihg^jh=log(dihgjh)

Faster R-CNN

FastR-CNN算法流程可分为3个步骤

  • 一张图像生成1K~2K个候选区域(使用SelectiveSearch方法)
  • 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到
    特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过R0Ipooling层缩放到7x7大小的特征图,接着将
    特征图展平通过一系列全连接层得到预测结果。

在这里插入图片描述

FasterR-CNN算法流程可分为3个步骤

  • 将图像输入网络得到相应的特征图
  • 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过R0I pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

RPN + Fast R-CNN

RPN替代SS算法分析

在这里插入图片描述

对于特征图上的每个3x3的滑动,窗口,计算出滑动窗口中心点对应
原始图像上的中心点,并计算出K个anchor boxes(注意和proposal的差异)。

4k:即为边界框的回归坐标参数。
2k: 即为k个锚框是背景和其他类别的概率信息。

根据原图和特征图的比例关系,确定特征图中的每个像素在原图中所对对应的位置信息。在以该点为中心计算出k个锚框。

在这里插入图片描述

尺度与比例的计算

三种尺度(面积){128x128,256x256,512x512}
三种比例{1:1, 1:2。2:1}

将尺度与比例进行融合:每个位置(每个滑动窗口)在原图上都对应有3x3=9anchor

在这里插入图片描述
对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。

损失函数计算

损失函数的计算同样包括了边界框回归损失与分类损失。

L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N reg  ∑ i p i ∗ L reg  ( t i , t j ∗ ) L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right)=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{*}\right)+\lambda \frac{1}{N_{\text {reg }}} \sum_{i} p_{i}^{*} L_{\text {reg }}\left(t_{i}, t_{j}^{*}\right) L({pi},{ti})=Ncls1iLcls(pi,pi)+λNreg 1ipiLreg (ti,tj)

  • Ncls表示一个mini-batch中的所有样本数量256
  • Nreg表示anchor位置的个数(不是anchor个数)约2400

其中的回归损失的计算如下:

L reg  ( t i , t i ∗ ) = ∑ i smooth ⁡ L 1 ( t i − t i ∗ ) t i = [ t x , t y , t w , t h ] t i ∗ = [ t x ∗ , t y ∗ , t w ∗ , t h ∗ ] \begin{array}{l} L_{\text {reg }}\left(t_{i}, t_{i}^{*}\right)=\sum_{i} \operatorname{smooth}_{L_{1}}\left(t_{i}-t_{i}^{*}\right) \\ t_{i}=\left[t_{x}, t_{y}, t_{w}, t_{h}\right] \quad t_{i}^{*}=\left[t_{x}^{*}, t_{y}^{*}, t_{w}^{*}, t_{h}^{*}\right] \end{array} Lreg (ti,ti)=ismoothL1(titi)ti=[tx,ty,tw,th]ti=[tx,ty,tw,th]

  • ti表示预测第i个anchor的边界框回归参数
  • ti*表示第i个anchor对应的GTBox的回归参数

下面给出回归参数的计算公式:
t x = ( x − x a ) / w a , t y = ( y − y a ) / h a , t w = log ⁡ ( w / w a ) , t w = log ⁡ ( h / h a ) , t x ∗ = ( x ∗ − x a ) / w a , t y ∗ = ( y ∗ − y a ) / h a , t w ∗ = log ⁡ ( w ∗ / w a ) , t h ∗ = log ⁡ ( h ∗ / h a ) \begin{array}{l} t_{x}=\left(x-x_{a}\right) / w_{a}, t_{y}=\left(y-y_{a}\right) / h_{a}, \\ t_{w}=\log \left(w / w_{a}\right), t_{w}=\log \left(h / h_{a}\right), \\ t_{x}^{*}=\left(x^{*}-x_{a}\right) / w_{a}, t_{y}^{*}=\left(y^{*}-y_{a}\right) / h_{a}, \\ t_{w}^{*}=\log \left(w^{*} / w_{a}\right), t_{h}^{*}=\log \left(h^{*} / h_{a}\right) \end{array} tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),tw=log(h/ha),tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),th=log(h/ha)
带入smoothl1函数中得到最后的结果

smoothl1函数的表达形式为:

 smooth  L 1 ( x ) = { 0.5 x 2  if  ∣ x ∣ < 1 ∣ x ∣ − 0.5  otherwise  \text { smooth }_{L_{1}}(x)=\left\{\begin{array}{ll} 0.5 x^{2} & \text { if }|x|<1 \\ |x|-0.5 & \text { otherwise } \end{array}\right.  smooth L1(x)={0.5x2x0.5 if x<1 otherwise 

下面介绍分类损失的计算信息。

  • p,表示第i个anchor预测为真实标签的概率
  • p*当为正样本时为1,当为负样本时为0

第一种计算的损失为:多分类损失的计算

L c l s = − ln ⁡ ( p i ) L_{c l s}=-\ln \left(p_{i}\right) Lcls=ln(pi)

正样本时为1,当为负样本时为0将负样本的情况进行省略。得到上面的计算公式。

另外一种的计算方式是使用二值交叉熵损失来进行计算。

在这里插入图片描述
L c l s = − [ p i ∗ log ⁡ ( p i ) + ( 1 − p i ∗ ) log ⁡ ( 1 − p i ) ] L_{c l s}=-\left[p_{i}^{*} \log \left(p_{i}\right)+\left(1-p_{i}^{*}\right) \log \left(1-p_{i}\right)\right] Lcls=[pilog(pi)+(1pi)log(1pi)]

Faster R-CNN训练

在这里插入图片描述

现在Faster R-CNN的训练直接采用RPNLoss+FastR-CNNLoss的联合训练方法。

原论文中采用分别训练RPN以及FastR-CNN的方法。

(1)利用imageNet预训练分类模型初始化前置卷积网络层参数,并
开始单独训练RPN网络参数;

(2)固定RPN网络独有的卷积层以及全连接层参数,再利用ImageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练FastRCNN网络参数。

(3)固定利用FastRCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数。

(4)同样保持固定前置卷积网络层参数,去微调FastRCNN网络的全连接层参数。最后RPN网络与FaStRCNN网络共享前置卷积网络层.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PAT B1026. 程序运行时间

题目描述 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock(&#xff09;函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK——给出了机器时钟每秒所走的时钟打点数…

【Android面试八股文】Java中有几种引用关系,它们的区别是什么?

在Java中,引用关系主要分为以下几种: 强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference) 这些引用类型的区别在于它们对垃圾回收的影响程度。下面是对每种引用类型的详细解释及代码示例: 1. 强引用(Strong Referen…

继电器的保护二极管如何选择

继电器在实际应用中&#xff0c;通常都会使用三极管或MOS管控制&#xff0c;其最基本的应用电路如图&#xff1a; 那为什么要在继电器线圈上并联一个二极管呢&#xff1f;我们可以看看没有并联二极管时电路会出现什么情况&#xff0c;我们使用下图所示的电路参数仿真一下&#…

Java web应用性能分析之【prometheus+Grafana监控springboot服务和服务器监控】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 Java web应用性能分析之【jvisualvm远程连接云服务器】-CSDN博客 Java web应用性能分析之【java进程问题分析定位】-CSDN博客 Java web应用性能分析之【…

5.3.1_2 二叉树的层次遍历

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

PostgreSQL下载地址

下载地址&#xff1a;PostgreSQL: File Browser

Arduino入门2——常用函数及用法

Arduino入门2——串口驱动函数及用法 IO串口 上期&#xff0c;我们简单的认识了一下Arduino&#xff0c;浅浅的入了个门&#xff0c;这一期我们介绍以下Arduino串口常用的函数及用法 IO 常用串口库函数如下&#xff1a; 函数名用法及解析pinMode()用于IO口初始化digitalWrite…

【iOS】自定义cell及其复用机制

文章目录 cell的复用注册非注册两者的区别 自定义cell cell的复用 当用户滚动 UITableView 或 UICollectionView 时,只有少量可见的 cell 会被实际创建和显示。对于那些暂时不可见的 cell,系统会将它们缓存起来以备将来复用。这就是所谓的 cell 复用机制。 为什么需要cell的复…

【招联消费金融股份】有限公司2024年5月19日【算法开发岗暑期实习】二面试经验分享

招联消费金融股份有限公司2024年5月18日面试经验分享 面试流程&#xff1a;30分钟 面试流程&#xff1a;30分钟 先自我介绍3分钟然后介绍论文和实习&#xff0c;细细问。问对招联了解多少&#xff1f;对实习地点怎么样&#xff1f;反问&#xff0c;正常聊天。 创作不易&#x…

数字化转型中的数据资产运营:从数据资产的获取、存储、分析到应用的全流程管理策略

一、引言 随着信息技术的迅猛发展&#xff0c;数字化转型已成为企业提升竞争力、实现可持续发展的关键途径。数据资产作为数字化转型的核心要素&#xff0c;其运营与管理水平直接决定了企业能否在激烈的市场竞争中脱颖而出。本文将从数据资产的获取、存储、分析到应用的全流程…

vue关于:deep穿透样式的理解

情况一 子组件&#xff1a; <div class"child"><div class"test_class">test_class<div class"test1">test1<div class"test2">test2</div></div></div></div>父组件&#xff1a; …

Java爬虫——正则表达式应用

Pattern Matcher均属于regex下 步骤&#xff1a;pattern获取正则&#xff0c;matcher获取文本对象&#xff0c;find截取字符串&#xff08;返回true、false&#xff09;&#xff0c;group获得字符 例题&#xff1a;爬取指定文字 分析&#xff1a; 二次调用时&#xff1a; 循环…

【vue3中使用$refs】

在使用uniapp官网里的uni-popup弹出层组件时&#xff0c;要将vue2转换成vue3,&#xff0c;这里遇到了一个问题&#xff1a;vue2可以通过this访问到绑定的ref&#xff0c;但是vue3没有了this,应该怎么办呢&#xff1f; 解决方法&#xff1a; !

Cocos Creator,Youtube 小游戏!

YouTube 官方前段时间发布了一则重磅通知&#xff0c;宣布平台旗下小游戏功能 Youtube Playables 正式登录全平台&#xff08;安卓、iOS、网页&#xff09;&#xff0c;并内置了数十款精选小游戏。 Youtube Playables 入口&#xff1a; https://www.youtube.com/playables Coco…

Digital电路仿真软件的安装

文章目录 1. Java环境的安装 2. Digital安装 3. 软件配置 1. Java环境的安装 电路仿真软件Digital是一款用于设计和仿真数字逻辑电路的工具。它可以帮助用户创建、测试和调试各种数字电路&#xff0c;提供可视化的电路编辑环境&#xff0c;使得设计过程更加直观和便捷。 D…

Sigir2024 ranking相关论文速读

简单浏览一下Sigir2024中与ranking相关的论文。不得不说&#xff0c;自从LLM大热后&#xff0c;传统的LTR方向的论文是越来越少了&#xff0c;目前不少都是RAG或类似场景下的工作了&#xff0c;比如查询改写、rerank等。 文章目录 The Surprising Effectiveness of Rankers Tr…

centos环境上:k8s 简单安装教程

本次演示安装3节点k8s环境&#xff0c;无需多言&#xff0c;直接上操作步骤&#xff1a; 1、环境准备 k8s部署前&#xff0c;首先需要准备好环境&#xff0c;除了1.4 步骤&#xff0c;其他步骤在所有&#xff08;3个&#xff09;节点上都要执行&#xff1a; 1.1 关闭防火墙 s…

CSS【详解】样式选择器的优先级(含提升优先级的方法)

数值越大&#xff0c;优先级越高&#xff0c;尽量保持较低的优先级&#xff0c;以便使用更高优先级的选择器重置样式 0级——通配选择器、选择符和逻辑组合伪类。逻辑组合伪类有:not()、:is()和:where等&#xff0c;这些伪类本身并不影响CSS优先级&#xff0c;影响优先级的是括…

C++初学者指南第一步---1. C++开发环境设置

C初学者指南第一步—1. C开发环境设置 目录 C初学者指南第一步---1. C开发环境设置1.1 工具1.1.1 代码编辑器和IDE1.1.2 Windows1.1.3 命令行界面 1.2 编译器1.2.1 gcc/g (支持Linux/Windows/MacOSX)1.2.2 clang/clang (支持Linux/Windows/MacOS)1.2.3 Microsoft Visual Studio…

C/C++李峋同款跳动的爱心代码

一、写在前面 在编程的世界里&#xff0c;代码不仅仅是冷冰冰的命令&#xff0c;它也可以成为表达情感、传递浪漫的工具。今天&#xff0c;就让小编带着大家用C语言打造出李峋同款跳动的爱心吧&#xff01; 首先&#xff0c;我们需要知道C作为一种高级编程语言&#xff0c;拥…