《目标检测》R-CNN网络基础(RCNN,Fast-RCNN)
文章目录
- 1.Overfeat模型
- 2.RCNN网络
- 2.1 算法流程
- 2.1.1 候选区域的生成(了解,已经不再使用了)
- 2.1.2 CNN网络提取特征
- 2.1.3 目标分类(SVM)
- 2.1.4 目标回归(线性回归修正坐标)
- 2.1.5 预测过程
- 2.2 算法总结
- 3.Fast RCNN模型
- 3.1 算法流程
- 3.1.1 ROI Pooling
- 3.1.2 ⽬标分类和回归
- 3.2 模型训练
- 3.3 模型预测
- 3.4 模型总结
学习目标:
- 了解Overfeat模型的移动窗口方法
- 了解RCNN目标检测的思想
- 了解fastRCNN目标检测的思想
- 知道多任务损失
1.Overfeat模型
Overfeat⽅法使⽤滑动窗⼝进⾏⽬标检测,也就是使⽤滑动窗⼝和神经⽹络来检测⽬标。滑动窗⼝使⽤ 固定宽度和高度 的矩形区域,在图像上“滑动”,并将扫描结果送⼊到神经⽹络中进⾏分类和回归。
例如要检测汽⻋,就使⽤下图中红⾊滑动窗⼝进⾏扫描,将所有的扫描结果送⼊⽹络中进⾏分类和回归,得到最终的汽⻋的检测结果。
这种⽅法类似⼀种暴⼒穷举的⽅式,会消耗⼤量的计算⼒,并且由于窗⼝⼤⼩问题可能会造成效果不准确。
2.RCNN网络
2014年提出R-CNN⽹络,该⽹络不再使⽤暴⼒穷举的⽅法,⽽是使⽤候选区域方法(region proposal method)创建⽬标检测的区域来完成⽬标检测的任务,R-CNN是以深度神经⽹络为基础的⽬标检测的模型 ,以R-CNN为基点,后续的Fast R-CNN、Faster R-CNN模型都延续了这种⽬标检测思路。
2.1 算法流程
RCNN的流程如下图所示:
Step:
- 候选区域⽣成:使⽤选择性搜索(Selective Search)的⽅法找出图⽚中可能存在⽬标的侯选区域
- CNN⽹络提取特征:选取预训练卷积神经⽹⽹络(AlexNet或VGG)⽤于进⾏特征提取。
- ⽬标分类:训练⽀持向量机(SVM)来辨别⽬标物体和背景,对每个类别,都要训练⼀个⼆元SVM。
- ⽬标定位:训练⼀个线性回归模型,为每个辨识到的物体⽣成更精确的边界框。
2.1.1 候选区域的生成(了解,已经不再使用了)
在选择性搜索(SelectiveSearch,SS)中,使⽤语义分割的⽅法,它将颜⾊、边界、纹理等信息作为合并条件,采⽤多尺度的综合⽅法,将图像
在像素级上划分出⼀系列的区域,这些区域要远远少于传统的滑动窗⼝的穷举法产⽣的候选区域。
SelectiveSearch在⼀张图⽚上提取出来约2000个侯选区域,需要注意的是这些候选区域的⻓宽不固定。 ⽽使⽤CNN提取候选区域的特征向量,
需要接受固定⻓度的输⼊,所以需要对候选区域做⼀些尺⼨上的修改。
根据图像像素点的相似性,分割成不同的子区域,获取外包矩形。
2.1.2 CNN网络提取特征
采⽤预训练模型(AlexNet或VGG)在⽣成的候选区域上进⾏特征提取,将提取好的特征保存在磁盘中,⽤于后续步骤的分类和回归。
- 全连接层的输⼊数据的尺⼨是固定的,因此在将候选区域送⼊CNN⽹络中时,需进⾏裁剪或变形为固定的尺⼨,在进⾏特征提取。
- 预训练模型在ImageNet数据集上获得,最后的全连接层是1000,在这⾥我们需要将其改为N+1(N为⽬标类别的数⽬,例如VOC数据集中N=20,coco数据集中N=80,1是加⼀个背景)后,进⾏微调即可。
- 利⽤微调后的CNN⽹络,提取每⼀个候选区域的特征,获取⼀个4096维的特征,⼀幅图像就是2000x4096维特征存储到磁盘中。
2.1.3 目标分类(SVM)
SVM是一个二分类分类器,实现多分类时需要使用多个SVM来完成,用来判断每个候选区域的类别。
利⽤微调后的CNN⽹络,提取每⼀个候选区域的特征,获取⼀个4096维的特征,⼀幅图像就是2000x4096维特征存储到磁盘中。
对于N个类别的检测任务,需要训练N(⽬标类别数⽬)个SVM分类器,对候选区域的特征向量(4096维)进行二分类,判断其是某⼀类别的⽬标,还是背景来完成⽬标分类。
2.1.4 目标回归(线性回归修正坐标)
通过选择性搜索获取的⽬标位置不是⾮常的准确,实验证明,训练⼀个线性回归模型在给定的候选区域的结果上去预测⼀个新的检测窗⼝,能够获得更精确的位置。修正过程如下图所示:
通过训练⼀个回归器来对候选区域的范围进⾏⼀个调整,这些候选区域最开始只是⽤选择性搜索的⽅法粗略得到的,通过调整之后得到更精确的位置,如下所示:
红色框表示候选区域生成的结果(SS),绿色的时标注框(真实结果),蓝色框时经过线性回归模型(wx+b变换)后的框,我们的目的是修正候选区域(绿色),不断靠近真实框(绿色)。
目的:训练一个线性回归模型,用这个模型修正这个候选区域,得到一个更精确的结果。
2.1.5 预测过程
使⽤选择性搜索的⽅法从⼀张图⽚中提取2000个候选区域,将每个区域送⼊CNN⽹络中进⾏特征提取,然后送⼊到SVM中进⾏分类,并使⽤候选
框回归器,计算出每个候选区域的位置。 候选区域较多,有2000个,需要剔除掉部分检测结果。 针对每个类,通过计算IOU,采取⾮最⼤值抑制
NMS的⽅法,保留⽐较好的检测结果。
2.2 算法总结
- 训练阶段多,训练耗时: 微调CNN⽹络+训练SVM+训练边框回归器。
- 预测速度慢: 使⽤GPU, VGG16模型处理⼀张图像需要47s。
- 占⽤磁盘空间⼤:5000张图像产⽣⼏百G的特征⽂件。
- 数据的形状变化:候选区域要经过缩放来固定⼤⼩,⽆法保证⽬标的不变形
3.Fast RCNN模型
考虑到R-CNN存在的问题,2015年提出了⼀个改善模型:Fast R-CNN。相⽐于R-CNN, Fast R-CNN主要在以下三个⽅⾯进⾏了改进:
- 提⾼训练和预测的速度:R-CNN⾸先从测试图中提取2000个候选区域,然后将这2000个候选区域分别输⼊到预训练好的CNN中提取特征。由于候选区域有⼤量的重叠,这种提取特征的⽅法,就会重复的计算重叠区域的特征。在Fast-RCNN中,将整张图输⼊到CNN中提取特征,将候选区域映射到特征图上,这样就避免了对图像区域进⾏重复处理,提⾼效率减少时间。
- 不需要额外的空间保存CNN⽹络提取的特征向量:RCNN中需要将提取到的特征保存下来,⽤于为每个类训练单独的SVM分类器和边框回归器。在Fast-RCNN中,将类别判断和边框回归统⼀使⽤CNN实现,不需要在额外的空间存储特征。
- 不在直接对候选区域进⾏缩放:RCNN中需要对候选区域进⾏缩放送⼊CNN中进⾏特征提取,在Fast-RCNN中使⽤ROIpooling的⽅法进⾏尺⼨的调整。
3.1 算法流程
Fast-RCNN的流程如下图所示:
Step:
- 候选区域⽣成:使⽤选择性搜索(Selective Search)的⽅法找出图⽚中可能存在⽬标的侯选区域,只需要候选区域的位置信息
- CNN⽹络特征提取:将整张图像输⼊到CNN⽹络中,得到整副图的特征图,并将上⼀步获取的候选区域位置从原图映射到该特征图上
- ROIPooling: 对于每个特征图上候选框,RoI pooling层从特征图中提取固定⻓度的特征向量每个特征向量被送⼊⼀系列全连接(fc)层中。
- ⽬标检测:分两部分完成,⼀个输出各类别加上1个背景类别的Softmax概率估计,另⼀个为各类别的每⼀个类别输出四个实数值,来确定⽬标的位置信息。
第一步是一样的,不在赘述。但是第二步在CNN网络提取时,我们是把整幅图像送到预训练模型中进行特征提取的。
3.1.1 ROI Pooling
候选区域从原图映射到特征图中后,进⾏ROI Pooling的计算,如下图所示:
Step:
- 将候选框区域映射到特征图中得到对应的候选框
- 对每一个特征图中的候选框进行POI Pooling(将候选框划分成HW的子网格,H和W都是超参数,在每个子网格中取最大值,之后我们就获取了HW的特征图,再送入到网络中)
ROI Pooling层使⽤最⼤池化将输⼊的特征图中的任意区域(候选区域对应的区域)内的特征转化为固定的𝐻×𝑊的特征图,其中𝐻和𝑊是超参数。
对于任意输⼊的ℎ×𝑤的候选区域,将其分割为𝐻×𝑊的⼦⽹格,每个⼦⽹格的⼤⼩为:(h/H) x (w/W),取每个⼦⽹格中的最⼤值,送⼊后续⽹络中进⾏处理。
使⽤ROI Pooling层替换预训练⽹络中最后的池化层,并将并将超参𝐻,𝑊设置为和⽹络第⼀个全连接兼容的值,例如VGG16,设𝐻=𝑊=7。
3.1.2 ⽬标分类和回归
原⽹络的最后⼀个全连接层替换为两个同级层:K+1个类别的SoftMax分类层和边框的回归层。
3.2 模型训练
R-CNN中的特征提取和检测部分是分开进⾏的,Fast R-CNN提出⼀个⾼效的训练⽅法:多任务训练。
Fast R-CNN有两种输出:
- ⼀部分输出在K+1个类别上的离散概率分布(每个候选区域), p = ( p 0 , p 1 , . . . , p k ) p=(p0,p1,...,pk) p=(p0,p1,...,pk)。通常,通过全连接层的K+1个输出上的Softmax来计算概率值。
- 另⼀部分输出对于由K个类别中的每⼀个检测框回归偏移, t k = ( t x k , t y k , t w k , t h k ) t^{k}=(t{x}^{k},t{y}^{k},t{w}^{k},t{h}^{k}) tk=(txk,tyk,twk,thk)。其中 t k t_k tk指定相对于候选框的尺度不变转换和对数空间⾼度/宽度移位。
将上⾯的两个任务的损失函数放在⼀起:
p0表示的是背景,所以我们只计算u>=1的。
联合训练fast-RCNN⽹络。具体的我们在后续给⼤家进⾏介绍。
3.3 模型预测
Fast-RCNN的⼯作流程描述如下:
输入的图像
图像被送⼊到卷积⽹络进⾏特征提取,将通过选择性搜索获取的候选区域映射到特征图中:
在特征图上Rol中应⽤RoIPooling,获取尺⼨相同的特征向量
将这些区域传递到全连接的⽹络中进⾏分类和回归,得到⽬标检测的结果。
3.4 模型总结
Fast R-CNN是对R-CNN模型的⼀种改进:
- CNN⽹络不再对每个候选区域进⾏特征提取,⽽是直接对整张图像进⾏特征提取,这样减少了很多重复计算。
- ⽤ROI pooling进⾏特征的尺⼨变换,来满⾜FC全连接层对输⼊数据尺度的要求。
- 将⽬标的回归和分类统⼀在⼀个⽹络中,使⽤FC+softmax进⾏⽬标分类,使⽤FC Layer进⾏⽬标框的回归。
在Fast R-CNN中使⽤的⽬标检测识别⽹络,在速度和精度上都有了不错的结果。不⾜的是,其候选区域提取⽅法耗时较⻓,⽽且和⽬标检测⽹络
是分离的,并不是端到端的,在2016年⼜提出了Faster-RCNN模型⽤于⽬标检测。
相关文章:

《目标检测》R-CNN网络基础(RCNN,Fast-RCNN)
文章目录 1.Overfeat模型2.RCNN网络2.1 算法流程2.1.1 候选区域的生成(了解,已经不再使用了)2.1.2 CNN网络提取特征2.1.3 目标分类(SVM)2.1.4 目标回归(线性回归修正坐标)2.1.5 预测过程 2.2 算…...

iOS中的定位实现(逆地理编码)及Info.plist位置权限详解
引言 在现代移动应用开发中,位置服务已经成为不可或缺的一部分。无论是地图导航、社交分享,还是基于位置的个性化推荐,位置数据都为用户提供了更加丰富和智能的体验。然而,随着用户隐私保护的不断加强,iOS对位置权限的…...

【从零开始的LeetCode-算法】3270. 求出数字答案
给你三个 正 整数 num1 ,num2 和 num3 。 数字 num1 ,num2 和 num3 的数字答案 key 是一个四位数,定义如下: 一开始,如果有数字 少于 四位数,给它补 前导 0 。答案 key 的第 i 个数位(1 < …...

Web认证机制 Cookie、Token、Session、JWT、OAuth2 解析
标题 一、Cookie二、Session三、Token四、JWTSSO(单点登录) 五、OAuth2如何设计权限系统区别总结 Cookie、Token、Session 和 JWT 都是在 Web 开发中常用的身份验证和授权技术,它们各有优缺点,适用于不同的场景。 Cookie 简单易用…...

Docker 基础命令介绍和常见报错解决
介绍一些 docker 可能用到的基础命令,并解决三个常见报错: 权限被拒绝(Permission Denied)无法连接到 Docker 仓库(Timeout Exceeded)磁盘空间不足(No Space Left on Device) 命令以…...

如何轻松导出所有 WordPress URL 为纯文本格式
作为一名多年的 WordPress 使用者,我深知管理一个网站的复杂性。从迁移网站、设置重定向到整理内容结构,每一步都需要精细处理。而拥有所有 URL 的清单,不仅能让这些工作变得更加简单,还能为后续的管理提供极大的便利。其实&#…...

【进程概念精讲】
Susan,在那命运月台前面,再上车,春天开始落叶.................................................................. 文章目录 前言 一、【认识进程】 1、【进程基本概念引入】 2、【进程的描述与组织——进程控制块(PCB)与进程…...

帽子矩阵--记录
帽子矩阵 H是一个重要的统计工具,用于评估数据点对模型拟合结果的影响。通过计算帽子矩阵的对角线元素(杠杆值),我们可以识别出高杠杆点,这些点对模型的影响较大,可能需要特别关注。...

MySQL深入:B+树的演化、索引和索引结构
提示:内容是读《MySQL技术内幕:InnoDB存储引擎》,笔记摘要 文章目录 二叉查找树平衡二叉树(AVL) B树(BTree)B树(BTree)InnoDB B树索引索引结构(InnoDB B树)B树存放的数据量 二叉查找树 在二叉查找树中,左子…...
axios 实现 无感刷新方案
实现思路 首次登录前端通过接口获取到两个 token;分别是 accessToken、refreshToken; accessToken:正常请求需要传递的 token ;refreshToken:当某个请求 401 ,就可以通过 refreshToken 获取到新的 accessToken 特殊场…...

Python 三种方式实现自动化任务
在这篇文章中,我们将介绍一些用Python实现机器人过程自动化的包。机器人流程自动化(Robotic process automation,简称RPA)是指将鼠标点击和键盘按压自动化的过程,即模拟人类用户的操作。RPA用于各种应用程序࿰…...
新型创业模式:退休创业。没有工资,不用投资,有时间就干,不强制做,赚钱按贡献分。
这种“退休创业”的创业模式具有独特的吸引力和灵活性,适合那些已退休但希望继续贡献社会价值、赚取额外收入且无需承担太多责任的群体。以下是一个详细的设计思路: 模式概述 目标人群:退休人员,具有一定技能或经验,但…...
Android 项目依赖库无法找到的解决方案
目录 错误信息解析 解决方案 1. 检查依赖版本 2. 检查 Maven 仓库配置 3. 强制刷新 Gradle 缓存 4. 检查网络连接 5. 手动下载依赖 总结 相关推荐 最近,我在编译一个 Android 老项目时遇到了一个问题,错误信息显示无法找到 com.gyf.immersionba…...

在Node.js中如何使用TypeScript
第一步:创建一个Node.js项目的package.json文件 npm init -y第二步:添加TypeScript、添加node.d.ts npm install typescript -D npm install types/node -D第三步:初始化一个tsconfig.json文件 npx tsc --init --rootDir src --outDir lib…...

链表两数加python
一、问题描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个…...

免费的可以薅羊毛的cloudflare反向代理教程
cloudflare-reverse-proxy 项目代码: https://github.com/EASTCATV/cloudflare-reverse-proxy 本项目是cloudflare反向代理。在cloudflare网站中新建worker,把worker.js文件中的内容复制进去即可使用。 使用方法为在任意url前面加上https://你的域名/proxy/ 即可…...

【每日刷题】Day155
【每日刷题】Day155 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCR 108. 单词接龙 - 力扣(LeetCode) 2. 675. 为高尔夫球比赛砍树 - 力扣(…...

EXCEL延迟退休公式
如图: A B为手工输入 C2EOMONTH(A2,B2*12) D2EOMONTH(C2,IF(C2>DATEVALUE("2025-1-1"),INT((DATEDIF(DATEVALUE("2025-1-1"),C2,"m")4)/4),0)) E2EOMONTH(A2,B2*12IF(EOMONTH(A2,B2*12)>DATEVALUE("2025-1-1"),INT(…...

开源对象存储新选择:在Docker上部署MinIO并实现远程管理
文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器,可以在各种环境中运行,例如本地、Docker容器、Kubernetes集群等。它兼…...
Spring Cloud生态圈
目录 Spring Cloud生态圈 核心组件 其他组件 总结 Spring Cloud Alibaba生态圈 核心组件 其他特性 Spring Cloud生态圈 Spring Cloud生态圈是一个为微服务架构提供全方位支持的解决方案集合。它涵盖了多个关键组件和服务,旨在帮助开发者快速构建、部署和管理…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...