目标检测-R-CNN

R-CNN在2014年被提出,算法流程可以概括如下:

  • 候选区域生成:利用选择性搜索(selective search)方法找出图片中可能存在目标的候选区域(region proposal)

  • CNN网络提取特征:对候选区域进行特征提取(可以使用AlexNet、VGG等网络)

  • 目标分类:训练分类模型(如svm等)识别目标物体和背景,对于每个类别都会有一个二元SVM

  • 目标定位:训练回归模型,预测每个被识别物体的边界框

综上所述,可以概括为选取候选区域-》提取特征-》分类模型-》回归模型。R-CNN的整体设计思路,与传统图像目标检测很相似,只是将传统特征提取(HOG等方法)变为了卷积网络提取。

候选区域

候选区域(region proposal)选择方法有很多,比如EdgeBox、MSER、MCG和SelectivSearch等,其中SelectivSearch是比较有代表性的一种。

SelectiveSearch方法通常一张图像生成2000~3000左右的候选区域,通过SelectiveSearch产生的区域数量远远少于滑动窗口的穷举法产生的候选区域。具体过程如下:

  • 使用语义分割的方法,将图片中的每一个像素作为一组,利用颜色、纹理和边界等多尺度综合方法,将像素相近的组合为一个像素组。

  • 继续将各个像素组合并,直到整张图片合并完毕。

为了保证候选区域划分更加合理,Selective Search进行了如下设计:

  1. 多样性策略

为了保证候选区域的准确性,SelectiveSearch主要通过颜色空间变换和距离计算方式进行优化。

  • 颜色空间变化:将颜色空间可以转换为八种色彩空间。

  • 距离计算:距离计算包括了颜色距离、纹理距离、尺度相似度衡量、形状重合度衡量和最终相似度衡量。

    • 颜色距离:1)每一个区域用三通道的颜色直方图表示,每个颜色通道设定25bins的直方图,这样每个区域就有3*25=75维的向量;2)对75维进行L1-normal归一化,每个颜色通道累加和为1,三个通道累计和为3;3)如果区域i和区域j直方图一样,则颜色相似度为3;4)如果区域i和区域j直方图差别较大,由于累加取两个区域bin的最小值,因为差距越大,累加和越小,相似度越小

    • 纹理距离:1)论文采用SIFT方法,将每个颜色通道的8个方向计算方差为1的高斯微分;2)用L1-Normal

          对每个颜色通道的每个方向的10bins的直方图,得到8*10*3=240维向量;3)两个区域相似度越高,纹理距离越大,反之越小

    • 尺度相似度衡量:通过颜色距离和纹理距离进行合并,容易使得合并后的区域不断吞并周围的区域,导致多尺度只应用在那个局部,不是全局的多尺度。尺度相似度衡量,就是给小区域更高的权重,保证每个位置都是多尺度在合并

    • 区域重合度衡量:区域重合度主要是为了衡量两个区域的“吻合”程度,不能合并后出现断崖的区域。

    • 最终相似度衡量:将上述四种衡量方式加权合并,得到最终相似度衡量数值

特征提取

利用预训练模型(AlexNet、VGG、GoogLeNet、ResNet等)对候选区域进行特征提取,候选区域提取的图像尺寸大小不一,当时特征提取的网络大多需要将输入图像的大小进行统一。

以AlexNet网络为例,输入图像大小为227*227,通过CNN对候选区域进行特征提取,2000个候选区域组成2000*4096特征矩阵。

特征提取阶段主要涉及以下几个步骤:

  • 设计网络结构

网络结构可以有很多参照,例如AlexNet、VGG、GoogLeNet、ResNet等均可进行特征提取。

  • 有监督训练

相比于随机的初始化网络参数,使用预训练模型可以更快的让模型收敛,取得更好的效果。

  • fine-tune

为了使预训练模型更加适用于当前场景,需要对模型进行再训练,一般仅改变末基层网络参数或结构。

其中,特征提取需要注意以下几点:

  • 全连接层的输入数据尺寸都是固定的,因此在进行特征提取前,需要将输入图像进行裁剪或形变转为固定尺寸

如何裁剪更合理?

论文中尝试了3种裁剪方式,图中A是我们的候选区域,1)将bounding box扩展为正方形,然后进行裁剪,如果延伸到了图片外,使用bounding box中的颜色均值进行替代,如B)所示;2)先将bounding box裁剪出来,然后用bounding box中的颜色均值填充为裁剪的大小,如C)所示;3)直接将原始图像形变为需要的形状,如D。

什么是预训练模型(pre-train)?

预训练模型是指在其他训练集上已经训练好的初始模型,可以将此类模型迁移到现有问题,公用层的参数保持与原本相同,仅对部分网络层进行微调,也就是fine-tune(在训练)

为什么不在fine-tune后进行softmax分类,反而又进行svm分类器训练?

先上结论,论文中也进行添加softmax尝试,发现效果要低于svm。cnn模型相对比较容易过拟合,训练时需要较多的样本,因此在cnn训练阶段,标注是相对宽松的,一个bounding box可能仅包含了物体的一部分,也会被当做正样本。但在SVM阶段,需要bounding box将整个物体都包含进来才算正样本,这样能训练的数据量就很少,而svm在小样本上训练效果还可以,所以最终分类效果更好一些。

目标分类

假设需要检测的类别有N个,则需要训练N个分类器(常见SVM等),对每个图片中的候选区域的特征向量进行识别,假设有2000个候选区域,则产生[2000, N]的得分矩阵。

对2000*N的矩阵中每一列进行非极大值抑制(NMS),剔除重叠建议框,得到该类中得分高相对较高的建议框。

NMS是如何工作的?

假设在识别动物任务中,一张图片中一个猫有5个矩形框,矩形框中是猫的概率从低到高是a、b、c、d、e。

  • 将矩形框分别a、b、c、d与概率最大的e进行判断,计算IOU是否大于某个阈值

  • 假设a、b分别与e的IOU值都大于阈值,则丢弃a、b,e成为第一个被保留的矩形框

  • 从剩余的矩形框c、d中选择概率最大的d,计算c与d的IOU是否大于某个阈值,大于则保留d,丢弃c;小于则保留或丢弃c

  • 按照上述步骤进行重叠建议框剔除

IOU的阈值如何确定?

论文中尝试了0~0.5,在0.3是效果更好一些,小于0.3被标记为负样本;不同数据集阈值大小并不固定,需要进行尝试。

目标定位

Bounding Box Regression(边框回归):SelectiveSearch方法获得的区域相对粗略,使用回归模型对给定的区域结果进行预测得到一个更加准确的位置。

如图所示,黄色框是预测的Region Proposal,希望通过回归算法让黄色框更加接近真实的绿色框,即Ground Truth。

为什么回归可以用来目标定位?

当输入的Proposal和Ground Truth相差较小时(RCNN设置为IOU>0.6),认为此时是一种线性变换,此时可以用线性回归来对窗口进行微调,当IOU较小时,此时可能使用线性回归效果不理想。

RCNN存在一下问题:

  • 候选区域的提取,需要较多的磁盘空间来计算与存储;

  • 传统CNN等一些网络,要求输入图像尺寸统一,因此需要对输入图像做形变,可能会导致部分信息缺失

  • 大量的ProposalRegion存在重叠部分,每个ProposalRegion都需要通过主干网络(CNN等)进行计算,因此有很多重复性的计算

  • CNN网络、分类器、回归模型这三个流程,导致整体计算时间长、参数多等问题,训练流程不够迅捷。

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

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

相关文章

Sigrity SystemSI仿真分析教程文件路径

为了方便读者能够快速上手和学会Sigrity SystemSI 的功能,将Sigrity SystemSI仿真分析教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171488?spm1001.2014.3001.5503

harmony UI组件学习(1)

Image 图片组件 string格式,通常用来加载网络图片,需要申请网络访问权限:ohos.permission.INTERNET Image(https://xxx.png) PixelMap格式,可以加载像素图,常用在图片编辑中 Image(pixelMapobject) Resource格式,加…

【Linux进程】进程间通信(共享内存、消息队列、信号量)

目录 前言 1. System V IPC 2. 共享内存 系统调用接口 shmget ftok shmat shmdt shmctl 共享内存的读写 共享内存的描述对象 3. 消息队列 msgget msgsnd msgctl 消息队列描述对象 4. 信号量 系统调用接口 semget semctl 信号量描述对象 5. 系统层面IPC资源 6.…

模型 八角行为分析法(行为激发)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。激发行为的八大心理驱动力模型。 1 八角行为分析法的应用 1.1 支付宝蚂蚁森林 支付宝的蚂蚁森林是一个旨在鼓励用户参与环保活动的产品。用户通过日常的低碳行为(如步行、线上支付等&…

【数据结构练习题】链表与LinkedList

顺序表与链表LinkedList 选择题链表面试题1. 删除链表中等于给定值 val 的所有节点。2. 反转一个单链表。3. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。4. 输入一个链表,输出该链…

网安瞭望台第16期

国内外要闻 Apache Struts 文件上传漏洞(CVE - 2024 - 53677) 近日,Apache Struts 被发现存在文件上传漏洞(CVE - 2024 - 53677),安恒 CERT 评级为 2 级,CVSS3.1 评分为 8.1。 漏洞危害&#x…

基于python使用UDP协议对飞秋进行通讯—DDOS

基于飞秋的信息传输 声明:笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 老规矩,封面在文末! 飞秋介绍 (…

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…

LeetCode:222.完全二叉树节点的数量

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:222.完全二叉树节点的数量 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二…

MaxKB基于大语言模型和 RAG的开源知识库问答系统的快速部署教程

1 部署要求 1.1 服务器配置 部署服务器要求: 操作系统:Ubuntu 22.04 / CentOS 7.6 64 位系统CPU/内存:4C/8GB 以上磁盘空间:100GB 1.2 端口要求 在线部署MaxKB需要开通的访问端口说明如下: 端口作用说明22SSH安装…

基于指纹图像的数据隐藏和提取matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频&#xff09…

kubeadm一键部署K8S 集群架构

kubeadm一键部署K8S 集群架构(centos7) https://www.k8src.cn/ https://kubernetes.io/zh-cn/docs/home/ https://blog.csdn.net/m0_58709145/article/details/140128179 https://blog.csdn.net/jiaqijiaqi666/article/details/129745828 Kubeadm init报错[ERROR CRI]: contai…

直流电机驱动电路分享(HIP4082)

一、原理图分享 注意:M2_INA、M2_INB可直接接3.3V电平信号。 二、芯片介绍 1、HIP4082 HIP4082是一款高频驱动器,专为半桥和全桥应用而设计。它具有四个高/低侧驱动输出,可以提供高达100V的驱动电压。HIP4082还具有逻辑级输入和反馈输入&a…

企业版 YashanDB 23.2.4 分布式集群 数据库一主二备集群安装部署指南

一、概述 1.1 文档目标 本部分旨在为技术人员提供崖山数据库企业版 23.2 在 CentOS 7 x86_64 操作系统上进行安装部署操作的全面且清晰的指引。通过对系统架构、集群拓扑和部署需求的精确阐述,使读者能够在安装过程开始前形成系统的概念架构,为后续的详…

性能】JDK和Jmeter的安装与配置

一、JDK环境配置 1. 下载JDK 官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包,下载后安装,安装中记录JDK安装的地址,之后一直点击下一…

Mysql之YUM安装时GPG 密钥报错问题处理

一、背景说明 使用YUM安装mysql5.7的时候报错,报错信息提示未安装公钥。博主查看/etc/yum.repos.d/mysql-community.repo配置文件中关于公钥的配置,确实启用了公钥验证,博主再排查过程中还是走了一些弯路,最终顺利解决了&#xff…

启动报错java.lang.NoClassDefFoundError: ch/qos/logback/core/status/WarnStatus

报错信息图片 日志: Exception in thread "Quartz Scheduler [scheduler]" java.lang.NoClassDefFoundError: ch/qos/logback/core/status/WarnStatus先说我自己遇到的问题,我们项目在web设置了自定义的log输出路径,多了一个 / 去…

Elasticsearch-分词器详解

什么是分词器 1、分词器介绍 对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。 常用的中文分词器有ik按照切词的粒度粗细又分为:ik_max_word和ik_smart&…

Docker 入门:如何使用 Docker 容器化 AI 项目(一)

引言 在人工智能(AI)项目的开发和部署过程中,环境配置和依赖管理往往是开发者遇到的挑战之一。开发者通常需要在不同的机器上运行同样的代码,确保每个人使用的环境一致,才能避免 “在我的机器上可以运行”的尴尬问题。…

ExcelVBA编程输出ColorIndex与对应颜色色谱

标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56,打算分4纵列输出,标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA(Visual Basic for Applications)中&#xff…