R-CNN系列目标检测算法对比

news2024/9/23 13:26:21

引言

对比了R-CNN,Fast R-CNN,Faster R-CNN,Mask R-CNN目标检测算法的发展过程与优缺点。

R-CNN

R-CNN是第一个成功第将深度学习应用到目标检测的算法。后面的Fast R-CNN,Faster R-CNN都是建立在R-CNN的基础上的。

R-CNN的检测思路是采用提取矿,对每个提取矿提取特征,图像分类,非极大值一直的四个步骤进行的。
步骤:

  • 在数据集上训练CNN。R-CNN的论文中使用的CNN网络是AlexNet,数据集是ImageNet。
  • 在目标检测的数据集上,对训练好的CNN做微调。
  • 使用Selective Search搜索候选区域,统一使用微调后的CNN对这些区域提取特征,并将提取额特征存储起来。
  • 使用存储起来的特征,训练SVM分类器。

这里可以看到这里的CNN主要是用来进行特征提取的,在替代了传统图像处理方法中特征提取,如SIFT, HOG等。

RCNN

R-CNN的缺点是计算量大,在一张图片中,Selective Search得到的区域通常是1000个以上,也就是需要1000次CNN推理过程以及SVM的分类过程,还需要将候选区域的特征保存下来,也占用存储空间。

Fast R-CNN

Fast R-CNN是在R-CNN的基础上进行优化的,通过对整张图片进行卷积计算得到一张大的特征图,使用Selective Search的方式获得候选框,然后将候选框映射到特征图上,获取候选框区域的特征图。使用ROI池化将候选框的特征都映射到相同大小的特征量,然后继续卷积计算分两个分支输出类别和框回归。

Fast

步骤:

  • 图像输入CNN网络获取一张大的特征图
  • 使用Selective Search搜索候选区域,并截取特征图。
  • 截取的特征图使用ROI Pooling转换到固定大小的特征量
  • 使用特征量进行类别分类和框回归

Fast这个词的Fast在于,在R-CNN中每个候选区域都要计算特征,但是多个候选框是重复的,所以计算特征也是有很多重复。在Fast R-CNN中只需要对图像进行一次CNN获取一次特征图,然后在特征图中截取,用于表示候选框的特征图。

同时进行框回归的时候,还将Seletive Search的框进一步优化了。

ROI Pooling

ROI Pooling的作用是将不同大小的候选区域特征处理成相同的维度。
处理方式是将特征图划分成块,然后在块内进行全局最大池化得到的结果只与特征图的通道数相关,而和大小无关。

在Fast R-CNN中的ROI Pooling是空间金字塔池化(Spatial Pyramid Pooling, SPP)的形式做的优化结果。如输入的 w × h × c w\times h \times c w×h×c的特征图,将特征图划分为 4 × 4 4\times 4 4×4 2 × 2 2\times 2 2×2以及 1 × 1 1\times 1 1×1的【块】。然后对每个【块】的每个通道取最大值(也就是在每个块进行全局最大池化),分别得到 4 × 4 × c 4\times 4\times c 4×4×c 2 × 2 × c 2\times 2\times c 2×2×c 1 × 1 × c 1\times 1\times c 1×1×c的特征。

ROI Pooling

然后将三个层次的特征展开后放到一起,就可以得到 21 c 21c 21c维的特征,其中 21 = 4 × 4 + 2 × 2 + 1 21=4\times 4+ 2\times 2+1 21=4×4+2×2+1。就将任何尺寸大小的特征图处理称为了相同维度的大小。

Faster R-CNN

Faster R-CNN解决的问题是Fast RCNN还是需要使用到Seletive Search的方式获取候选框,然而这个过程是比较慢的,在Faster R-CNN中使用Region Proposal Network(RPN)取代了Seletive Search方法,不仅速度得到了大大提高,还获得了更佳精确的结果。RPN就是一个CNN结构,有两个输出分支,分别是是否有目标的分类,以及坐标的回归。

Faster

步骤:

  • 图像输入CNN网络获取一张大的特征图。
  • 使用RPN获取候选框
  • 截取的特征图使用ROI Pooling转换到固定大小的特征量。
  • 使用特征量进行类别分类和框回归。

RPN

Mask R-CNN

Mask RCNN并不是一个目标检测的算法,而是一个语义分割的算法。

  • 在Faster R-CNN的基础上添加一个mask分支,multi-task来实现实例分割
  • 使用ROI Align代替ROI Pooling,提升分割准确率

mask rcnn 采用和faster rcnn相似的两步法结构, 第一阶段RPN网络,提取出候选的目标边界框,第二阶段mask rcnn对于来自RPN的候选区域,利用ROI align提取特征并进行类别分类、边界框回归与二进制掩码生成。每一个候选区域上利用掩码分支预测一个二分类的mask。用来预测mask的掩码分支是一个在像素级别上对于每个ROI预测语义掩码的小全卷积网络。

ROIAlign的计算方式与ROIPooling的方式类似,在ROIPooling中,当下采样或者对齐的时候遇到小数,通常都是取整操作的。这个对目标检测问题不大,但是像素级的实例分割容易产生错位的问题。ROIAlign就是在处理这个小数的时候保留小数信息,然后在取预选区域特征图的时候进行插值计算。

总结

ItemRCNNFast RCNNFaster R-CNNMask R-CNN
提取候选框Selective SearchSelective SearchRPNRPN
提取特征每个候选区域用CNN提取一次CNN-ROIPooling只提取一次同Fast RCNN使用ROIAlign获取特征图
特征分类SVMCNN进行分类和回归同Fast RCNN同Fast RCNN
分割---像素级掩码分类

参考

  1. 21个项目玩转tensorflow, 第五章
  2. https://zhuanlan.zhihu.com/p/161379603
  3. mask-rcnn解读

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

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

相关文章

实验2_前馈神经网络实验

文章目录实验要求数据集定义1 手动实现前馈神经网络解决上述回归、二分类、多分类任务1.1手动实现前馈网络-回归任务1.2 手动实现前馈网络-二分类任务1.3 手动实现前馈网络-多分类1.4 实验结果分析2 利用torch.nn实现前馈神经网络解决上述回归、二分类、多分类任务2.1 torch.nn…

[附源码]Node.js计算机毕业设计宠物短期寄养平台Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我们…

Mybatis 基础入门示例-步骤清晰简单

目录 1、新建数据库 2、新建项目 2.1导入依赖 2.2创建子工程(新建模块) 2.3添加配置文件mybatis-config.xml 2.4添加数据源 2.5编写mybatis核心配置文件 2.6编写MybatisUtils工具类 3、编写代码 3.1实体类 3.2 Mapper(UserDao)接口 3.3 接口…

如何在 Hexo Blog 网站上添加图标(iconfont 使用)

emsp; 因为在制作自己的个人主页的时候遇到了Hexo主题没有提供对应图标的问题,就查看了一下Hexo主题是如何添加图标的。发现主要的方法是直接修改fonts文件夹下的iconfont.svg文件。修改yilia theme下的font文件,这个也刚好是同学blog使用的主题&#x…

代码是如何控制硬件的?

简单来说,就是软件指令通过操作寄存器,控制与、或、非门搭建的芯片电路,产生、保存高低电平信号,实现相应的逻辑,最终通过IO、串口等输出。 要想更清楚的了解软件控制硬件的原理,就要明白cpu的框架及工作原…

Mysql 进阶(面向面试篇)索引

1、索引 1.1 索引概述 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以…

springboot整合Swagger在线文档

SpringBoot整合Swagger2在线文档 一 什么是swagger? 我们前面有讲到说开发时会创建Restful风格的API接口,供第三方或前端人员使用,那么前端人员在使用的过程中怎么知道有哪些接口呢。这个时候可以通过写接口文档来解决,但不同的…

202/12/10 基础算法每日5道详解

21. Merge Two Sorted Lists合并两个排序列表 You are given the heads of two sorted linked lists list1 and list2. Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists. Return the head of the m…

Java基于springboot的人职匹配推荐系统-计算机毕业设计

项目介绍 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于人职匹配推荐系统当然也不能排除在外,随着网络技术的不断成熟,带动了人职匹配推荐系统,它彻底改变…

[附源码]计算机毕业设计基于人脸识别的社区防疫管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

字节管理薪资被应届生倒挂7K,这真的是不把老员工当人?

一位字节跳动的小管理爆出,无意中看到了整个部门薪资,本以为自己算比较高的,但看完之后整个人都傻眼了。小组长的职位月薪28K,而手下组员却是35K,当天晚上抽了一包烟也没想明白是为什么。 楼主表示,自己是字…

算法基础篇-05-排序-LowB三人组(冒泡/选择/插入排序)

1. LowB 三人组介绍 LowB 三人组的时间复杂度都是 O(n^2) 1.1 冒泡排序(Bubble Sort) 列表每2个相邻的数,如果前面比后面大,则交换这两个数。一趟排序完成后,则无序区减少一个数,有序区增加一个数;时间复杂度 O(n^2…

Linux 伙伴系统

Linux 伙伴系统前言一、rmqueue1.1 流程图1.2 函数原型1.3 通过PCP分配1.4 大阶页面分配二、__rmqueue2.1 流程图三、__rmqueue_pcplist3.1 流程图四、__rmqueue_fallback五、__rmqueue_smallest5.1 源码5.1.1 get_page_from_free_area5.1.2 del_page_from_free_list5.1.3 expe…

从零开始把 SpringBoot 搬到 K8s 上运行,我用了这几步!

前言 大家好,我是网管。咱们的 K8s 入门和实践,在经历了三篇理论知识的后,相信各位都已经期待许久(可能的吧),就差私信我,你整着理论整半天有啥用,本大人写的程序怎么能放到 K8s 上运…

Istio初探

Istio初探 前置环境:docker 一、安装k8s: ● https://segmentfault.com/a/1190000042204035 1、 https://github.com/gotok8s/k8s-docker-desktop-for-mac.git 2、 https://github.com/kubernetes/dashboard 3、 获取token curl ‘http://127.0.0.1:80…

SpringBoot实战项目杂货铺主页统计图表(折线图、饼状图、条形图)

统计图表的制作我们用到了Echarts,不得不说Echarts真的是百度的超级良心产品了。打Call!!!👍👍👍 ✔小插曲: 这里博主顺带提一下,像处理访问量等等数据的时候,往往会涉及到一个并发问题。举个…

ADI Blackfin DSP处理器-BF533的开发详解27:扩展IO输出的详细讲解(含源代码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 功能介绍 ADSP-EDU-BF53x 开发板上扩展接口的 PPORT3 中引出了 4 个扩展 IO 接口输出接口,这些连接到了 CPLD&#x…

【大数据入门核心技术-Hadoop】(八)Hadoop基本管理命令行

目录 一、 三种shell命令方式 二、常见Shell操作命令 三、dfs管理命令行 1、当前haoop环境变量 2、当前集群节点信息 3、运行HTTPFS服务器 4、高可用节点管理 5、单独启动某个节点服务 四、更多命令 一、 三种shell命令方式 HDFS有三种shell命令方式 hadoop fs&#…

flink部署-1.14

1. 版本说明 本文档内容基于 flink-1.14.x,其他版本的整理,请查看本人博客的 flink 专栏其他文章。 2. 概述 Flink 是一种通用性框架,支持多种不同的部署方式。 本章简要介绍 Flink 集群的组成部分、用途和可用实现。如果你只是想在本地启…

线程死锁、锁死、饥饿、活锁讲解

文章目录死锁哲学家就餐问题死锁的检测方式死锁的产生条件死锁的规避死锁的恢复锁死信号丢失锁死嵌套监视器锁死线程饥饿活锁死锁 概念 如果两个或者更多的线程因为相互等待对方而被永远暂停,线程的生命周期变成了BLOCKED或者WAITING,则我们称这些线程产…