大模型教我成为大模型算法工程师之day15: 图像分割 (Image Segmentation)

Day 15: 图像分割 (Image Segmentation)

摘要:如果说目标检测是给物体画框,那么图像分割就是把物体从背景中“抠”出来。它是计算机视觉中像素级别的分类任务。本文将带你从语义分割的开山之作 FCN 出发,深入 U-Net 和 DeepLab 细节,解析实例分割王者 Mask R-CNN,最后领略分割领域的 GPT——Segment Anything Model (SAM) 的风采。


1. 分割任务全家桶

在深入模型之前,我们需要先分清三个容易混淆的概念:

任务类型英文核心逻辑例子
语义分割Semantic Segmentation只管类别,不管个体。所有“人”都是红色,所有“车”都是蓝色。自动驾驶中区分路面、天空、车辆。
实例分割Instance Segmentation既管类别,也管个体。张三是红色,李四是绿色,虽然他们都是“人”。机器人抓取特定物体。
全景分割Panoptic Segmentation语义 + 实例。背景(天空、草地)做语义分割,前景(人、车)做实例分割。统一的场景理解。

2. 语义分割:从 FCN 到 DeepLab

2.1 FCN (Fully Convolutional Networks) - 全卷积网络

FCN 是深度学习做语义分割的开山鼻祖(CVPR 2015)。

  • 核心思想:把分类网络(如 VGG)最后的全连接层(FC)丢掉,换成卷积层。
  • 为什么?全连接层会丢失空间信息,且限制输入图片尺寸。全卷积网络可以接受任意尺寸输入,并输出一张“热力图”。
  • 上采样 (Upsampling):卷积会让图片越来越小(下采样),分割需要输出原图大小。FCN 使用转置卷积 (Transposed Conv)把特征图放大回去。

2.2 U-Net - 医学影像的霸主

U-Net 的结构非常优美,像一个“U”字。

  • 结构:左边是收缩路径(Encoder,提取特征),右边是扩张路径(Decoder,恢复尺寸)。
  • 关键创新:跳跃连接 (Skip Connections)
    • 原理:深层特征语义强但位置模糊,浅层特征语义弱但边缘清晰。U-Net 把左边的浅层特征直接Concat (拼接)到右边对应的层。
    • Concat vs Add
      • U-Net 用 Concat:意味着“我全都要”。左边的细节特征和右边的语义特征并排放在一起,让后续卷积层自己去选择用谁。这对于保留精细边缘至关重要。
      • ResNet/FPN 用 Add:意味着“修正/增强”。在原有特征基础上叠加信息。FPN 使用 Add 主要是为了保持通道数一致以便共享检测头,且做多尺度特征融合。

2.3 DeepLab 系列 - 引入空洞卷积

Google 的 DeepLab 系列主要解决了两个问题:

  1. 下采样导致分辨率丢失:普通 CNN 也是一路池化,细节丢光了。
  2. 多尺度问题:物体有大有小。

解决方案:

  • 空洞卷积 (Atrous/Dilated Convolution)
    • 比喻:普通卷积像实心的九宫格印章,只能盖住一小块。空洞卷积是把九宫格拉开,中间留空。
    • 作用不池化也能看清大范围。在不降低分辨率(不缩小图片)的情况下,大幅扩大感受野。
  • ASPP (Atrous Spatial Pyramid Pooling)
    • 比喻多倍镜同时拍摄
    • 原理:并行使用不同膨胀率(Rate=6, 12, 18)的空洞卷积去提取特征,然后融合。
    • 效果:Rate=6 关注小物体(近景),Rate=18 关注大物体(远景),最后合在一起,大物体小物体一网打尽。

3. 实例分割:Mask R-CNN

Mask R-CNN (ICCV 2017 Best Paper) 是 Faster R-CNN 的完美进化。

  • 思路:检测 + 分割。先找出框,再在框里做分割。
  • 结构:Faster R-CNN + Mask 分支。
    • Class Head:是什么?
    • Box Head:在哪?
    • Mask Head:像素掩码是什么?(新增分支)

关键技术:RoI Align

Faster R-CNN 使用 RoI Pooling 把框内的特征变成固定大小,这涉及到取整操作(Quantization)。

  • 问题:对于分类,差几个像素没关系;但对于分割,几个像素的错位就是灾难(Mask 和原图对不齐)。
  • 解决RoI Align取消了取整,使用双线性插值来计算特征值,实现了像素级的对齐。

4. 分割大模型:SAM (Segment Anything)

2023年 Meta 发布的 SAM,被誉为计算机视觉领域的 GPT-3 时刻。

4.1 核心范式:Mask Prediction (非 NTP)

LLM 是 NTP (Next Token Prediction) 范式,像贪吃蛇一样逐词预测。
SAM 是 Mask Prediction 范式,类似于 DETR。它收到提示后,一次性并行输出完整的掩码矩阵,而不是逐像素生成。

4.2 架构解析:轻重分离

SAM 的设计兼顾了性能和效率,主要由三部分组成:

  1. Image Encoder (重型)
    • 基于ViT-H (Vision Transformer)
    • 作用:把图片变成特征向量 (Embedding)。
    • 特点只算一次。不管后续如何交互,这张图的特征只算一遍,耗时较长但可复用。
  2. Prompt Encoder (轻量)
    • 作用:把用户的各种提示变成向量。
  3. Mask Decoder (超轻量)
    • 作用:结合图像特征和提示特征,毫秒级输出 Mask。这是实现实时交互的关键。

4.3 提示词 (Prompt) 的魔法:如何输入?

SAM 把物理世界的交互统统变成了数学向量:

  • 点 (Point) & 框 (Box)
    • 不是直接输坐标数字,而是通过位置编码 (Positional Encoding)
    • 类似于 Transformer 处理序列位置的方式,把(x,y)(x,y)(x,y)映射为高维向量,作为 “Token” 拼接到输入序列中。
  • 掩码 (Mask)
    • 如果上一轮预测了一个粗糙的 Mask,或者用户画了一笔,这个二维图像会经过一个CNN下采样,然后直接相加 (Add)到 Image Embedding 上,作为背景特征的一部分。
  • 文本 (Text)
    • 通过 CLIP 文本编码器变成向量。

4.4 输出与后处理

  • 输出内容:SAM 输出的是Mask (掩码矩阵),即由 0 和 1 组成的黑白图。
  • 如何抠图:需要进行后处理,用 Mask 与原图做点乘 (Element-wise Product),才能得到去除了背景的 RGBA 图像。

意义:SAM 解决了一个根本痛点——标注数据太贵。SAM 拥有强大的零样本 (Zero-shot) 能力,它可以作为通用的预处理工具,大大降低了下游任务的门槛。


5. 代码实践:PyTorch 实现简易 U-Net

importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassDoubleConv(nn.Module):"""(convolution => [BN] => ReLU) * 2"""def__init__(self,in_channels,out_channels):super().__init__()self.double_conv=nn.Sequential(nn.Conv2d(in_channels,out_channels,kernel_size=3,padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True),nn.Conv2d(out_channels,out_channels,kernel_size=3,padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True))defforward(self,x):returnself.double_conv(x)classUNet(nn.Module):def__init__(self,n_channels,n_classes):super(UNet,self).__init__()self.n_channels=n_channels self.n_classes=n_classes# Encoder (Downsampling)self.inc=DoubleConv(n_channels,64)self.down1=DoubleConv(64,128)self.down2=DoubleConv(128,256)self.down3=DoubleConv(256,512)self.down4=DoubleConv(512,1024)# MaxPoolself.pool=nn.MaxPool2d(2)# Decoder (Upsampling)self.up1=nn.ConvTranspose2d(1024,512,kernel_size=2,stride=2)self.conv_up1=DoubleConv(1024,512)# 512 from up + 512 from down3self.up2=nn.ConvTranspose2d(512,256,kernel_size=2,stride=2)self.conv_up2=DoubleConv(512,256)self.up3=nn.ConvTranspose2d(256,128,kernel_size=2,stride=2)self.conv_up3=DoubleConv(256,128)self.up4=nn.ConvTranspose2d(128,64,kernel_size=2,stride=2)self.conv_up4=DoubleConv(128,64)# Output layerself.outc=nn.Conv2d(64,n_classes,kernel_size=1)defforward(self,x):# Encoderx1=self.inc(x)x2=self.down1(self.pool(x1))x3=self.down2(self.pool(x2))x4=self.down3(self.pool(x3))x5=self.down4(self.pool(x4))# Decoder with Skip Connectionsx=self.up1(x5)# 实际使用中需要处理padding导致的尺寸不一致问题,这里简化处理假设尺寸匹配# cat(x, x4)x=torch.cat([x4,x],dim=1)x=self.conv_up1(x)x=self.up2(x)x=torch.cat([x3,x],dim=1)x=self.conv_up2(x)x=self.up3(x)x=torch.cat([x2,x],dim=1)x=self.conv_up3(x)x=self.up4(x)x=torch.cat([x1,x],dim=1)x=self.conv_up4(x)logits=self.outc(x)returnlogits# 测试模型if__name__=="__main__":model=UNet(n_channels=3,n_classes=10)# 假设输入图片大小为 160x160 (必须是16的倍数,否则concat时尺寸会不匹配)x=torch.randn(1,3,160,160)y=model(x)print(f"Input shape:{x.shape}")print(f"Output shape:{y.shape}")# Should be [1, 10, 160, 160]

6. 总结与思考

  • 语义分割:FCN 打开了大门,DeepLab 用空洞卷积(不缩小看清全图)和 ASPP(多倍镜看细节与轮廓)解决了多尺度问题,U-Net 用 Concat 跳跃连接保留了极致的边缘细节。
  • 实例分割:Mask R-CNN 在检测框里做精细分割,RoI Align 解决了像素对齐的痛点。
  • 大模型时代:SAM 引入了 Prompt 机制,将点/框/文映射为向量,配合轻量级 Mask Decoder,实现了“指哪打哪”的通用分割能力。

思考:为什么 Feature Pyramid Network (FPN) 用 Add 而 U-Net 用 Concat?

  • FPN (检测):追求多尺度特征统一。P3, P4, P5 需要有相同的通道数(如256)以便共享检测头,Add 可以保持通道数不变,且类似于 ResNet 起到特征增强的作用。
  • U-Net (分割):追求像素级还原。Concat 可以最大程度保留浅层的空间信息(坐标、边缘),这对像素分类任务至关重要。

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

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

相关文章

1、云、虚拟化与数据存储网络:从挑战到机遇的旅程

云、虚拟化与数据存储网络:从挑战到机遇的旅程 在当今数字化的时代,信息技术(IT)领域正经历着前所未有的变革。数据的爆炸式增长、新技术的不断涌现,都给企业的信息服务带来了新的挑战和机遇。本文将深入探讨云、虚拟化和数据存储网络相关的重要话题,帮助您更好地理解如…

构建ros2的节点工程,并创建python的ros2的包的方法过程(推荐)

1,进入环境 cd ~/ros2_ws_simulink/src 2,创建包 ros2 pkg create keyboard_pro --build-type ament_python --dependencies rclpy joy_stick_msg 3,创建代码: # ~/ros2_ws_simulink/src/keyboard_pro/keyboard_pro/keyboard_publisher_simple.py #!/usr/bin/env python3 …

2、云、虚拟化与数据存储网络:从挑战到机遇

云、虚拟化与数据存储网络:从挑战到机遇 在当今信息爆炸的时代,数据和信息的重要性日益凸显。无论是个人还是企业,都对数据的存储、处理和管理有着越来越高的要求。与此同时,云、虚拟化和数据存储网络等技术也逐渐成为解决这些问题的关键手段。 1. 数据与存储的重要性 我…

3、云、虚拟化与数据存储网络基础全解析

云、虚拟化与数据存储网络基础全解析 1. 数据存储的重要性与挑战 在当今数字化时代,数据存储的重要性不言而喻。很多人常常认为数据存储理所当然,但实际上却并不真正理解它。当存储空间不足,无法保存文件或照片时,存储问题就会变得令人沮丧,而当急需的文件或文档找不到时…

Python学习第一天:保留字和标识符

Python学习第一天:保留字和标识符的技术文章大纲 保留字的概念与作用 解释保留字的定义及其在Python中的重要性 列出Python中所有保留字(如if, else, for, def等) 说明保留字不可用作变量名或标识符的原因 标识符的定义与命名规则 标识符…

痛击面试官!CURD系统也能做出技术含量

引子很多朋友可能会因为自己做的工作不是特别核心或者业务简单而引起面试中没有自信。但是很多公司面试的时候是可以接受面试者之前岗位的并发量、交易量低一些的。比如我们要招聘和我们交易量同等级或者以上的出来的人才,业界本来就没有多少,但我们还是…

Java计算机毕设之基基于javaweb的特色小零食销售系统的设计与实现于javaweb的小零食销售系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

揭秘Dify Agent版本混乱难题:3步实现精准版本管控

第一章:Agent 工具的 Dify 版本管理在构建基于 Agent 的智能应用时,版本控制是确保系统稳定性和可维护性的关键环节。Dify 作为一款支持可视化编排与部署 AI Agent 的平台,提供了完整的版本管理机制,帮助开发者高效追踪变更、回滚…

私有化Dify端口配置实战(从零到上线的完整配置方案)

第一章:私有化Dify端口配置概述在企业级AI应用部署中,私有化Dify平台的端口配置是确保服务稳定运行与安全访问的关键环节。合理的端口规划不仅能提升系统间的通信效率,还能有效隔离外部风险,保障核心模型服务不被非法调用。基础服…

Java面试Redis核心知识点整理!

大家都知道Redis的业务范围是非常广的,但是对于刚入行的小伙伴来说可能也就知道个缓存跟分布式锁。因为Redis的很多功能在一些小企业里,根本是用不到的,得等到并发量到了一定的程度,系统扛不住了,才会用到Redis那些高级…

从入门到精通:Dify平台下Tesseract自定义词典创建全流程(附真实案例)

第一章:Dify Tesseract 的自定义词典在使用 Dify 集成 Tesseract 进行 OCR 文本识别时,标准词库可能无法准确识别特定领域术语或专有名词。通过配置自定义词典,可显著提升识别准确率,尤其是在处理技术文档、医学报告或法律文书等专…

C++编译死机排查工具与实战指南

C编译死机排查工具与实战指南 一、引言 C作为一门高性能、底层的编程语言,在系统开发、游戏引擎、嵌入式设备等领域广泛应用。然而,C编译过程中偶尔会遇到一个令人头疼的问题——编译死机(Compilation Crash)。这种情况表现为编…

C++ Template(模板)解读和模板报错如何“逆向阅读”定位

一、Template&#xff08;模板&#xff09;解读 一、模板本质&#xff1a;不是泛型&#xff0c;是“代码生成器”Template 编译期函数 / 类型生成系统template<typename T> T add(T a, T b) { return a b; }编译期行为&#xff1a; add<int> -> 生成一个 i…

2025年低成本学AI:几款高性价比认证盘点(200元起)

想学AI但预算有限&#xff1f;别担心&#xff0c;现在有不少认证门槛不高&#xff0c;花费也亲民&#xff0c;特别适合想入门或者转行的朋友。今天就来聊聊几款性价比不错的AI相关认证&#xff0c;最低200元就能开始。1. CAIE注册人工智能工程师认证首先提到的就是CAIE注册人工…

【高阶技术揭秘】:从Dify日志看懂重排序算法的隐秘逻辑

第一章&#xff1a;从Dify日志窥探重排序技术的本质在构建现代检索增强生成&#xff08;RAG&#xff09;系统时&#xff0c;重排序&#xff08;Re-ranking&#xff09;作为提升结果相关性的关键步骤&#xff0c;其内部机制往往隐藏于框架的日志细节之中。通过分析 Dify 平台的运…

应届生看过来!2025年轻松入手的几款AI认证(低费用+高认可度)

毕业季到了&#xff0c;不少同学想考个证给自己简历加点分。AI方向挺火&#xff0c;但费用别踩坑&#xff01;今天就给大伙儿梳理几款适合应届生、费用不高且有一定认可度的AI认证&#xff0c;让你把钱花在刀刃上。一、先说两个实惠的选择第一个可以考虑的是CAIE注册人工智能工…

Avalon-MM address和DRAM address地址映射

本文介绍了在使用quartus的DDR IP的时候&#xff0c;想要知道avalon总线和DDR的地址是怎么对应的关系&#xff1b;&#xff08;为了兼容两个不同容量的DDR时&#xff0c;行列地址不一致&#xff09;1、在IP核指示手册里面有介绍 Avalon-MM address mapping DRAM address2、可以…

还在为多语言语音识别发愁?Dify 1.7.0一招破解行业痛点

第一章&#xff1a;Dify 1.7.0 音频多语言支持全新升级Dify 1.7.0 版本在语音处理能力上实现了重大突破&#xff0c;尤其在音频的多语言识别与合成功能方面进行了全面增强。此次升级使得系统能够更精准地识别包括中文、英文、西班牙语、法语和日语在内的多种语言&#xff0c;并…

【Docker Scout漏洞修复全流程】:手把手教你7步闭环响应安全威胁

第一章&#xff1a;Docker Scout漏洞修复流程概述Docker Scout 是 Docker 官方提供的镜像安全分析工具&#xff0c;能够自动扫描容器镜像中的已知漏洞&#xff0c;并提供详细的修复建议。它集成在 Docker CLI 和 Docker Hub 中&#xff0c;帮助开发者在构建和部署阶段提前识别风…

深度剖析Dify PDF解密失败根源(附完整错误代码对照表)

第一章&#xff1a;深度剖析Dify PDF解密失败根源&#xff08;附完整错误代码对照表&#xff09;在使用 Dify 平台处理加密 PDF 文件时&#xff0c;用户频繁遭遇解密失败问题。该现象通常由加密算法不兼容、权限配置缺失或元数据校验异常引发。深入分析底层日志可发现&#xff…