
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本文以 AI for Beginners 课程第 12 课《Segmentation》的实验室任务translations/bn/lessons/4-ComputerVision/12-Segmentation/lab/README.md为核心完整讲解人体分割Body Segmentation这一经典计算机视觉任务从视频制作中的色键chroma key应用场景出发使用公开数据集训练一个能把人体轮廓从照片中精确抠出的神经网络模型。读完本文你将掌握人体分割任务的定义、数据集的下载与预处理流程、启动实验笔记本的完整步骤并理解语义分割背后的编码器-解码器架构与损失函数原理还能把知识延伸到骨骼检测与姿态检测等相邻任务。实验背景为什么视频制作需要人体分割在视频制作中例如天气预报节目经常需要把摄像机拍摄到的人物图像剪下来再叠加到另一段背景画面上。传统做法是使用**色键chroma key**技术让人站在纯色背景通常是绿幕或蓝幕前拍摄后期再把单色背景替换掉。色键方案的局限在于它对拍摄环境、服装颜色、光照条件都有严格要求一旦人物衣物或道具与背景色接近抠图就会失效。因此本实验室提出一个更通用的方案——直接训练一个神经网络模型来分割cut out人体剪影让模型逐像素地判断这个像素属于人还是属于背景从而摆脱纯色背景的限制。人体分割属于图像分割Segmentation任务可以把它理解为像素级分类pixel classification对于图像中的每一个像素模型都必须预测其类别背景本身就是其中一个类别。在 12-Segmentation 课程正文 中还区分了两种主要的分割算法语义分割Semantic segmentation只给出像素类别不区分同一类别中的不同个体实例分割Instance segmentation把同一类别再细分为不同实例例如羊群中的每一只羊。实验目标与任务说明本实验的核心任务非常明确训练一个神经网络模型使其能够自动切出人体轮廓human silhouette即对输入的人物照片输出一张与输入同尺寸的掩码图mask掩码中人体区域的像素为前景、其余为背景。仓库中该实验室的入口文件是 BodySegmentation.ipynb它是 12-Segmentation/lab 目录 下的启动笔记本包含数据集目录约定与图片/掩码可视化代码。数据集Segmentation Full Body MADS Dataset实验室指定使用 Kaggle 上的Segmentation Full Body MADS Dataset人体全身分割数据集。使用流程如下从 Kaggle 手动下载该数据集解压到当前目录按笔记本中的约定把解压目录重命名为segmentation_full_body_mads_dataset_1192_img。在 BodySegmentation.ipynb 的开头笔记本正是这样设定数据路径的dataset_path segmentation_full_body_mads_dataset_1192_img import os import matplotlib.pyplot as plt数据集内部采用两个并列子目录组织images/原始人体照片masks/与照片一一对应的分割掩码图文件名一一对应。数据加载与可视化第一步实操笔记本随后定义了读取原图 掩码对的辅助函数并用matplotlib把一对样本并排显示出来用于直观检查数据质量img_path os.path.join(dataset_path,images) mask_path os.path.join(dataset_path,masks) fnames os.listdir(img_path) def load_image(img_name): img plt.imread(os.path.join(img_path,img_name)) mask plt.imread(os.path.join(mask_path,img_name)) return img,mask取第 5 个样本并并排绘制img, mask load_image(fnames[5]) fig,ax plt.subplots(1,2,figsize(10,5)) ax[0].imshow(img) ax[1].imshow(mask) ax[0].axis(off) ax[1].axis(off)这段代码的意义在于在训练模型之前先确认images与masks的文件名能够一一对应且掩码确实勾勒出了人体轮廓。后续搭建分割网络时模型的学习目标就是输入img、输出尽可能接近mask的预测图。分割模型的技术底座编码器-解码器架构本实验室的动手部分虽然以数据集与数据加载为起点但完成训练还需要理解分割网络的通用结构。在 12-Segmentation 课程正文 中明确指出几乎所有分割神经架构都具有相同的结构并且与之前学过的自编码器autoencoder类似——区别在于分割网络解构的目标不是重建原图而是重建一张掩码图编码器Encoder从输入图像中提取特征解码器Decoder把特征转换成与输入同尺寸、通道数等于类别数的掩码图像。课程配套的 Segmentation 架构示意图 展示了这一先压缩特征、再放大回原尺寸的完整流程。损失函数为什么分割不能用 MSE分割任务与经典自编码器在损失函数选择上有本质差异。自编码器衡量两张图像的相似度可以用均方误差MSE但分割任务中目标掩码的每个像素代表的是类别编号沿第三维做 one-hot 编码因此必须使用面向分类的损失函数——对所有像素求平均的交叉熵损失cross-entropy loss。当掩码是二值的本实验室的人体分割正是如此前景/背景两类则应使用二元交叉熵损失BCEbinary cross-entropy loss。仓库中 SemanticSegmentationPytorch.ipynb 给出了与上述理论完全一致的工程实现model SegNet().to(device) optimizer optim.Adam(model.parameters(), lrlr, weight_decayweight_decay) loss_fn nn.BCEWithLogitsLoss()其中训练超参数也在笔记本中集中配置可在本实验室中复用device cuda:0 if torch.cuda.is_available() else cpu train_size 0.9 lr 1e-3 weight_decay 1e-6 batch_size 32 epochs 30两种典型网络SegNet 与 U-Net课程配套笔记本对两类分割架构做了完整实现可作为本实验选型的参考SegNet是最简单的编码器-解码器结构编码器使用带卷积、池化的标准 CNN 逐级提取特征解码器使用包含卷积与上采样的反卷积 CNN 把特征恢复为掩码多层网络的训练依赖**批归一化batch normalization**来保证稳定。U-Net则引入了跳跃连接skip connectionsU-Net 通过在编码器与解码器之间逐层把编码阶段的特征与上采样后的特征做torch.cat拼接对应实现位于 SemanticSegmentationPytorch.ipynb 的UNet.forward中例如d0 ... torch.cat((self.upsample0(b), cat3), dim1)让网络在重建时不会丢失原始输入在该层级的细节信息从而显著提升分割的像素级精度。这也是 U-Net 在生物医学图像分割等需要精细边界的任务中被广泛采用的原因。U-Net 架构示意图 直观展示了U形的跳跃连接结构。从源码结构看SemanticSegmentationTF.ipynb 提供了同一套分割任务在 TensorFlow/Keras 下的对应实现其超参数设置为train_size0.8、lr3e-4、batch_size64、epochs100两套框架的实验可以互为对照。如何运行本实验室完成本实验的推荐步骤阅读 12-Segmentation 课程正文掌握分割、编码器-解码器、U-Net 等概念从 Kaggle 手动下载 Segmentation Full Body MADS Dataset 并解压到当前目录打开 BodySegmentation.ipynb运行其中的数据路径设定与可视化代码确认原图与掩码的对应关系参照 SemanticSegmentationPytorch.ipynbPyTorch 版或 SemanticSegmentationTF.ipynbTensorFlow 版搭建一个二分类前景/背景分割网络将数据集替换为人体全身分割数据集训练结束后对测试图像输出预测掩码并与人眼观察到的真实掩码对比评估模型能否完整、平滑地勾勒出人体剪影。需要说明的运行前提BodySegmentation.ipynb 当前版本依赖matplotlib完成读图与可视化并以解压后目录与dataset_path一致为前提两套框架笔记本分别需要 PyTorch含 torchvision、skimage或 TensorFlow 环境。课程环境依赖可参考 binder/environment.yml 与 requirements.txt。拓展学习从人体分割到姿态检测课程正文在挑战Challenge环节指出人体分割只是处理人物图像的常见任务之一与之相邻的重要任务还有骨骼检测skeleton detection和姿态检测pose detection。实验室文档同样提示读者可以研究 OpenPose 库了解姿态检测类任务如何实现。这条延伸路径的意义在于分割、骨骼、姿态三个任务共享同一类逐像素/逐关键点预测的建模思路掌握分割之后再迁移到人体关键点检测会非常自然。小结本实验室以天气预报节目人像抠图这一真实应用为切入点带你完成一次端到端的人体分割实践从 Kaggle 下载 Segmentation Full Body MADS Dataset、按images/与masks/的组织方式加载并可视化数据再到以二值交叉熵为损失、以编码器-解码器SegNet / U-Net为骨架训练一个能够输出人体剪影掩码的神经网络。理解这些原理之后你可以进一步尝试 U-Net 的跳跃连接改进、更换更强的编码器如 ResNet 系列或向骨骼检测、姿态检测等相邻方向延伸把像素级理解图像的能力应用到更广阔的场景中。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐AI-For-Beginners 人体分割实验室用神经网络模型从视频画面中抠出人体轮廓AI For Beginners 人体分割实验室用神经网络模型从视频画面中抠出人体轮廓 本篇文章聚焦微软 AI For Beginners 课程第 12 课教程人工智能机器学习深度学习AI for Beginners 人体分割实战基于 Segmentation Full Body MADS 数据集训练神经网络抠像模型AI for Beginners 人体分割实战基于 Segmentation Full Body MADS 数据集训练神经网络抠像模型 人体分割Human教程人工智能机器学习深度学习AI-For-Beginners 人体分割实验指南用语义分割网络从视频画面中抠出人体剪影AI For Beginners 人体分割实验指南用语义分割网络从视频画面中抠出人体剪影 人体语义分割Human Body Segmentation是 A教程人工智能机器学习深度学习上一篇终极指南如何用NVIDIA Profile Inspector实现企业级显卡配置管理下一篇GoRose ORM性能优化连接池配置与SQL日志调试技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考