DeepLabV3-
GitHub ↗PyTorch 实现的 DeepLabV3+ 宠物图像语义分割模型,ResNet50 骨干 + ASPP + 解码器架构,支持类别 IoU 评估
1
Stars
0
Forks
0
Issues
1
Watchers
技术栈
Python 97.8%Shell 2.2%
DeepLabV3+ 宠物图像语义分割
基于 PyTorch 实现的 DeepLabV3+ 语义分割模型,用于宠物图像三分类分割(背景、宠物轮廓、宠物内部),骨干网络采用 ResNet50,集成 ASPP 空洞空间金字塔池化与编码器-解码器架构。
✨ 功能特性
- DeepLabV3+ 架构:ResNet50 骨干网络 + ASPP 模块 + 轻量解码器,融合多尺度上下文信息与低级边缘特征
- 三分类语义分割:针对宠物数据集,分割背景、宠物轮廓、宠物内部三个类别
- 训练与验证:支持 Adam 优化器、ReduceLROnPlateau 学习率调度、自动保存最佳 mIoU 模型
- 单图推理:输入单张图像,输出原始图、分割掩码、叠加效果三合一可视化结果
- 类别 IoU 评估:逐类别计算 IoU 并汇总 mIoU,结果保存为文本文件
- TensorBoard 监控:训练过程中记录验证 mIoU 等指标
🛠 技术栈
| 类别 | 技术 |
|---|---|
| 语言 | Python 3.7+ |
| 深度学习框架 | PyTorch >= 1.9.0 |
| 计算机视觉 | torchvision >= 0.10.0, OpenCV >= 4.5.0, Pillow >= 8.0.0 |
| 科学计算 | NumPy >= 1.19.0 |
| 可视化 | Matplotlib >= 3.3.0 |
| 训练监控 | TensorBoard >= 2.4.0 |
📁 项目结构
DeepLabV3-/
├── model.py # DeepLabV3+ 模型定义(ResNet50 骨干、ASPP、Decoder)
├── train.py # 训练脚本(数据加载、训练循环、验证、最佳模型保存)
├── inference.py # 推理脚本(单图分割、后处理、可视化输出)
├── data_loader.py # 自定义数据集加载器(宠物图像与 trimap 标注)
├── calculate_class_iou.py # 逐类别 IoU 与 mIoU 评估脚本
├── requirements.txt # 项目依赖
├── install_dependencies.sh # Linux/Mac 依赖安装脚本
├── segmentation_result.png # 推理输出示例(自动生成)
├── README_环境配置.md # 环境配置分节文档
└── README_计算类别IoU.md # IoU 计算分节文档
🚀 快速开始
环境要求
- Python >= 3.7
- CUDA >= 10.0(可选,用于 GPU 加速)
安装
git clone https://github.com/G-YOUNG01/DeepLabV3-.git
cd DeepLabV3-
# 方式一:脚本安装(Linux/Mac)
chmod +x install_dependencies.sh
./install_dependencies.sh
# 方式二:手动安装
pip install -r requirements.txt
数据集准备
本项目使用 Oxford-IIIT Pet Dataset 格式,需按以下目录结构放置数据:
data/
├── images/ # 原始宠物图像(.jpg)
└── annotations/
└── trimaps/ # 三值分割标注(.png,像素值 1/2/3)
标注图中像素值经 mask = mask - 1 处理后映射为:
- 类别 0:背景
- 类别 1:宠物轮廓
- 类别 2:宠物内部
训练
python train.py --model deeplabv3 --batch_size 4 --lr 0.001 --epochs 50
训练参数说明:
| 参数 | 默认值 | 说明 |
|---|---|---|
--model |
必填 | 模型名称,仅支持 deeplabv3 |
--batch_size |
4 | 批量大小 |
--lr |
1e-3 | 初始学习率 |
--epochs |
50 | 最大训练轮数 |
训练配置:
- 输入尺寸:512 × 512
- 优化器:Adam
- 损失函数:CrossEntropyLoss
- 学习率调度:ReduceLROnPlateau(监控验证 mIoU,patience=2)
- 数据划分:训练集 80% / 验证集 20%
- 数据增强:随机水平翻转
- 最佳模型自动保存为
best_deeplabv3.pth
推理
python inference.py --model deeplabv3 --model_path best_deeplabv3.pth --image_path test_image.jpg
推理结果将保存为 segmentation_result.png,包含原始图像、分割掩码、叠加效果三栏对比。
类别 IoU 评估
python calculate_class_iou.py --model_path best_deeplabv3.pth
可选参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--model_path |
必填 | 模型权重文件路径 |
--batch_size |
4 | 批量大小 |
--num_classes |
3 | 类别数量 |
--output_file |
iou_results.txt | 结果保存文件名 |
评估输出每个类别的 IoU 值及总体 mIoU,并保存到指定文本文件。
📖 模型架构
DeepLabV3+ 整体结构
输入图像 (3 × 512 × 512)
│
▼
ResNet50 骨干网络
├── layer0 (conv1 + bn1 + relu + maxpool)
├── layer1 ──► 低级特征 x_low (256 通道)
├── layer2
├── layer3
└── layer4 ──► 高级特征 (2048 通道)
│
▼
ASPP 模块(空洞空间金字塔池化)
├── 1×1 卷积分支
├── 3×3 空洞卷积 (rate=6)
├── 3×3 空洞卷积 (rate=12)
├── 3×3 空洞卷积 (rate=18)
└── 全局平均池化分支
└── 1×1 卷积投影 + Dropout(0.5)
│
▼
解码器(Decoder)
├── 高级特征上采样 4×
├── 低级特征 1×1 卷积降维至 48 通道
├── 拼接(256 + 48 = 304 通道)
├── 3×3 卷积 + BN + ReLU + Dropout(0.5)
└── 1×1 卷积输出 num_classes
│
▼
上采样 4× → 输出分割图 (num_classes × 512 × 512)
关键组件
- ASPP:通过不同膨胀率(6, 12, 18)的空洞卷积捕获多尺度上下文信息,配合全局平均池化分支整合全局信息
- 解码器:将 ASPP 输出的高级语义特征与 ResNet layer1 的低级边缘特征融合,恢复精细的空间边界
- 骨干网络:使用 ImageNet 预训练的 ResNet50,输出 stride=16
📊 效果展示
推理输出示例(segmentation_result.png):
- 左栏:原始输入图像
- 中栏:分割掩码(黑色=背景,红色=宠物轮廓,绿色=宠物内部)
- 右栏:掩码与原图叠加效果
🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
📄 许可证
未指定
👤 作者
GYOUNG - GitHub