当前位置: 首页 > news >正文

【CV 目标检测】②R-CNN模型

二、R-CNN网络基础

2.R-CNN模型

2014年提出R-CNN!网络,该网络不再使用暴力穷举的方法,而是使用候选区域方法(region proposal method)创建目标检测的区域来完成目标检测的任务,R-CNN是以深度神经网络为基础的目标检测的模型,以R-CNN为基点,后续的Fast R-CNN,Fast R-CNN模型都延续了这种目标检测思路

(1)算法流程

步骤:

  1. 候选区域生成:使用选择性搜索(Selective Search,SS)的方法找出图片中可能存在目标的候选区域
  2. CNN网络提取特征:选取预训练卷积神经网络(AlexNet或VGG)用于进行特征提取
  3. 目标分类:训练支持向量机(SVM)来辨别目标物体和背景,对每个类别,都要训练一个二元SVM。
  4. 目标定位:训练一个线性回归模型(修正坐标),为每个辨识到物体生成更精确的边界框

(1)候选区域生成

选择性搜索中,使用语义分割的方法,它将颜色,边界,纹理等信息作为合并条件,采用多尺度的综合方法,将图像在像素级上划分出一系列的区域,这些区域要远少于传统的滑动窗口的穷举法产生的候选区域。(根据图像像素点的相似性,分成不同的子区域,获取外包矩形)

SelectiveSearch在一张图片上提取出来约2000个候选区域,需要注意的是这些候选区域的长宽不固定。而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。

(2)CNN网络提取特征

采用预训练模型(AlexNet或VGG)在生成的候选区域上进行特征提取,将提取好的特征保存在磁盘中,用于后续步骤的分类和回归

  1. 全连接层的输入数据的尺寸是固定的,因此在将候选区域送入CNN网络时,需进行裁剪或变形为固定的尺寸,再进行特征提取。
  2. 预训练模型在ImageNet数据集上获得,最后的全连接层是1000,在这里我们需要将其改为N+1(N为目标类别的数目,例如VOC数据集中N = 20,COCO数据集中N= 80,1是加一个背景)后,进行微调即可。

VGG16

  1. 利用微调后的CNN网络,提取每一个候选区域的特征,获取一个4096维的特征(将最后的全连接层去掉,该4096维特征即表示某一个候选区域的结果),一幅图像就是2000x4096维特征存储到磁盘中。(有2000个候选区域)

(3)目标分类(SVM)

对于N个类别的检测任务,需要训练N(目标类别数目)个SVM分类器,对候选区域的特征向量(4096维)进行二分类,判断其是某一类别的目标,还是背景来完成目标分类

(4)目标定位

通过选择性搜索获取的目标位置不是非常准确,实验证明,训练一个线性回归模型在给定的候选区域的结果上去预测一个新的检测窗口,能够获得更精确的位置。修正过程如下图所示:

通过训练一个回归器来对候选区域的范围进行一个调整,这些候选区域最开始只是用选择性搜索的方法粗略得到的,通过调整之后得到更精确的位置

(5)预测过程

使用选择性搜索的方法从一张图片中提取2000个候选区域,将每个区域送入CNN网络中进行特征提取,然后保存至磁盘中,然后送入到SVM中进行分类,并使用候选框回归器,计算每个候选区域的位置。候选区域较多,有2000个,需要剔除掉部分检测结果。针对每个类,通过计算IOU,采取非极大值抑制NMS方法,保留比较好的检测结果。

算法总结

  1. 训练阶段多,训练耗时:微调CNN网络+训练SVM+训练边框回归器
  2. 预测速度慢:使用GPU,VGG16模型处理一张图像需要47s
  3. 占用磁盘空间大:5000张图像产生几百G的特征文件。
  4. 数据的形状变化:候选区域要经过缩放来固定大小,无法保证目标的不变形
http://www.xdnf.cn/news/1300825.html

相关文章:

  • 【Redis】分布式系统的演化过程
  • MyBatis的基本用法和配置方式
  • Highcharts Dashboards | 打造企业级数据仪表板:从图表到数据驾驶舱
  • 全球电商业财一体化:让出海品牌实现“看得见的增长“
  • demo 通讯录 + 城市选择器 (字母索引左右联动 ListItemGroup+AlphabetIndexer)笔记
  • Nginx反向代理与缓存实现
  • 人工智能与社会治理:从工具到生态的范式重构
  • Kafka生产者——提高生产者吞吐量
  • 切换VSCODE 中的默认 shell
  • GitHub 上 Star 数量前 18 的开源 AI Agent 项目
  • 制造装配、仓储搬运、快递装卸皆适配!MinkTec 弯曲形变传感器助力,让人体工学改变劳动生活
  • Vue3从入门到精通: 4.5 数据持久化与同步策略深度解析
  • Elasticsearch 深分页问题
  • 计算图的力量:从 PyTorch 动态图到 TensorFlow 静态图的全景与实战
  • Nginx蜘蛛请求智能分流:精准识别爬虫并转发SEO渲染服务
  • 【Java EE进阶 --- SpringBoot】初识Spring(创建SpringBoot项目)
  • iceberg 底层存储HDFS与juiceFS的区别
  • nflsoi 8.14 题解
  • 集成电路学习:什么是Video Processing视频处理
  • 《量子雷达》第4章 量子雷达的检测与估计 预习2025.8.14
  • ATAM:基于场景的软件架构权衡分析法
  • 解剖HashMap的put <三> JDK1.8
  • Linux入门指南:基础开发工具---yum/apt
  • MacOS 系统计算机专业好用工具安装
  • P5967 [POI 2016] Korale 题解
  • Java 8 新特性介绍
  • 【Docker】安装kafka案例
  • 【深度学习】深度学习的四个核心步骤:从房价预测看机器学习本质
  • 《Leetcode》-面试题-hot100-动态规划
  • 【无标题】卷轴屏手机前瞻:三星/京东方柔性屏耐久性测试进展