尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

3 个函数跑通 nerfstudio 数据集去重:从重复图像检测到数据清洗实操

3 个函数跑通 nerfstudio 数据集去重:从重复图像检测到数据清洗实操 3 个函数跑通 nerfstudio 数据集去重从重复图像检测到数据清洗实操【免费下载链接】nerfstudioA collaboration friendly studio for NeRFs项目地址: https://gitcode.com/GitHub_Trending/ne/nerfstudio绕场景一周拍了 360 帧其中两帧是手抖重拍的同一画面。训练时这两个视角的 loss 每轮同步下探曲线出现周期性尖刺GPU 时间白白耗在冗余数据上。做 nerfstudio 数据集去重、重复图像检测靠的就是nerfstudio/process_data/process_data_utils.py里的三个函数list_images、get_image_filenames、copy_images_list不用额外 clone 仓库现有工具链就能串起发现 → 比对 → 清理。数据流视角去重发生在哪一步把ns_process_data的图像数据流拆成三段重复图像去重恰好卡在中间输入list_images(data, recursiveTrue)用 glob 扫描目录按扩展名jpg/jpeg/png/tif/tiff外加 CR2 原始片过滤出图像列表并排序是去重的候选池来源处理get_image_filenames(directory, max_num_images)在这个列表上做二次筛选支持等距抽帧。去重逻辑就挂在这一层——把筛选的对象从数量换成内容指纹只保留唯一路径输出copy_images_list(image_paths, image_dir, num_downscales, ...)接收筛好的路径子集拷贝到输出目录并统一重命名成frame_00001.jpg这类规范编号顺带做 RAW 转换和批量缩放。一个容易被忽略的细节copy_images_list在输出目录已存在时会先清空再写入重跑前记得传keep_image_dirTrue。操作路径发现、比对、清理第一步列出候选图像下面用内置函数列出数据集里的全部图像from pathlib import Path from nerfstudio.process_data import process_data_utils data Path(data/capture/images) image_paths process_data_utils.list_images(data, recursiveTrue) print(f共 {len(image_paths)} 张图像前 3 张{image_paths[:3]})为什么这样做list_images自带格式白名单和排序直接复用就不用手写 glob 规则排序还保证后续哈希比对结果可复现。第二步哈希比对去重用 MD5 给每张图片打字节指纹只保留首次出现的import hashlib def md5(p: Path) - str: # 分块读取大图不必整块载入内存 h hashlib.md5() with open(p, rb) as f: for chunk in iter(lambda: f.read(1 20), b): h.update(chunk) return h.hexdigest() seen, unique_paths set(), [] for p in image_paths: if md5(p) not in seen: seen.add(md5(p)) unique_paths.append(p) print(f去重后剩 {len(unique_paths)} 张)为什么这样做MD5 只捕获字节级完全一致的重复比对 O(n)、无依赖分块读避免一次性载入大文件。第三步复制非重复图像把去重后的列表交给copy_images_list落到新目录output Path(data/capture/unique) process_data_utils.copy_images_list( image_pathsunique_paths, image_diroutput, num_downscales0, image_prefixframe_, keep_image_dirTrue, # 防止重跑时清空已有输出 ) print(f已导出到 {output})为什么这样做交给copy_images_list而不是手动shutil.copy是因为它会按frame_00001.jpg统一重命名直接贴合 nerfstudio 数据预处理约定传keep_image_dirTrue是为了重跑时不清掉上次的导出结果。避坑与延伸 ⚠️MD5 相同 ≠ 视觉相同现象是两张曝光略异、旋转角不同的照片没被判重。原因是字节哈希对像素差异零容忍度为零只对完全一致敏感。正确做法对近似重复改用感知哈希如 imagehash 的 pHash或特征匹配来二次筛查。RAW 格式要先转再哈希现象是 .CR2 原片哈希全部唯一但其中几帧和已转出的 JPG 其实是同一画面。原因是 CR2 二进制字节不代表最终视觉内容。正确做法copy_images_list内部会把 RAW 转成.jpg哈希应打在转换后的结果上而不是原始字节上。大目录下递归 glob 有性能陷阱现象是数据集里混着几万张缩略图和导出的点云文件时list_images(recursiveTrue)明显变慢。原因是递归 glob 要遍历整棵目录树。正确做法扁平目录传recursiveFalse或把data直接指到图像子目录。更多约定图像命名、目录结构、数据管理器如何消费处理结果可参考官方文档docs/quickstart/数据处理源码nerfstudio/process_data/遇到具体数据集的兼容问题建议直接到 GitHub Issues 提交流程和复现路径那里能看到同类问题的最新讨论。【免费下载链接】nerfstudioA collaboration friendly studio for NeRFs项目地址: https://gitcode.com/GitHub_Trending/ne/nerfstudio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表