AI 怎么把照片里的物体“抠“出来?图像分割

AI 怎么把照片里的物体"抠"出来?图像分割

你手机相册能"一键抠图"换背景、自动驾驶能识别车道和行人、医生用 AI 圈出肿瘤区域——这些能力都靠同一类技术:图像分割。它比"识别这是猫"更进一步:要精确画出猫的每一个像素。今天讲透它。

一、分割比分类难在哪?

  • 图像分类:这张图是猫还是狗?(一个标签)
  • 目标检测:猫在画面哪个位置?(一个框)
  • 图像分割:猫的每一个像素属于谁?(一张掩码图)

分割要求"逐像素判断",输出和输入同分辨率的掩码图——这是视觉任务里最精细的。

三种分割:

  • 语义分割:所有像素分类(猫、狗、背景)
  • 实例分割:区分不同的个体(这只猫 vs 那只猫)
  • 全景分割:两者结合

二、FCN:第一个端到端分割网络

2015 年 FCN(全卷积网络)的关键创新:把分类网络末尾的全连接层换成卷积层

  • 分类 CNN:卷积提取特征 → 全连接 → 一个类别
  • FCN:卷积提取特征 → 转置卷积上采样 → 逐像素分类

好处:输出变成一张图而不是一个标签,且输入尺寸不受限。

三、U-Net:医学分割的经典

U-Net(2015)是为医学图像设计的,结构像字母 U:

编码器(下采样)           解码器(上采样)
  16x16  ─── 跳连接 ───>  16x16
   8x8   ─── 跳连接 ───>   8x8
    4x4   ────────────>    4x4

编码器逐步降采样抓语义(“这是肿瘤”),解码器逐步上采样恢复分辨率(“在哪个像素”),跳连接把编码器的高分辨率细节直接送到解码器——解决"上采样后细节丢失"的问题。

四、代码演示:U-Net 编解码思想

import numpy as np

img = np.zeros((16, 16))
img[4:12, 4:12] = 1.0      # 待分割目标

def downsample(x, k=2):
    return x.reshape(x.shape[0]//k, k, x.shape[1]//k, k).mean(axis=(1,3))
def upsample(x, size):
    reps = size // x.shape[0]
    return np.repeat(np.repeat(x, reps, axis=0), reps, axis=1)

# 编码器:降采样抓语义
enc1 = downsample(img)     # 16->8
enc2 = downsample(enc1)    # 8->4
# 解码器:上采样 + 跳连接
dec1 = upsample(enc2, 8)   # 4->8
fuse1 = dec1 + enc1        # 跳连接融合高分辨率细节
dec2 = upsample(fuse1, 16) # 8->16
mask = (dec2 > 0.3).astype(float)

iou = np.logical_and(mask, img).sum() / np.logical_or(mask, img).sum()
print(f"流程: 16x16 -> 编码 8x8 -> 4x4 -> 解码 8x8(跳连接) -> 16x16")
print(f"输出掩码与真值 IoU: {iou:.3f}")
print(f"掩码像素 {int(mask.sum())} vs 真值 {int(img.sum())}")
print("U-Net 关键: 编码抓语义, 解码恢复分辨率, 跳连接补细节")

运行输出:

流程: 16x16 -> 编码 8x8 -> 4x4 -> 解码 8x8(跳连接) -> 16x16
输出掩码与真值 IoU: 1.000
掩码像素 64 vs 真值 64
U-Net 关键: 编码抓语义, 解码恢复分辨率, 跳连接补细节

输入图像经过"编码-解码-跳连接"回到原分辨率,输出的掩码与真值完全吻合(IoU = 1.000)。真实 U-Net 有几十层,在医学图像上能做到像素级精度——这就是 AI 能"抠图"、能圈肿瘤的原理。

五、避坑清单

  1. 上采样会丢细节:跳连接是必需品,不是可选优化——否则边界糊成一团
  2. 分割指标要看 IoU/Dice:像素准确率会被"背景占多数"骗(全预测背景也有 90% 准确率)
  3. 类别不平衡要处理:小目标(如肿瘤)占比极低,需加权损失或 Dice loss
  4. 转置卷积的棋盘效应:用插值上采样 + 卷积替代转置卷积可缓解
  5. 数据标注很贵:分割需要逐像素标注,成本远超分类——弱监督/半监督是研究热点

六、想系统学计算机视觉?

本文精选自 ima 知识号【Kruptos】《计算机视觉详解》订阅库(第 068 期 FCN 全卷积语义分割、第 069 期 U-Net、第 071 期实例分割 Mask R-CNN 等 100 期系统教程,从图像处理、CNN、目标检测到生成模型与三维视觉,每期配可运行 Python 代码)。

📚 完整系列 100 期 + 配套代码,已在 ima 知识号发布

本文只是系列的一个切片。完整系列(100 期系统教程 + 每期可运行代码)在 ima 知识号【Kruptos】持续更新中:

  • 🗂 68+ 技术知识库:信号与系统、SDR 软件无线电、数字信号处理、操作系统、AI Agent、大模型微调……几乎覆盖全部软硬件技术栈
  • 🧠 8 款 AI 技能:系列生产、知识库管理、CMMI 受管开发、自进化 Agent 等,已在 ima 技能广场上架,即装即用
  • ✅ 全部免费订阅,后续更新自动推送

🔍 订阅方式:打开 ima(腾讯智能工作台)→ 搜索「Kruptos」→ 一键订阅。或在 ima 内直接搜索《计算机视觉详解》等知识库名称。

💬 你用 AI 抠过图吗?分割和检测你觉得哪个更难?评论区聊聊——想看 Mask R-CNN 还是 DeepLab,点赞高的安排。


作者:Kruptos(西电毕业,13 年无线通信/DSP/嵌入式科研)|原创内容,转载注明出处

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值