mtan

GitHub
729 116 较难 1 次阅读 6天前MIT开发框架
AI 解读 由 AI 自动生成,仅供参考

mtan 是论文《End-to-End Multi-Task Learning with Attention》(CVPR 2019)的官方开源实现,全称为多任务注意力网络。它主要解决计算机视觉中“多任务学习”的难题:当模型需要同时处理语义分割、深度估计和法线预测等多个任务时,传统方法往往难以平衡不同任务间的梯度冲突,导致整体性能受限。

mtan 的核心亮点在于引入了注意力机制,能够自适应地学习不同任务在共享特征层中的权重分配。这种设计让网络可以动态聚焦于对当前任务最重要的特征,从而显著提升多任务协同训练的效果。项目基于 PyTorch 构建,提供了在 NYUv2 和 CityScapes 等经典数据集上的完整实验代码、预训练模型及基线对比,并持续更新以支持 DeepLabv3 等现代骨干网络及最新的评估标准。

这款工具非常适合人工智能研究人员、算法工程师及高校学生使用。如果您正在探索多任务学习架构,或需要在图像到图像的预测任务中寻求更优的解决方案,mtan 提供了一个经过验证的高效基准和灵活的代码框架,助您快速复现前沿成果或开展新的研究。

使用场景

某自动驾驶感知团队正在基于 CityScapes 数据集开发车载视觉系统,需要同时从单张图像中高精度地预测道路语义分割、物体深度估计以及表面法向量,以支持车辆的路径规划。

没有 mtan 时

  • 任务相互干扰:采用简单的多任务共享骨干网络,导致语义分割和深度估计两个任务在反向传播时梯度冲突,模型难以收敛到最优状态。
  • 特征利用低效:网络无法区分哪些底层特征对特定任务更重要,导致计算资源浪费在与当前任务无关的噪声特征上。
  • 调参成本高昂:需要人工反复调整各任务损失函数的权重比例(Loss Weighting),耗时数周仍难以找到平衡点,且泛化能力差。
  • 精度瓶颈明显:在复杂场景下,深度估计的误差会直接拉低语义分割的边界准确度,整体 mIoU 指标长期停滞不前。

使用 mtan 后

  • 自适应特征融合:mtan 引入的任务特定注意力机制自动筛选关键特征,让分割任务聚焦纹理边缘,深度任务关注几何结构,互不干扰。
  • 动态梯度协调:通过端到端的注意力模块,模型自动学习不同任务间的依赖关系,有效缓解了梯度冲突,训练稳定性显著提升。
  • 消除人工加权:无需再手动调节损失权重,mtan 在网络内部动态平衡各任务的学习强度,将原本数周的调参工作缩短为几次实验迭代。
  • 综合性能突破:在 CityScapes 测试集上,语义分割的 mIoU 与深度估计的误差指标同步优化,相比传统硬共享参数方案提升了约 8% 的综合性能。

mtan 通过注意力机制实现了多任务间的智能协同,让单一模型在保持轻量化的同时,达到了多个独立专家模型才能具备的感知精度。

运行环境要求

操作系统
  • 未说明
GPU

需要 NVIDIA GPU (运行命令中包含 --gpu 参数),具体型号和显存大小未说明

内存

未说明

依赖
notes代码已更新至兼容 PyTorch 1.5 及以上版本。包含两个主要实验场景:基于 NYUv2/CityScapes 的图像到图像预测(使用 SegNet 或 ResNet/DeepLabv3 骨干网络)和基于 Visual Decathlon Challenge 的多任务基准测试。NYUv2 数据集需单独下载预处理版本,原始预处理代码因作者电脑故障未提供。建议在训练时开启数据增强以避免过拟合。
python未说明
PyTorch (>=1.5)
pycocotools (用于 Visual Decathlon Challenge)
mtan hero image

快速开始

MTAN - 多任务注意力网络

本仓库包含多任务注意力网络(MTAN)及其基准模型的源代码,这些内容出自论文《带有注意力机制的端到端多任务学习》(https://arxiv.org/abs/1803.10704),由刘世坤(Shikun Liu)、爱德华·约翰斯(Edward Johns)和安德鲁·戴维森(Andrew Davison)共同提出。

更多实验结果请参阅我们的项目页面:这里

最后更新 - 本仓库将不再进行更新。欢迎查看我们的最新工作:Auto-Lambda,其中提供了更多多任务优化方法。

实验

图像到图像预测(一对多)

im2im_pred 文件夹下,我们提供了论文中提出的网络架构以及所有基准模型,并基于 NYUv2 数据集进行了实验。所有模型均使用 PyTorch 编写,我们在最新提交中已将实现更新至 PyTorch 1.5 版本。

您可在此下载我们在论文中使用的预处理过的 NYUv2 数据集:这里。我们还使用了来自 这里 的预计算真值法线。原始的 13 类 NYUv2 数据集可以直接从 这个仓库 下载,其分割标签则定义在 这个仓库 中。

很抱歉,由于意外的电脑故障,我无法提供原始的预处理代码。

更新 - 2019年6月:我现在发布了经过预处理的 CityScapes 数据集,包含 2、7 和 19 类语义标签(详情请参阅论文)以及深度(正向和反向)标签。您可以下载 [256x512, 2.42GB] 版本:这里,或 [128x256, 651MB] 版本:这里

更新 - 2019年10月:对于使用 PyTorch 1.2 的用户:mIoU 评估方法现已更新,以避免在计算二值掩码时出现“零问题”。此外,为正确运行代码,请将 scheduler.step() 移至调用 optimizer.step() 之后,例如在最后一次性能打印步骤之前的一行,以符合更新后的 PyTorch 要求。更多信息请参阅官方 PyTorch 文档 这里 [此问题已在最新提交中修复。]

更新 - 2020年5月:我们现在提供了官方的 MTAN-DeepLabv3(或类似 ResNet 的架构)设计,以支持更复杂和现代的多任务网络主干。请查看 im2im_pred/model_resnet_mtan 以获取更多详细信息。用户可以轻松地将此模型替换为 im2im_pred 中定义的任何训练模板。

更新 - 2020年7月:我们进一步提升了代码的可读性,并将 im2im_pred 中的所有实现更新至当前最新的 PyTorch 1.5 版本。我们修复了一个错误,用于排除未定义像素的预测,从而更准确地计算语义分割任务中的平均 IoU。此外,我们还为在 NYUv2 数据集中应用数据增强的用户提供了一个额外选项,以避免过拟合并获得更好的性能。

更新 - 2020年11月 [重要!]:我们已更新 mIoU 和像素准确率的公式,使其与 官方 COCO 分割脚本 的标准基准保持一致。现在预计所有方法的 mIoU 性能将提升约 8%。新公式基于所有图像中累积的像素预测来计算 mIoU 和像素准确率,而旧公式则是基于每张图像中像素预测的平均值再取整体平均。

以下表格描述了使用 SegNet(原论文中提出)构建的所有模型(文件):

文件名 类型 标志 备注
model_segnet_single.py 单任务 task, dataroot 标准单任务学习
model_segnet_stan.py 单任务 task, dataroot 我们的单任务应用方法
model_segnet_split.py 多任务 weight, dataroot, temp, type 多任务学习基准,共享网络在最后一层分离(即硬参数共享)
model_segnet_dense.py 多任务 weight, dataroot, temp 多任务学习基准,每个任务拥有独立的参数空间(即软参数共享)
model_segnet_cross.py 多任务 weight, dataroot, temp 我们的 Cross Stitch Network 实现
model_segnet_mtan.py 多任务 weight, dataroot, temp 我们的多任务学习方法

每个标志的含义如下:

标志名称 用途 备注
task 选择一个任务进行训练:语义(语义分割,深度交叉熵损失)、深度(深度估计,l1 范数损失)或法线(法线预测,余弦相似度损失) 仅适用于单任务学习
dataroot NYUv2 数据集的目录根路径 放入 im2im_pred 文件夹即可,无需担心 :D
weight 多任务学习的权重选项:等权(直接求和所有任务损失)、DWA(我们的方案)、uncert(我们对 Weight Uncertainty Method 的实现) 仅适用于多任务学习
temp DWA 权重选项中的超参数温度 用于确定任务权重的软硬程度
type 不同版本的多任务基准拆分:标准、深层、宽层 仅适用于基准拆分
apply_augmentation 打开以在 NYUv2 数据集中应用数据增强,避免过拟合 适用于所有训练模型

要运行任意模型,请先执行 cd im2im_pred/,然后简单地运行 python MODEL_NAME.py --FLAG_NAME 'FLAG_OPTION'(默认选项为不使用数据增强)。若要启用数据增强,请打开 apply_augmentation 标志:python MODEL_NAME.py --FLAG_NAME 'FLAG_OPTION' --apply_augmentation

请注意,我们在原论文中并未应用任何数据增强。

多任务学习的基准测试

多任务学习的基准测试一直是个棘手的问题,因为每个任务的性能指标和评估方法都不尽相同。在原始论文中,我简单地取了最后10个epoch中各任务性能的平均值,假设我们无法访问验证数据。

为了进行更加标准化和公平的比较,我建议研究人员采用这篇论文第5节、公式4中定义的评估方法,即计算相对于单任务学习的平均相对任务提升

由于样本量较小,NYUv2数据集很容易出现过拟合。在7月份的更新中,我们提供了一个数据增强选项来缓解过拟合问题(感谢Jialong的帮助)。我们强烈建议在使用该数据增强技术的情况下对NYUv2数据集进行基准测试,以与其他采用相同数据增强技术的SOTA多任务学习方法保持一致,例如PAD-NetMTI-Net

视觉十项全能挑战赛(多对多)

我们还提供了针对视觉十项全能挑战赛的源代码,其中我们基于宽残差网络构建了MTAN,并参考了这里的实现

要运行代码,请按照以下步骤操作:

  1. 请从视觉十项全能挑战赛官方网站这里下载数据集和开发工具包。将数据集文件夹decathlon-1.0-data移动到visual_decathlon文件夹下,然后将decathlon_mean_std.pickle移至decathlon-1.0-data文件夹内。

  2. test文件夹下为每个数据集创建一个子目录,并将所有测试文件移至该子目录中。(这是为了符合PyTorch的数据加载器格式要求。)

  3. code/coco/PythonAPI文件夹下的十项全能开发工具包中安装setup.py。然后将开发工具包中的pycocotoolsannotations文件夹移至visual_decathlon文件夹。

  4. 进入visual_decathlon目录,运行python model_wrn_mtan.py --gpu [GPU_ID] --mode [eval, 或 all]进行训练。eval表示在验证集上进行评估(通常用于调试或超参数调优),而all表示在所有数据集上进行训练(通常用于最终评估或基准测试)。

  5. 分别运行python model_wrn_eval.py --dataset 'imagenet' 和 'notimagenet',分别在ImageNet和其他数据集上进行评估。最后,运行python coco_results.py将结果转换为COCO格式,以便在线评估。

其他说明

  1. 提供的代码在可读性方面进行了高度优化。如果您发现任何异常行为,请提交issue或直接联系下方的邮箱。
  2. 使用提供的代码进行训练,其性能表现(取决于具体任务类型)会与论文中报告的图像到图像预测任务的结果有所不同。不过,模型之间的相对排名保持不变。如果您想比较论文中关于图像到图像预测任务的任何模型,请使用您偏好的训练策略(如学习率、优化器等)重新运行模型,并确保所有训练策略一致,以保证公平性。对于视觉十项全能挑战赛的结果,您可以直接参考论文中给出的数值。若要在您的研究中进行公平比较,请使用相同的主干架构构建您的多任务网络。
  3. 根据我的个人经验,在多任务学习中,设计更好的网络架构通常比寻找更优的任务权重分配更为有效且容易实现。

引用

如果您认为本代码/工作对您的研究有所帮助,请考虑引用以下文献:

@inproceedings{liu2019end,
  title={End-to-End Multi-task Learning with Attention},
  author={Liu, Shikun and Johns, Edward and Davison, Andrew J},
  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
  pages={1871--1880},
  year={2019}
}

致谢

我们感谢Simon Vandenhende在MTAN-DeepLabv3设计方面的帮助;感谢Jialong Wu在MTAN-DeepLabv3基准测试以及NYUv2数据集数据增强实现上的慷慨贡献。

联系方式

如有任何问题,请联系sk.lorenmt@gmail.com

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

158.1k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|6天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架