NYUv2¶
NYUv2数据集[1]是一个室内场景理解数据集,由微软Kinect中的RGB和深度摄像头录制的视频序列组成。它分别包含795张和654张带有真实标签的图像,用于训练和验证。
我们使用了在[2]中预处理的NYUv2数据集,该数据集可以在这里下载。每张输入图像已调整为3x288x384大小,并包含三个任务的标签,包括13类语义分割、深度估计和表面法线预测。因此,这是一个单输入问题,这意味着multi_input必须为False。
训练代码主要修改自mtan,并在examples/nyu中提供。我们使用DeepLabV3+架构[3],其中在ImageNet数据集上预训练的ResNet-50网络与扩张卷积[4]被用作任务之间的共享编码器,而Atrous Spatial Pyramid Pooling (ASPP)模块[3]被用作每个任务的特定任务头。
根据[2],三个任务的评估指标如下。语义分割任务使用平均交并比(mIoU)和像素准确率(Pix Acc)。深度估计任务使用绝对误差和相对误差(分别表示为Abs Err和Rel Err)。表面法线估计任务使用五个指标:误差的平均绝对值(Mean)、误差的中位数绝对值(Median)以及角度误差低于阈值\({\epsilon}\)的像素百分比,其中\({\epsilon}\)为\({11.25^{\circ}, 22.5^{\circ}, 30^{\circ}}\)(分别缩写为<11.25, <22.5, <30)。其中,mIoU、Pix Acc、<11.25、<22.5和<30的分数越高表示性能越好,而Abs Err、Rel Err、Mean和Median的分数越低表示性能越好。
运行模型¶
脚本 train_nyu.py 是用于在 NYUv2 数据集上训练和评估 MTL 模型的主要文件。提供了一组命令行参数,允许用户调整训练配置。
一些重要的参数描述如下。
weighting: 权重策略。参考这里。arch: MTL架构。参考这里。gpu_id: GPU的ID。默认值为‘0’。seed: 用于重现性的随机种子。默认值为0。scheduler: 学习率调度器的类型。我们建议在这里使用‘step’。optim: 优化器的类型。我们建议在这里使用‘adam’。dataset_path: NYUv2 数据集的路径。aug: 如果True,模型将使用数据增强进行训练。train_bs: 训练数据的批量大小。默认值为8。test_bs: 测试数据的批量大小。默认值为8。
完整的命令行参数及其描述可以通过运行以下命令找到。
python main.py -h
如果你理解了这些命令行参数,你可以通过执行以下命令来训练一个MTL模型。
python main.py --weighting WEIGHTING --arch ARCH --dataset_path PATH/nyuv2 --gpu_id GPU_ID --scheduler step
参考文献¶
Nathan Silberman, Derek Hoiem, Pushmeet Kohli, 和 Rob Fergus. 从RGBD图像进行室内分割和支持推理. 在 第8届欧洲计算机视觉会议论文集, 746–760. 2012.
Shikun Liu, Edward Johns, 和 Andrew J. Davison. 端到端的多任务学习与注意力机制. 在 IEEE计算机视觉与模式识别会议论文集, 1871–1880. 2019.
Liang-Chieh Chen, Yukun Zhu, George Papandreou, Florian Schroff, 和 Hartwig Adam. 使用空洞可分离卷积的编码器-解码器进行语义图像分割. 在 第14届欧洲计算机视觉会议论文集, 卷11211, 833–851. 2018.
Fisher Yu, Vladlen Koltun, 和 Thomas A. Funkhouser. 扩张残差网络. 在 IEEE计算机视觉与模式识别会议论文集, 636–644. 2017.