【code】Dynamic NeRF | generate_data

源代码:Dynamic NeRF | generate_data 用来从video中按照一定帧率抽取图像,并用Maskcnn产生背景掩码

torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)使用预训练权重的maskrcnn

os.path.basename()返回path最后的文件名

os.path.splitext(“文件路径”) 分离文件名与扩展名

imageio.get_reader()使用imageio库来读取视频;可以用fps = reader.get_meta_data()[‘fps’]获取帧率

np.ceil()向上取整,比如2.3取为3

torchvision.transforms.functional.to_tensor(img) 将PIL image 或者 arrary 转换为 tensor,会把图像从[0, 255]归一化到[0.0, 1.0]

torch.FloatTensor(H, W).fill_(1.0) 类型转换, 将list ,numpy转化为tensor,并用1.0来填充tensor(H,W)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
def multi_view_multi_time(args):
    """
    Generating multi view multi time data
    """

    Maskrcnn = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True).cuda().eval()
    # Maskrcnn = torchvision.models.detection.maskrcnn_resnet50_fpn(weights=True).cuda().eval()
    # Maskrcnn = torchvision.models.detection.maskrcnn_resnet50_fpn(weights=True).cuda().eval()

    threshold = 0.5


    videoname, ext = os.path.splitext(os.path.basename(args.videopath))
    # 怎么读视频
    imgs = []
    reader = imageio.get_reader(args.videopath)
    for i, im in enumerate(reader):
        imgs.append(im)


    imgs = np.array(imgs)
    # 如果num_frames是112
    num_frames, H, W, _ = imgs.shape
    imgs = imgs[::int(np.ceil(num_frames / 100))]

    create_dir(os.path.join(args.data_dir, videoname, 'images'))
    create_dir(os.path.join(args.data_dir, videoname, 'images_colmap'))
    create_dir(os.path.join(args.data_dir, videoname, 'background_mask'))

    for idx, img in enumerate(imgs):
        print(idx)
        #写入png、jpg格式的图像
        imageio.imwrite(os.path.join(args.data_dir, videoname, 'images', str(idx).zfill(3) + '.png'), img)
        imageio.imwrite(os.path.join(args.data_dir, videoname, 'images_colmap', str(idx).zfill(3) + '.jpg'), img)

        # Get coarse background mask
        RGB---->  Tensor--->cuda
        img = torchvision.transforms.functional.to_tensor(img).to(device)
        background_mask = torch.FloatTensor(H, W).fill_(1.0).to(device)
        #预测背景mask
        objPredictions = Maskrcnn([img])[0]

        for intMask in range(len(objPredictions['masks'])):
            if objPredictions['scores'][intMask].item() > threshold:
                if objPredictions['labels'][intMask].item() == 1: # person
                    background_mask[objPredictions['masks'][intMask, 0, :, :] > threshold] = 0.0

        background_mask_np = ((background_mask.cpu().numpy() > 0.1) * 255).astype(np.uint8)
        imageio.imwrite(os.path.join(args.data_dir, videoname, 'background_mask', str(idx).zfill(3) + '.jpg.png'), background_mask_np)
### 下载并准备 NeRF LLFF 数据集 为了下载 `nerf_llff_data` 数据集,可以按照以下方法操作: #### 方法一:通过官方资源获取 如果存在官方发布的数据集链接或存储库地址,则可以直接从这些位置下载所需的数据。通常情况下,研究论文会提供相应的GitHub页面或其他形式的公开访问入口。 #### 方法二:构建自定义LLFF数据集 当无法直接获得预处理好的LLFF格式数据时,可以根据特定需求自行采集图像序列,并利用工具将其转化为适合NeRF模型使用的结构化输入。这涉及到几个关键步骤[^1]: - **收集多视角图片**:围绕目标物体拍摄一系列不同角度的照片。 - **运行图像姿态估计程序**:使用COLMAP等软件来计算相机参数以及场景几何关系。 - **调整文件路径与命名规则**:确保最终得到的结果符合预期加载方式的要求。 对于已经拥有类似`plant`, `doll`, 或者其他对象名称作为子目录名的情况,在将新创建的数据放入`nerf-pytorch/data/nerf_llff_data/`之前,请确认其内部包含了必要的JSON配置文件(如`transforms_train.json`) 和对应的图像素材[^4]。 另外需要注意的是,在实际应用过程中可能还需要修改一些额外设置项以便更好地适配具体环境下的硬件条件和性能偏好。例如,在配置文件中指定日志保存位置(`basedir`)、源数据所在路径(`datadir`)以及其他超参数选项等[^2][^3]。 ```bash # 假设当前位于nerf-pytorch根目录下 mkdir -p data/nerf_llff_data/ cd data/nerf_llff_data/ # 此处应替换为真实的下载命令或者解压已有的压缩包 wget http://example.com/path/to/your_dataset.zip unzip your_dataset.zip ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值