深度学习笔记(5)——目标检测和图像分割

embedded/2025/1/1 5:36:01/

目标检测与图像分割

语义分割:如果没有语义信息,很难正确分类每个像素
解决方案:感知像素周围的语义,帮助正确分类像素

  1. 滑窗计算:计算非常低效,图像块的重叠部分会被重复计算很多次
    解决方案:转向全卷积

  2. 全卷积问题:分类模型会大幅降低特征的分辨率,难以满足分割所需的高分辨率输出
    解决方案:采用没有下采样操作的全卷积网络,维持图像高分辨率\

  3. 无下采样的全卷积问题:在原图尺寸上的卷积操作计算量、显存占用非常大
    解决方案:先采用下采样(大步长的池化、卷积)降低计算量,逐步上采样(Unpooling,转置卷积,线性插值)恢复图像分辨率
    代表网络:U-Net,DeepLab,PSPNet

目标检测:分类+定位

selecctive search:找到有可能存在物体的区域,在CPU上运行,可以在几秒内生成2000多个区域

R-CNN

  1. 将selective search找到的区域作为候选区域
  2. wrap处理后的图像区域
  3. 送入CNN提取特征
  4. 最后使用SVM对每个图像区域分类
  5. 对每个Rol预测调整值:(dx,dy,dw,dh)

问题:效率很低,非常慢,同一区域会被反复计算(框内有重叠)
Idea:使用卷积网络处理整张图像,在特征上进行区域提取
在这里插入图片描述

Fast R-CNN

  1. 使用卷积网络处理整张图像
  2. 投射到由Selective Search生成的候选区域
  3. 对候选区域进行分类和回归
  4. 使用RoI Pooling,将不同大小的候选区域映射到固定大小的特征图

问题:Rol提取的特征与原始proposal中的特征存在差异
解决方法对四个近邻点进行线性插值

RCNN和Fast-RCNN的区别:RCNN是把候选框送入CNN,而fast-RCNN是把整张图片送进去。

在这里插入图片描述

Faster R-CNN

在这里插入图片描述

使用CNN预测proposal,其他模块和Fast R-CNN基本相同
即RCNN和fast RCNN的区域都是用selective search得到的,而faster RCNN的区域是RPN这个区域生成网络(CNN网络)得到的。
假设每个点都有固定大小的锚框,预测每个锚框里面是否存在物体,对于存在物体的锚框,对锚框进行调整,以便更好地将物体框住。
一般来说,每个点会定义K个锚框,具有不同的大小和比例
K × 20 × 5 K\times20\times5 K×20×5个锚框预存在物体的可能性,选择top300作为proposal\

不再使用Selective Search,而是使用RPN生成候选区域,RPN是一个全卷积网络,可以预测锚框的类别和偏移量,RPN和Fast R-CNN共享卷积层,因此可以并行处理,大大提高了速度。
联合四个损失:

  1. RPN分类损失 (是否存在物体):
    这个损失是用来训练RPN来区分一个提议区域是否包含一个对象。对于每个锚点(anchor),RPN预测两个分数,表示该区域是背景(不包含任何目标)或前景(包含至少一个目标)。这是一个二分类问题,通常使用交叉熵损失函数来计算损失。
  2. RPN回归损失 (矩形框):
    RPN除了要决定锚点是否应该被考虑为一个对象外,还负责调整这些锚点的位置以更好地匹配实际的对象边界框。这个损失用来优化锚点的坐标,使其更接近真实的目标边界框。一般采用平滑L1损失(smooth L1 loss)来减少回归误差,因为它对异常值不那么敏感。
  3. 检测分类损失 (物体类别):
    在通过RPN生成了一组候选区域后,这些区域会被送入到快速R-CNN部分进行进一步处理。这部分不仅要确定区域内是否有物体,还需要识别出具体是什么类型的物体。因此,它是一个多类分类问题,其损失函数同样是基于交叉熵损失,但这次是对所有预定义的类别进行分类。
  4. 检测回归损失 (矩形框):
    类似于RPN回归损失,但这是针对最终的检测结果而言的。在快速R-CNN部分,候选区域经过池化层后,会输出更加精确的目标边界框坐标。为了使这些预测框尽可能准确地包围目标,同样使用平滑L1损失来最小化预测框与真实框之间的差异。

实例分割

对检测到的每个实例物体进行分割

Mask R-CNN:架构非常接近Faster RCNN。在Faster RCNN的基础上加上了一个FCN层。
在这里插入图片描述

主要区别在于,在网络的末端,还有另一个头,即上图中的掩码分支,用于生成掩码进行实例分割。还有把Faster RCNN中的ROI Pooling换成了ROIAlign
ROI pooling时目标特征图的单元边界被迫与输入特征图的边界重新对齐。因此,每个目标单元格的大小可能不同
ROI Align,它不会取整单元格的边界并使每个目标单元具有相同的大小。它还应用插值来更好地计算单元格内的特征图值


http://www.ppmy.cn/embedded/149909.html

相关文章

Linux 防火墙:守护系统安全的坚固防线

Linux 防火墙:守护系统安全的坚固防线 在网络环境日益复杂的当下,Linux 系统的安全性愈发关键,而防火墙作为抵御外部网络威胁的首道屏障,扮演着举足轻重的角色。本文将带你深入了解 Linux 防火墙的方方面面,从基础概念…

python EEGPT报错:Cannot cast ufunc ‘clip‘ output from dtype(‘float64‘)

今天在运行EEGPT的时候遇见了下面的问题,首先是nme报错,然后引起了numpy的报错: numpy.core._exceptions._UFuncOutputCastingError: Cannot cast ufunc clip output from dtype(float64)在网上找了好久的教程,但是没有找到。猜测…

mysql系列7—Innodb的redolog

背景 本文涉及的内容较为底层,做了解即可,是以前学习《高性能Mysql》和《mysql是怎样运行的》的笔记整理所得。 redolog(后续使用redo日志表示)的核心作用是保证数据库的持久性。 在mysql系列5—Innodb的缓存中介绍过:数据和索引保存在磁盘上…

Seal^_^【送书活动第8期】——《ChatGLM3大模型本地化部署、应用开发与微调》

Seal^_^【送书活动第8期】——《ChatGLM3大模型本地化部署、应用开发与微调》 一、参与方式二、本期推荐图书2.1 作者建语2.2 编辑推建2.3 图书简介2.4 前 言2.5 目 录 三、正版购买 大模型领域 既是繁星点点的未知宇宙,也是蕴含无数可能的广阔天地, 正…

windows C#-嵌套类型

在类、构造或接口中定义的类型称为嵌套类型。 例如 public class Container {class Nested{Nested() { }} } 不论外部类型是类、接口还是构造,嵌套类型均默认为 private;仅可从其包含类型中进行访问。 在上一个示例中,Nested 类无法访问外部…

【EtherCATBasics】- KRTS C++示例精讲(2)

EtherCATBasics示例讲解 目录 EtherCATBasics示例讲解结构说明代码讲解 项目打开请查看【BaseFunction精讲】。 结构说明 EtherCATBasics:应用层程序,主要用于人机交互、数据显示、内核层数据交互等; EtherCATBasics.h : 数据定义…

2025最新版Java面试八股文大全

一、Java并发面试题 1、 ThreadLocal 1.1 谈谈你对ThreadLocal的理解? ThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的。它不是针对程序的全局变量,只是针对当前线程的全局…

e3 1220lv3 cpu-z分数

e3 1220lv3 双核四线程,1.1G频率,最低可在800MHZ运行,TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。