RCNN

news2024/11/17 21:26:09

1.RCNN

1.1算法流程

  1. 一张图像生成1k~2k个候选区域(使用Selective Search方法)
  2. 对每个候选区域,使用深度网络提取特征
  3. 特征送入每一类的SVM分类器,判断是否属于该类
  4. 使用回归器精细修正候选框位置

1.候选区域的生成
利用selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

2.对每个候选区域,使用深度网络提取特征
将2000候选区域缩放到227x227pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵。

CNN:图像分类网络

3.特征送入每一类的SVM分类器,判定类别
将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

SVM分类器:二分类

image-20220331101934116

4.使用回归器精细修正候选框位置
对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。

image-20220331102232781

image-20220331102525577

1.2 R-CNN存在的问题

  1. 测试速度慢:
    测试一张图片约53s(CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
  2. 训练速度慢:
    过程及其繁琐
  3. 训练所需空间大:
    对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOCO7训练集上的5k图像上提取的特征需要数百GB的存储空间。
  4. 尺寸归一化导致物体变形,纵横比特征丢失,强行拉伸

1.2(1)解决办法

SPP net 创新

  • 提出金字塔池化操作,可适应任意大小的输入图像
  • 计算整幅图像的特征图,根据相对位置进行截取

1.3 什么是深度网络提取特征?

人识别物体也是根据特别的特征辨别的,计算机也是

ff37f2cc55876369f02196ef5a5a5abe.png

对于输出层之前的所有层,我们都可以将其看成是一个特征提取的过程,而且越靠后的隐含层也就意味着提取得到的特征越抽象

深度学习的核心目的就四个字:特征提取

深度特征提取方法_我告诉你什么是深度学习_weixin_39820588的博客-CSDN博客

1.4 什么是交叉熵

交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。

在特征工程中,可以用来衡量两个随机变量之间的相似度。

交叉熵_百度百科 (baidu.com)

2.FastRCNN

Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。

同样使用vGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal voc数据集上)。

2.1Fast R-CNN算法流程可分为3个步骤

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

2.2一次性计算整张图像特征

R-CNN依次将候选框区域输入卷积神经网络得到特征。(会存在大量的冗余)

Fast-RCNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算。(不限制输入的尺寸)

image-20220401121754257

训练数据的采样:正样本(确实存在的),负样本(简单理解为背景)

分类器
输出N+1个类别的概率(N为检测目标的种类,1为背景)共N+1个节点

边界框回归器
输出对应N+1个类别的候选边界框回归参数(d. d,d., d),共(N+1)x4个节点

image-20220401213313666

image-20220401213540725

image-20220401213648169

相关知识点连接

回归损失函数1:L1 loss, L2 loss以及Smooth L1 Loss的对比 - Brook_icv - 博客园 (cnblogs.com)

2.3 Fast RCNN框架

image-20220401215639028

2.4 RoI Pooling Layer 的作用

保证输入后续全连接层的特征向量维度相同

3.Faster RCNN

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作为网络backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。

3.1Faster R-CNN 算法流程可分为3个步骤

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

image-20220401220228393

image-20220401220304812

3.2 RPN Multi-task loss

Faster R-CNN真正实现了端到端的训练(end-to-end training)。

Faster R-CNN最大特色是使用了RPN取代了SS算法来获取RoI

image-20220401223347024

image-20220401223427581

3.3 Faster R-CNN训练

直接采用RPN Loss+ Fast R-CNN Loss的联合训练方法

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

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

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

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

(4)同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层参数,构成一个统一网络。

3.4Faster R-CNN框架

image-20220401224755935

3.5 核心是理解RPN

参考博客链接

目标检测综述_计算机视觉life的博客-CSDN博客_目标检测

anchor:
简单地说,RPN依靠一个在共享特征图上滑动的窗口,为每个位置生成9种预先设置好长宽比与面积的目

标框(即anchor)。这9种初始anchor包含三种面积(128×128,256×256,512×512),每种面积又包含三

种长宽比(1:1,1:2,2:1)。示意图如下所示:

image-20220402171605237

绿的三个anchor

红的三个anchor

蓝的三个anchor

总共九个anchor

三种尺度(面积){128x128, 256x256,512x512 }

三种比例{1:1,1:2,2:1}

每个位置在原图上都对应有3x3=9 anchor

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

4.主干网络

4.1常见分类

常见的有VGG、Resnet 和 Xception 等

对于精度与效率的不同要求,人们可以选择更深且连接密集的主干网络,如 ResNet 、ResNeXt 、

AmoebaNet 。

轻量级主干网络,如 MobileNet 、ShuffleNet 、SqueezeNet 、Xception 、MobileNetV2 。

Resnet网络是一种深度残差网络,深度残差网络可以有效解决因网络深度加深而产生的学习效率下降而

准确率无法有效提升的问题

特征的好坏决定了网络性能的上限。

4.2 FPN

特征图金字塔网络FPN(Feature Pyramid Networks)

FPN主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。

算法大致结构如下:一个自底向上的线路,一个自顶向下的线路,横向连接

作者提出的FPN(Feature Pyramid Network)算法同时利用低层特征高分辨率高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,效果甚佳。

4.3ResNet

4.4 AlexNet 深度卷积神经网络(2012)

我怎么拿到数据?拿到数据我又不知道干啥?知道干啥我又不会分析?

解决办法:先寻找数据集,例如交通标识识别,研究别人的论文,有什么地方可以替换(改进),跑出数据直接写论文。

该网络的亮点在于:

  1. 首次利用GPU进行网络加速训练。
  2. 使用了ReLU激活函数,而不是传统的Sigmoid激活函数以及Tanh激活函数。
  3. 使用了LRN局部响应归一化。
  4. 在全连接层的前两层中使用了Dropout随机失活神经元操作,以减少过拟合。
  • Sigmoid激活函数以及Tanh激活函数求导比较麻烦,网络较深的时候会出现梯度消失的情况。

ReLU成功解决了这两个痛点。①求导问题②梯度消失问题

  • 过拟合 :根本原因是特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。过度的拟合了训练数据,而没有考虑到泛化能力。

image-20220331171310828

使用Dropout的方式在网络正向传播过程中随机失活一部分神经元

image-20220331171515720

经卷积后的矩阵尺寸大小计算公式为: N= (W -F+ 2P ) /S+1

  1. 输入图片大小W*W
  2. Filter大小F×F
  3. 步长s
  4. padding的像素数P
import torch
from torch import nn
from d2l import torch as d2l
net = nn.Sequential(
  # 这⾥,我们使⽤⼀个11*11的更⼤窗⼝来捕捉对象。
  # 同时,步幅为4,以减少输出的⾼度和宽度。
  # 另外,输出通道的数⽬远⼤于LeNet
  nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),
  nn.MaxPool2d(kernel_size=3, stride=2),
  # 减⼩卷积窗⼝,使⽤填充为2来使得输⼊与输出的⾼和宽⼀致,且增⼤输出通道数
  nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),
  nn.MaxPool2d(kernel_size=3, stride=2),
  # 使⽤三个连续的卷积层和较⼩的卷积窗⼝。
  # 除了最后的卷积层,输出通道的数量进⼀步增加。
  # 在前两个卷积层之后,汇聚层不⽤于减少输⼊的⾼度和宽度
  nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),
  nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
  nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),
  nn.MaxPool2d(kernel_size=3, stride=2),
  nn.Flatten(),
  # 这⾥,全连接层的输出数量是LeNet中的好⼏倍。使⽤dropout层来减轻过拟合
  nn.Linear(6400, 4096), nn.ReLU(),
  nn.Dropout(p=0.5),
  nn.Linear(4096, 4096), nn.ReLU(),
  nn.Dropout(p=0.5),
  # 最后是输出层。由于这⾥使⽤Fashion-MNIST,所以⽤类别数为10,⽽⾮论⽂中的1000
  nn.Linear(4096, 10))

X = torch.randn(1, 1, 224, 224)
for layer in net:
  X=layer(X)
  print(layer.__class__.__name__,'output shape:\t',X.shape)
    
    
batch_size = 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)

image-20220331195835495

image-20220331195902944

image-20220405225900118

image-20220406123647600

image-20220406141621749

image-20220406084208256

image-20220406081515462

image-20220406093214027

5.对多尺度融合的理解

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

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

相关文章

【erlang】入门篇

欢迎入坑Erlang,关键字: 函数式,高并发,容错,热更新,分布式 安装 erlang的安装非常简单,直接去官网下载编译好的二进制安装包即可。需要注意的是文件名格式是OTP_平台_版本.后缀,其…

2021天梯赛真题题解 L1-3 强迫症 (10 分) C语言版本 整数转换为字符串数组

L1-3 强迫症 (10 分) 题目描述 小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的出生年月都整理成 年年年年-月月 格式。对于…

一文说透容器跨主机网络

文章目录一、Flannel1、UDP2、VXLAN(1)VXLAN核心流程总结(2)VTEP隧道通信流程详解【1】封装 inner Ethernet header(依据VTEP IP查MAC)【2】设置VNI(标识数据包应该交给那个处理设备&#xff09…

AI绘画第二步,抄作业复现超赞的效果!

上一篇,讲了如何安装AI绘画软件,但是装完后发现生成效果很渣!而网上那些效果都很赞。真的是理想很丰满,现实很骨感。今天就是来聊聊如何抄作业,最大程度的还原那些超赞的效果。换一种说法就是,教大家如何使…

spark sql(一)源码分析sql解析流程

spark sql解析sql主要基于Catalyst框架,它将复杂的sql解析分为很多的阶段,每个阶段基本都有专属的工具类和扩展接口,最终实现将sql转换为DataFrame或RDD任务的功能。如果对于这些中间阶段和工具类没有一个整体概念性的了解,那阅读…

JUC并发编程与源码分析笔记11-Java对象内存布局和对象头

先从阿里及其它大厂面试题说起 你觉得目前面试,你还有那些方面理解的比较好,我没问到的,我说了juc和jvm以及同步锁机制那先说juc吧,说下aqs的大致流程cas自旋锁,是获取不到锁就一直自旋吗?cas和synchronized区别在哪…

国内的PMP考试通过率高达97%?

自认为是虚高,虽然国人在考试方面的确独树一帜的强,应该也没有这样夸张。 如果自学,大概是50%,如果有老师教,那大概是60%到80%,还是比较高的。 为什么自学那么低?除了自身的自制力的问题&…

【编程基础之Python】9、Python中的变量

【编程基础之Python】9、Python中的变量Python中的变量变量的定义和赋值变量的命名规范变量的类型变量的作用域变量的赋值特殊的变量删除变量总结Python中的变量 在Python中,变量是用来存储数据的一种方式。Python是一种动态类型语言,因此在声明变量时不…

JWT利用在ctfhub-easy_login拿到flag

目录 什么是JWT? jwt由三个部分组成:header.payload.signature header部分: payload部分:声明 signature部分: JWT验证过程: ctfhub-easy_login 目的:拿到flag 过程分析以及实操&#x…

阿里云轻量服务器--Docker--Nacos安装(使用外部Mysql数据存储)

前言:docker 安装nacos 如果不设置外部的mysql 默认使用内嵌的内嵌derby为数据源,这个时候如果,重新部署nacos 则会造成原有数据丢失情况; 1 默认安装的nacos 启动后使用的是内嵌的存储: 2 使用外部mysql 作为存储&a…

Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法

关于/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28’ not found出现报错,建议不要使用源码包去编译并升级。在下文有分享一个使用官方的Debian软件包去升级使用的方法。仅供参考! 环境 # uname -a Linux Ubuntu 5.4.0-144-generic #161~18.04.…

[1.4]计算机系统概述——操作系统的体系结构

第一章 计算机系统概述 操作系统的体系结构 大内核/单内核/宏内核微内核 通过之前的学习,我们知道计算机系统的层次结构是这样的。 但是操作系统的内部其实还可以再进一步地划分。 一部分是内核的功能,一部分是非内核的功能。 操作系统最核心的功能&…

计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

【云原生】Trace、Metrics、Logging 选型

背景分布式追踪的起源自从微服务的兴起开始,整个系统架构开始变得极为庞大和复杂,但是服务之间的调用关系,调用消耗时间等等信息却依然是半黑盒的状态。为了能够将调用的链路进行串联,将系统的各种指标数据展示出来以使得系统的链…

哈希->模拟实现+位图应用

致前行路上的人: 要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 目录 1. unordered系列关联式容器 1.1 unordered_map 1.1.1概念介绍: 1.1.2 unordered_map的接口说明 1.2unordered_set 1.3常见面试题oj…

到底什么才是幻读?

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

【NLP相关】基于现有的预训练模型使用领域语料二次预训练

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

《七》JavaScript 中的作用域、作用域链、执行上下文、执行上下文栈

JS 引擎会在执行所有代码之前,先在堆内存中创建一个全局对象(Global Object、GO),包含 String、Math、Date、parseInt() 等属性和方法。所有作用域都可以访问这个全局对象。 在浏览器中 Global Object 就是 Window 对象。 执行上…

不用机器学习不用大数据,给你讲通ChatGPT的深层原理

ChatGPT现在看来已经异常火爆了,很多人已经熟知,并且开始练习使用或者开始利用他开始实践了。但仍然有很多人在观望,在疑惑,今天狗哥不用那些高端大气的机器学习亦或是大数据还给你讲通ChatGPT深层到底是个啥逻辑。 目录 1. 聊家…

CV——dy83 接昨天的论文中DAM模块:压缩-激励的宽残差网络在图像分类中的应用

压缩-激励的宽残差网络在图像分类中的应用(ICIP 2019)1. INTRODUCTION2. PROPOSED METHODS2.1 总体框架2.2 通道的重要性3. EXPERIMENTS3.1 Datasets3.2 训练和测试的设置3.3 分类结果及分析4. CONCLUSIONSQUEEZE-AND-EXCITATION WIDE RESIDUAL NETWORKS…