当前位置: 首页 > news >正文

从零跑通 CLAN 域适应:GTA5 到 Cityscapes 语义分割完整实战指南

从零跑通 CLAN 域适应:GTA5 到 Cityscapes 语义分割完整实战指南

【免费下载链接】CLAN( TPAMI2022 / CVPR2019 Oral ) Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent Domain Adaptation项目地址: https://gitcode.com/gh_mirrors/cl/CLAN

CLAN(Category-level Adversaries)是一个做「语义一致域适应」的经典 PyTorch 项目,出自 CVPR 2019 Oral 与 TPAMI 2022 两篇论文。域适应说白了,就是把游戏画面(GTA5)上学到的语义分割能力,迁移到真实街景(Cityscapes)上——目标域一张标注都不用。本文带你走一条「环境→数据→训练→mIoU」的最短链路,照着做即可出结果。

CLAN 域适应是什么:先搞清能力边界

在动手前花两分钟定位这个项目,能帮你避开一半的期望落差。

它解决什么问题

普通语义分割模型换一套数据就"懵了",CLAN 的核心贡献是用「类别级判别器(Category-level Discriminator)」逐类地对抗,让特征分布按类别对齐,而不是全局硬拉。配合一个"权重失配损失"防止特征空间退化,迁移后的语义一致性显著更好。

它能做什么、不能做什么

  • :GTA5 → Cityscapes、SYNTHIA → Cityscapes 这两条仿真到真实(sim2real)的语义分割域适应链路,输出 Cityscapes 标准 19 类结果。
  • 不能:它不是即插即用的通用工具箱。源域和目标域的数据规格、列表文件(dataset/gta5_list/train.txt等)都是写死约定,换数据集要改代码;且单卡显存要求 11G 起步,默认 batch size 为 1。

搞清楚边界后,我们进入流水线。先搭环境。

第 1 步:一键装好环境与代码

环境很简单,官方口径是 Python 3.6 + PyTorch 1.0.0,属于老配置,别用新版 torch 硬套。

git clone https://gitcode.com/gh_mirrors/cl/CLAN && cd CLAN conda create -n clan_env python=3.6 && conda activate clan_env pip install torch==1.0.0 torchvision pillow numpy matplotlib imageio

⚠️ 还有一个容易漏的件:ImageNet 预训练权重(DeepLab-ResNet),训练脚本启动时直接从./model/目录读取(RESTORE_FROM指向model/DeepLab_resnet_pretrained_init-f81d91e8.pth),没有它训练第一步就会崩。记得按这个文件名放好,否则改一下脚本里的RESTORE_FROM变量。

代码和环境都就位,下面解决数据这个大头。

第 2 步:数据集怎么摆对位置

需要三个数据集:GTA5(源域)、Cityscapes(目标域,需申请授权)、SYNTHIA(可选替代源域)。下载后按下面的目录结构摆进项目根目录,脚本里的路径变量(如DATA_DIRECTORY = './data/GTA5')都是相对它写的:

├── data/ │ ├── Cityscapes/ │ │ ├── gtFine/ # 真值标注 │ │ └── leftImg8bit/ # 街景原图 │ ├── GTA5/ │ │ ├── images/ │ │ └── labels/ │ └── SYNTHIA/ │ └── RAND_CITYSCAPES/

摆好图之后,还要把图片列表文件和内容对上:dataset/cityscapes_list/train.txtdataset/gta5_list/train.txtdataset/synthia_list/train.txt里写的是相对路径(如aachen/aachen_000000_000019_leftImg8bit.png),如果你的数据目录名不同,要么统一目录名,要么批量改列表。Cityscapes 的 19 类映射规则在dataset/cityscapes_list/info.json里,一般无需动它。

数据齐了,最后一条命令链就能出 mIoU。

第 3 步:训练到出 mIoU 的完整链路

这一条线分三个脚本,按顺序跑即可。

训练(默认源域 GTA5、目标域 Cityscapes,共 10 万 iter,每 2000 iter 存一个 checkpoint 到 snapshots 目录):

CUDA_VISIBLE_DEVICES=0 python CLAN_train.py --snapshot-dir ./snapshots/GTA2Cityscapes

训练过程中会滚动打印 loss_seg / loss_adv / loss_weight,同时写入 snapshots 目录的loss.txt,可以直接盯它判断是否收敛。

评估(拿某个 checkpoint 在 Cityscapes val 集上跑推理):

python CLAN_evaluate.py --restore-from ./snapshots/GTA2Cityscapes/GTA5_100000.pth --save ./result/GTA2Cityscapes_100000

算 mIoU(把预测结果和 gtFine 真值对齐求交并比):

python CLAN_iou.py ./data/Cityscapes/gtFine/val result/GTA2Cityscapes_100000

💡 一个实用技巧:表现最好的 checkpoint 往往不是最后一个。CLAN_evaluate_bulk.pyCLAN_iou_bulk.py可以批量评测 snapshots 下所有模型,结果自动汇总成 Excel 表,适合训练完做横向对比挑最优。

想看"它学到了什么",仓库gifs/目录下有 GTA5 风格街景被分割成彩色 mask 的动图示例,直观感受域适应效果。

跑通全流程后,如果你打算魔改网络,花十分钟看一眼模块地图会省很多事。

进阶:核心模块地图,G 和 D 到底在哪

代码量不大,值得花 10 分钟扫一遍,重点就四个文件:

  • model/CLAN_G.py:生成器网络,Res_Deeplab类。ResNet-101 骨干 + 两个解耦的 DeepLabV2 头(对应 pred_source1/2),"解耦"正是 CLAN 对抗训练的载体。
  • model/CLAN_D.py:类别级判别器FCDiscriminator,注意它的输入是逐类别的 softmax 概率而非普通特征——这就是"category-level"的落点。
  • utils/loss.py:损失函数,含加权 BCE(WeightedBCEWithLogitsLoss),即训练里"自适应对抗损失"的实现,预热期后启用。
  • CLAN_train.py主体:训练主循环,G 和 D 交替更新、damping 衰减、warmup + 多项式学习率调度都在这一个文件里,读它就能看懂全流程。

数据加载逻辑在dataset/下的三个数据集类里,改数据协议时从这里入手。

高频踩坑与对策

最后集中回答跑不通时最常见的几类报错。

  • CUDA OOM / 显存不足:官方要求显存 ≥11G。显存小卡可把--input-size-source--input-size-target调低(如640,360),NUM_WORKERS也可降到 2。
  • 启动即报找不到权重文件:就是上面说的 ImageNet 预训练权重没放进model/,文件名要对上RESTORE_FROM
  • FileNotFoundError 报某个 png:列表文件和实际目录对不上,先检查data/下的层级名是否完全一致,再核对*_list/*.txt第一行的前缀。
  • mIoU 比预期低:先确认评估用的是 val 列表(cityscapes_list/val.txt)且真值目录传的是gtFine/val;再试试 bulk 评测换几个 checkpoint 对比。
  • 新环境装不上 torch 1.0.0:这是 2019 年的依赖组合,最稳的方案就是 Python 3.6 + 官方老版 torch 原样复刻,而不是升级到新版 PyTorch 后逐个修兼容问题。

到这一步,环境、数据、训练、评估、指标五块就全部闭环了。下一步可以从换源域(SYNTHIA)或调整对抗损失权重(Lambda_adv等)开始做自己的实验。

【免费下载链接】CLAN( TPAMI2022 / CVPR2019 Oral ) Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent Domain Adaptation项目地址: https://gitcode.com/gh_mirrors/cl/CLAN

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4181417.html

相关文章:

  • 3步接入Builder.io可视化编辑:React页面改文案不再等发版
  • QQ空间历史说说一键导出:扫码即用的 4 步本地备份方案
  • 【Bug已解决】Error while loading MISTRAL LLM for fine-tune. Qlora doesn‘t work but full works 解决方案
  • VMware 虚拟机反检测完整指南:3 步部署 VmwareHardenedLoader,让 VMProtect 3.2 查不出虚拟机
  • PAIR:前缀感知内部奖励模型如何优化多轮对话Agent学习效率
  • AI智能体长程记忆管理:基于轻量评分器的选择性遗忘机制
  • CMWTAT_Digital_Edition 使用教程:3 步完成 Windows 数字权利激活
  • MiroFish 完整部署指南:从一条命令到第一次预测
  • 无人机反制核心技术解析:雷达探测与信号干扰的协同防御
  • FactorioLab:免费开源的工厂游戏资源计算器完整上手指南
  • 蚂蚁百灵开源模型实战:从Checkpoint加载到领域微调全解析
  • Boltz-2 生物分子相互作用与亲和力预测:从安装到首次预测的完整指南
  • JavaScript面试核心考点与高频题型解析
  • Page Assist:看网页时随时问本地AI
  • AI智能体规划任务中的层间动态机制与鲁棒性优化实践
  • java sheduler Java Scheduler?别闹!固定翼无人机集群,分布式MPC才是真大佬,30秒队形稳如狗
  • Unity 架构深度解析:从 GameObject 到 ECS 的演进之路
  • DreamHand:利用视频扩散模型先验解决第一人称3D手部运动恢复难题
  • AI4AI-Bench:大语言模型算法设计与递归自我改进能力评估
  • 阿里Qwen-Image-3.0-Pro图像模型:从核心能力到本地部署与API调用实践
  • 对话式信息流:从算法推送到用户探索的技术变革
  • TrollStore 完整安装指南:三步把 IPA 永久装进 iOS,附避坑清单
  • raylib 完整入门指南:从零构建 2D/3D 游戏应用的 4 个核心能力
  • 记忆树引导关键帧查询:高效3D视觉问答的智能调度新范式
  • 中国开源AI模型实战:从本地部署到生产集成的完整指南
  • 大模型训练全流程拆解:从数据、算力到算法优化的实战指南
  • Meta开源Muse Spark 1.2与OpenCode:免费本地AI编程助手实战指南
  • 如何把 kkFileView 接入 KingbaseES:一份国产化文件预览与数据库备份落地指南
  • 如何用 LocoMuJoCo 从零搭建机器人模仿学习环境:完整上手指南
  • 如何用COLMAP把一批照片变成三维模型:三维重建快速上手