十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

depth_from_video_in_the_wild 数据格式全解:基于 data_example 构建单目深度估计训练集

depth_from_video_in_the_wild 数据格式全解:基于 data_example 构建单目深度估计训练集 人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本文以 depth_from_video_in_the_wild/data_example/README.md 为线索结合 reader.py、train.py 等源码完整解析 Google Research 的 Depth from Video in the WildICCV 2019项目所依赖的 Struct2depth 数据格式——从目录组织、索引文件、三通道文件命名到相机内参矩阵的存储与读取再到如何用仓库自带的单条示例跑通一步训练。读完本文你可以理解并自建符合该格式的训练数据集也能准确读懂 data_example 中每个文件的含义。图 1data_example 中的原始 RGB 帧。该帧来自 Cityscapes 数据集德国爱尔福特街景实际为 3 帧按 seq_length 横向拼接的合成图像。图 2与 RGB 帧对应的前景分割掩码-fseg后缀文件用于遮罩可能运动的物体车辆、行人等。一、数据格式总览每个训练样本由四类文件构成data_example文件夹展示了训练代码所期望的完整数据格式。该目录包含一个子目录erfurt_93对应 Cityscapes 的某个序列场景与一个索引文件train.txt其内容如下文件作用train.txt索引清单每行声明一个训练样本所在的子目录与帧 IDerfurt_93/0000000002.png原始 RGB 帧3 帧横向拼接erfurt_93/0000000002-fseg.png前景分割掩码-fseg后缀erfurt_93/0000000002_cam.txt相机内参矩阵_cam后缀图片来源于 Cityscapes 数据集数据由 TensorFlow Models 仓库中的 Struct2depth 项目提供的脚本生成。本项目代码即基于 Struct2depth 构建并沿用其数据格式因此 Struct2depth 的dataset/gen_data.py等脚本可以直接用于为本项目生成训练数据。二、索引文件 train.txt声明样本归属与帧 IDtrain.txt是整个数据集的入口其格式非常简单——每行两个字段用空格分隔erfurt_93 0000000002reader.py 中的 compile_file_list 精确实现了对该格式的解析每行按空格切分后第一个字段是子目录名subfolders第二个字段是帧 IDframe_ids然后拼接出三类文件的完整路径图像data_dir/子目录/帧ID.扩展名分割掩码data_dir/子目录/帧ID-fseg.扩展名内参文件data_dir/子目录/帧ID_cam.txt即对erfurt_93 0000000002这一行会解析出erfurt_93/0000000002.png、erfurt_93/0000000002-fseg.png、erfurt_93/0000000002_cam.txt三个文件路径。同时该方法会计算出steps_per_epoch 文件数 // batch_size供训练循环统计每个 epoch 的步数。其中文件名train由--input_file参数控制默认值为train因此默认读取train.txt。若需要验证集可以仿照同样式提供val.txt并传入--input_fileval。三、RGB 帧三帧横向拼接的图像栈0000000002.png并不是一张普通照片而是连续 3 帧的横向拼接图。这一点从图像尺寸可以验证该示例图分辨率为 1248×128而 train.py 的默认输入尺寸为img_height128, img_width416恰好满足416 × 3 1248。模型的序列长度在 model.py 中被固定为SEQ_LENGTH 3其注释说明这一设定主要是历史原因实际训练损失只涉及相邻两帧图像。在 reader.py 的 unpack_images 中拼接图被切分为 3 个宽度为img_width的切片再沿通道维拼接为[h, w, 3 * seq_length]的图像栈即每个像素位置同时携带 3 帧的颜色信息image_list [ image_seq[:, i * self.img_width:(i 1) * self.img_width, :] for i in range(self.seq_length) ] image_stack tf.concat(image_list, axis2)分割掩码0000000002-fseg.png遵循同样的拼接规则并在 unpack_images 中被切分成与 RGB 帧一一对应的 3 帧掩码栈。掩码的作用是标记场景中可能运动的物体如车辆、行人训练时这些区域不参与重建损失计算从而保证视频中的深度训练对动态物体鲁棒。此外train.py 提供--foreground_dilation前景掩码膨胀像素数默认 8与--boxify是否将分割掩码转换为包围盒默认开启两个参数用于控制掩码的预处理方式。四、相机内参文件_cam.txt9 个浮点数的 3×3 矩阵0000000002_cam.txt的内容是一行 9 个浮点数565.63,0.0,222.8240625,0.0,566.3254476497139,64.142125,0.0,0.0,1.0这 9 个数按行优先排列正好构成 3×3 的相机内参矩阵 K位置值含义(0,0)565.63焦距 fx(0,1)0.0无倾斜(0,2)222.824主点 xcx(1,0)0.0无倾斜(1,1)566.325焦距 fy(1,2)64.142主点 ycy(2,0)0.0齐次行(2,1)0.0齐次行(2,2)1.0齐次行注意 fx 与 fy 的差异以及主点 (222.8, 64.1) 相对图像中心 (208, 64) 的偏移说明该内参是真实标定而非理想化假设。主点 cy≈64 与半高 128/264 吻合而 cx≈222.8 与单帧半宽 416/2208 略有偏差这是 Cityscapes 相机标定的真实结果。reader.py 中的内参读取逻辑使用tf.TextLineReader读取该文本文件再用tf.decode_csv按 9 个浮点数解析每个字段默认值 1.0最后tf.reshape(raw_cam_vec, [3, 3])还原为矩阵。后续处理包括翻转增强时修正内参水平翻转后cx会被更新为in_w - cx见 augment_images_flip缩放裁剪时修正内参随机缩放按比例缩放 fx、fy、cx、cy随机裁剪则从 cx、cy 中减去裁剪偏移见 augment_images_scale_crop多尺度内参get_multi_scale_intrinsics按1/2^s逐级缩放内参供多尺度深度预测使用reader.py。五、使用 data_example 跑通冒烟测试仓库提供了开箱即用的单样本冒烟测试方案一条命令即可在示例数据上执行一步训练用于验证环境与代码链路是否正常。推荐直接使用 run.sh# 创建虚拟环境并安装依赖tensorflow、tensorflow-graphics、requirements.txt virtualenv -p python3 . source ./bin/activate pip install tensorflow pip install tensorflow-graphics pip install -r depth_from_video_in_the_wild/requirements.txt # 在 data_example 上跑一步训练 python -m depth_from_video_in_the_wild.train \ --data_dirdepth_from_video_in_the_wild/data_example \ --checkpoint_dir/tmp/my_experiment --train_steps1requirements.txt 锁定的依赖版本为tensorflow1.15.0、tensorflow-graphics1.0.0、opencv-python4.1.0.25、numpy1.13.3、absl-py0.5.0请注意这是 TensorFlow 1.x 时代的代码需要兼容 TF1 的运行环境。主 README 给出的完整训练命令如下python -m depth_from_video_in_the_wild.train \ --checkpoint_dir$MY_CHECKPOINT_DIR \ --data_dir$MY_DATA_DIR \ --imagenet_ckpt$MY_IMAGENET_CHECKPOINT其中MY_CHECKPOINT_DIR为模型检查点保存目录MY_DATA_DIR为按上述格式组织的训练数据根目录含train.txtMY_IMAGENET_CHECKPOINT为预训练 ImageNet 检查点路径用于初始化深度预测网络的 ResNet 编码器train.py 中的恢复逻辑使用imagenet_init_restorer仅恢复depth_prediction/conv*变量。train.py的两个核心参数必须显式提供--data_dir与--checkpoint_dir被flags.mark_flag_as_required标记。如果希望直接使用给定的内参而非学习内参可在命令中添加--nolearn_intrinsics对应 train.py 的 learn_intrinsics 标志。六、训练数据规模与关键训练参数仓库在 Cityscapes 上使用默认 batch size4在 KITTI 上使用 batch size 16需加--batch_size16。由于data_example只有 1 条样本将其作为训练集时steps_per_epoch 1 // 4 0因此只适合执行--train_steps1之类的调试验证真实训练需要自行准备大规模数据集。train.py中与数据及训练直接相关的可调参数汇总如下参数默认值说明--data_dir必填预处理后的数据根目录含train.txt--checkpoint_dir必填模型检查点保存目录--imagenet_ckptNone初始化 ResNet 编码器的 ImageNet 预训练权重--train_steps1e6训练步数--batch_size4批大小KITTI 建议 16--img_height/--img_width128 / 416输入帧尺寸需与拼接图中单帧尺寸一致--file_extensionpng图像文件扩展名jpg/png--input_filetrain索引文件名不带 .txt--queue_size2000数据队列容量本地调试可调小--learning_rate1e-4Adam 学习率--reconstr_weight0.85帧重建损失权重--ssim_weight3.0SSIM 损失权重--smooth_weight1e-2深度平滑损失权重--depth_consistency_loss_weight0.01深度一致性损失权重--rotation_consistency_weight1e-3旋转循环一致性损失权重--translation_consistency_weight1e-2平移一致性损失权重--foreground_dilation8前景掩码膨胀像素数--boxifyTrue是否将分割掩码转换为包围盒--learn_intrinsicsTrue是否学习相机内参--nolearn_intrinsics关闭--summary_freq100每 N 步保存一次 summary七、构建自己的训练数据要生成符合该格式的完整训练集官方推荐直接使用 Struct2depth 仓库中的数据生成脚本其输入为原始视频帧输出即索引文件 拼接 RGB 拼接掩码 内参文件四件套。整个流程的关键约束可归纳为序列长度固定为 3每张拼接图包含连续 3 帧宽度 单帧宽 × 3掩码必须存在-fseg后缀的掩码图与 RGB 图分辨率一致用于剔除动态物体内参必须真实_cam.txt中 9 个浮点数应来自真实标定因为水平翻转、缩放裁剪等数据增强都会按几何关系实时修正它索引与文件一一对应train.txt每行的子目录与帧 ID必须能解析出同名的.png、-fseg.png、_cam.txt三个文件。由于本项目的 reader.py 与 transform_utils.py 等模块均继承自 Struct2depth只要数据格式一致Struct2depth 生态内的工具链即可无缝对接本项目的训练入口python -m depth_from_video_in_the_wild.train。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐Ultralytics YOLO Depth8 数据集详解8 张图快速验证单目深度估计训练管线Ultralytics YOLO Depth8 数据集详解8 张图快速验证单目深度估计训练管线 Depth8 是 Ultralytics 深度估计任务内置的最人工智能计算机视觉深度学习机器学习预训练基于双像素Dual-Pixel的单摄像头深度估计数据集、评估指标与数据采集全流程解析基于双像素Dual Pixel的单摄像头深度估计数据集、评估指标与数据采集全流程解析 导读 本文围绕 dual_pixels 目录下的官方 README人工智能深度学习NLP计算机视觉强化学习Ultralytics YOLO 单目深度估计数据集完全指南PNG/NPY 深度图格式、YAML 配置与自定义数据集实战Ultralytics YOLO 单目深度估计数据集完全指南PNG/NPY 深度图格式、YAML 配置与自定义数据集实战 本文以 Ultralytics 仓库人工智能计算机视觉深度学习机器学习预训练上一篇如何用Euclid快速创建3D几何形状初学者必学的Extruding与Lathing技巧下一篇【性能革命】Maliang 3.1.3深度解析从内存泄漏到丝滑交互的控件生命周期管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表