CV经典任务(一) 语义分割、实例分割 | 全卷积

文章目录

  • 1 语义分割
    • 1.1 思路1 滑动窗口
    • 1.2 思路2 全卷积网络
  • 2 代码实现
  • 3 实例分割

之前讲了分类

实际中除了分类还有几大视觉任务

语义分割,实例分割,目标检测

以上任务基本也都基于前面讲的卷积网络去做的

1 语义分割

语义分割(Semantic Segmentation)

语义分割的目标是将图像中的每个像素分割成不同的类别,但不区分同一类别中的不同实例。它只关心图像中的不同物体类别,而不关心它们是否属于不同的实例。

语义分割通常用于识别图像中的不同物体类别,如图像分割、图像分析、医学图像分析等。

1.1 思路1 滑动窗口

语义分割思路:滑动窗口

首先,选择一个固定大小的窗口(通常是正方形或矩形),然后将该窗口从图像的左上角开始滑动,按照一定的步长(通常是像素数)在图像上进行滑动。这将生成一系列重叠的图像窗口。

对于每个滑动窗口,从窗口中提取特征。然后对这个窗口做分类

这种方法可以工作,但效率太低。重叠区域特征反复被计算

因而更多采用思路2

1.2 思路2 全卷积网络

采用全卷积网络 也就是用全部都是多层的全卷积

这是怎么思考的呢?之前我们是给一整张图像做分类,而我们现在是给图像的每一个像素做分类

如果我最后一个卷积层输出的是(H×W×C)

H,W是图像的宽高,C是可能的分类的类别数

这样的话每一个像素点被映射为C维的向量,而我的标答也做成(H×W×C) 这样的话输出和标记之间就可以做损失函数运算了

但是有又有一个问题,就是我们中间 一直保持着原图的像素尺寸,中间计算量会很大,所以我们考虑通过先减小像素尺寸(下采样),再增大像素尺寸(上采样)

把特征图变小其实不难 如池化层,卷积层增大步长等

把特征图变大我们其实并没有学过
在这里插入图片描述

这里运用很多的是 转置卷积操作

特别方式

可学习的上采样:转置卷积

首先我们需要知道卷积操作是可以写作矩阵相乘的,只有这样我们才能实现并行运算,极大的加快运算速度

具体我们看这样一个二维的例子

输入图像 I(3x3的矩阵):

I = | 1  2  3 || 4  5  6 || 7  8  9 |

卷积核 K1(2x2的矩阵):

K1 = | a0  b0 || c0  d0 |

我们希望将输入图像 I 与卷积核 K 进行卷积操作。

如果按照我们之前的卷积从左上角开始滑动,那么每一次运算必须等上一次运算完

而实际上我们可以把图像I写成这样一个矩阵

I_expanded = | 1  2  4  5 || 2  3  5  6 || 4  5  7  8 || 5  6  8  9 |

这是什么意思呢?就是把卷积核要运算的第一个方格(左上角的四个元素)里的元素展平放在第一行

要运算的第二个方格(右上角的四个元素)里的元素展平放在第二行

要运算的第三个方格(左下角的四个元素)里的元素展平放在第三行

要运算的第四个方格(右下角的四个元素)里的元素展平放在第四行

展开卷积核 K1:将2x2的卷积核 K 按照大小展开成一个列向量。

K1_expanded = [a0 b0  c0 d0]

这样的话,将展开后的输入图像矩阵 I_expanded 与展开后的卷积核 K_expanded 进行矩阵相乘,得到卷积结果。

卷积前大小 (3×3)展开矩阵是(4×4)

卷积后大小(2×2)展开后是(4×1)

那么我们怎么把卷积后的这个大小恢复成原来的大小呢

得到的结果(4×1)乘 卷积核转置(1×4) =(4×4)

这也是为什么称之为转置卷积

现在更多还使用一类叫做Unet

是在刚刚讲的基础上的改进

就是通过连接两个相同尺寸的把前面层的信息拼接到后面的层的信息,如下图 使得不同分辨率的语义(无论是高层还是底层)的信息都可以捕捉

在这里插入图片描述

2 代码实现

我们这次直接采用预训练模型来搭建这个网络

(1)对于下采样部分采用ReNet的预训练模型

Resnet会把输入图片的宽高缩为原来的1/32,通道数变为512

假设输入图片宽高 320,480,所以中间输出的宽高变为10,15

(2)对于上采样部分采用转置卷积网络

首先通过1×1卷积层把通道数变为分类总数,例子中是20

然后再经过转置卷积改变特征图尺寸,要把它扩大32倍,那么步长就是s=32

卷积核尺寸=2s=64

填充=s/2=16

上面这一套卷积核参数设置就可以把它扩大32倍

import os
import torch
import torchvision
from torch import nn
#@save#采用resnet做下采样
pretrained_net=torchvision.models.resnet18(pretrained=True)#resnet的最后两层全局平均池化层和线性层丢弃
net=nn.Sequential(*list(pretrained_net.children())[:-2]
)
#模拟输入 图像宽高320,480,通道数3
x=torch.rand(size=(1,3,320,480))#经过Renet的输出中间输出
print(net(x).shape)#采用转置卷积网络做上采样
num_classes=20#要分类的类别是20
#模拟输入 图像宽高320,480,通道数3
x=torch.rand(size=(1,3,320,480))
#先改变通道数
net.add_module("final_conv",nn.Conv2d(512,num_classes,kernel_size=1))
#转置卷积层
net.add_module("transpose_conv",nn.ConvTranspose2d(num_classes,num_classes,kernel_size=64,padding=16,stride=32))
#最终输出
print(net(x).shape)

输出

torch.Size([1, 512, 10, 15])
torch.Size([1, 20, 320, 480])

可验证,中间输出的宽高变为10,15

最后输出恢复原始图像宽高,通道数变为分类总数20

3 实例分割

实例分割(Instance Segmentation)

实例分割的主要目标是将图像中的每个对象实例分割成不同的区域,并为每个区域分配一个唯一的标识符。这意味着它不仅可以识别不同类别的对象,还可以区分同一类别中的不同实例,如图像中的多个人或多辆车。

实例分割通常在需要区分不同对象实例的场景中使用,如自动驾驶中的行人检测和跟踪、人物姿势估计等。

以下是一些重要的深度学习方法和架构,用于实例分割任务:

  1. Mask R-CNN:Mask R-CNN是一种基于Faster R-CNN的扩展,它通过添加额外的分割分支来实现实例分割。除了目标的边界框,Mask R-CNN还生成了每个对象实例的像素级掩码,从而提供了准确的分割结果。这使得 Mask R-CNN 成为实例分割任务的流行选择。
  2. Panoptic Segmentation:Panoptic分割是一种将语义分割和实例分割结合起来的任务,旨在将图像中的每个像素分为具有语义标签的物体类别或属于特定对象实例。Panoptic分割方法通常使用深度学习模型来实现,如Panoptic FPN等。
  3. DETR(Data Efficient Transformer):DETR 是一种新兴的实例分割方法,它基于Transformer架构,将实例分割任务转化为一个端到端的目标检测和分割问题。DETR 通过注意力机制来对目标的位置和像素级别的分割进行联合建模,取得了卓越的性能。
  4. PointRend:PointRend 是一种用于提高实例分割性能的方法,特别关注于处理分割边缘区域的细节。它通过逐像素的自适应池化操作来改进掩码的质量,从而提高分割精度。
  5. SOLO(Segmenting Objects by Locations):SOLO 是一种基于实例的分割方法,它使用了网格级别的特征图和目标特定的位置信息,以实现物体实例的分割。SOLO 将实例分割任务与目标检测分割任务相结合。
  6. Embedding-based方法:一些实例分割方法采用嵌入向量来表示每个像素,然后使用聚类技术或后处理步骤来将像素分配到不同的实例。这些方法在性能和效率方面取得了良好的平衡。

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

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

相关文章

深度学习:模型训练过程中Trying to backward through the graph a second time解决方案

1 问题描述 在训练lstm网络过程中出现如下错误&#xff1a; Traceback (most recent call last):File "D:\code\lstm_emotion_analyse\text_analyse.py", line 82, in <module>loss.backward()File "C:\Users\lishu\anaconda3\envs\pt2\lib\site-packag…

常用的文本对比工具或网站

以下是一些常用的文本对比工具的下载地址或网站访问地址&#xff1a; DiffNow: https://www.diffnow.com/ WinMerge: https://winmerge.org/ Beyond Compare: https://www.scootersoftware.com/ Meld: https://meldmerge.org/ diff:文本对比/字符串差异比较 - 在线工具 请…

vite.config.ts

vite会自动生成vite.config.ts文件 https://juejin.cn/post/7039879176534360077https://juejin.cn/post/7039879176534360077 挑了几个常用的记下笔记&#xff0c;配置别名&#xff0c;proxy跨域&#xff0c;本地服务设置 import { defineConfig } from vite import vue fr…

Java环形链表(图文详解)

目录 一、判断链表中是否有环 &#xff08;1&#xff09;题目描述 &#xff08;2&#xff09;题解 二、环形链表的入环节点 &#xff08;1&#xff09;题目描述 &#xff08;2&#xff09;题解 一、判断链表中是否有环 &#xff08;1&#xff09;题目描述 给你一个链表的…

构建智能客服知识库,优化客户体验不是难题!

在当今快节奏的商业环境中&#xff0c;客户都希望得到及时个性化的支持&#xff0c;拥有一个智能客服知识库对于现代企业至关重要。智能客服知识库是一个集中存储、组织和访问与客户服务互动相关的信息的综合性知识库。它为企业提供了全面的知识来源&#xff0c;使他们能够为客…

想要精通算法和SQL的成长之路 - 最长递增子序列 II(线段树的运用)

想要精通算法和SQL的成长之路 - 最长递增子序列 II&#xff08;线段树的运用&#xff09; 前言一. 最长递增子序列 II1.1 向下递推1.2 向上递推1.3 更新操作1.4 查询操作1.5 完整代码&#xff1a; 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 最长递增子序列 II 原题链接…

单链表详细解析|画图理解

前言&#xff1a; 在前面我们学习了顺序表&#xff0c;相当于数据结构的凉菜&#xff0c;今天我们正式开始数据结构的硬菜了&#xff0c;那就是链表&#xff0c;链表有多种结构&#xff0c;但我们实际中最常用的还是无头单向非循环链表和带头双向循环链表&#xff0c;我们今天先…

idea没有maven工具栏解决方法

背景&#xff1a;接手的一些旧项目&#xff0c;有pom文件&#xff0c;但是用idea打开的时候&#xff0c;没有认为是maven文件&#xff0c;所以没有maven工具栏&#xff0c;不能进行重新加载pom文件中的依赖。 解决方法&#xff1a;选中pom.xml文件&#xff0c;右键 选择添加为…

Denoising diffusion implicit models 阅读笔记

Denoising diffusion probabilistic models (DDPMs)从马尔科夫链中采样生成样本&#xff0c;需要迭代多次&#xff0c;速度较慢。Denoising diffusion implicit models (DDIMs)的提出是为了加速采样过程&#xff0c;减少迭代的次数&#xff0c;并且要求DDIM可以复用DDPM训练的网…

计算机网络补充

未分类文档 CDMA是码分多路复用技术 和CMSA不是一个东西 UPD是只确保发送 但是接收端收到之后(使用检验和校验 除了检验的部分相加 对比检验和是否相等。如果不相同就丢弃。 复用和分用是发生在上层和下层的问题。通过比如时分多路复用 频分多路复用等。TCP IP 应用层的IO多路…

绿色计算产业发展白皮书:2022年OceanBase助力蚂蚁集团减排4392tCO2e

9 月 15 日&#xff0c;绿色计算产业联盟在 2023 世界计算大会期间重磅发布了《绿色计算产业发展白皮书&#xff08;2023 版&#xff09;》。蚂蚁集团作为指导单位之一&#xff0c;联合参与了该白皮书的撰写。 白皮书中指出&#xff0c;落实“双碳”战略&#xff0c;绿色计算已…

基于微信小程序的场地预约系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

亮相“外滩金融峰会” 百望云实力入选“融城杯金融科技创新十佳案例”

近日&#xff0c;第五届“外滩金融峰会”在上海召开&#xff0c;百望云受邀出席峰会&#xff0c;与全球财经政要、机构高管与学界领袖齐聚外滩&#xff0c;分享真知灼见&#xff0c;以对话推动共识。 本届峰会由中国金融四十人论坛&#xff08;CF40&#xff09;与中国国际经济交…

electron之快速上手

前一篇文章已经介绍了如何创建一个electron项目&#xff0c;没有看过的小伙伴可以去实操一下。 接下来给大家介绍一下electron项目的架构是什么样的。 electron之快速上手 electron项目一般有两个进程&#xff1a;主进程和渲染进程。 主进程&#xff1a;整个项目的唯一入口&…

HashMap 源码解读(JDK1.8)

一、HashMap说明 基于哈希表的 Map 接口实现。此实现提供所有可选的map操作&#xff0c;并允许空值和空键。&#xff08;HashMap 类大致等同于 Hashtable&#xff0c;只是它不支持同步并且允许空值。&#xff09;此类不保证插入键值的顺序&#xff1b;特别是&#xff0c;它不保…

Mendix中的依赖管理:npm和Maven的应用

序言 在传统java开发项目中&#xff0c;我们可以利用maven来管理jar包依赖&#xff0c;但在mendix项目开发Custom Java Action时&#xff0c;由于目录结构有一些差异&#xff0c;我们需要自行配置。同样的&#xff0c;在mendix项目开发Custom JavaScript Action时&#xff0c;…

48v转24v 3A 48v转12v 48v转5v电源芯片AH7691X

AH7691X是一款高-效-率、高-压降压型DC-DC转换器&#xff0c;采用固定110KHz的开关频率&#xff0c;具备3A的输出电流能力&#xff0c;低纹波&#xff0c;并且具备***软启动功能、过压保护功能和温度保护。该器件还集成了峰值限流功能&#xff0c;简化了电路设计。 AH7691X内部…

MFC 绘图

效果图&#xff1a;三张bmp图 字 竖线 组成 在OnPaint()函数中 CPaintDC dc(this);CRect rect;GetClientRect(&rect); //获取客户区矩形CDC dcBmp; //定义并创建一个内存设备环境dcBmp.CreateCompatibleDC(&dc); //创建兼容性DCCBitmap …

【kafka实战】01 3分钟在Linux上安装kafka

本节采用docker安装Kafka。采用的是bitnami的镜像。Bitnami是一个提供各种流行应用的Docker镜像和软件包的公司。采用docker的方式3分钟就可以把我们想安装的程序运行起来&#xff0c;不得不说真的很方便啊&#xff0c;好了&#xff0c;开搞。使用前提&#xff1a;Linux虚拟机&…

AKKA 互相调用

SpringBoot 集成 AKKA 可以参考此文&#xff1a;SpringBoot 集成 AKKA 场景1&#xff1a;bossActor 收到信息&#xff0c;然后发给 worker1Actor 和 worker2Actor controller 入口&#xff0c;初次调用 ActorRef.noSender() Tag(name "test") RestController Req…