让你的照片变成3D!

2022-05-30 18:41:20 浏览数 (2)

如今AI越来越强大,居然能够让一张静态图片变成3D动图,有够神奇!

我们用腾讯云GPU服务器来体验一下这个开源项目的神奇之处吧~

云端GPU真的是解决了不少本地的难题

开始前的准备

  • Linux
  • Anaconda
  • Python 3.9
  • PyTorch 1.4.0

以及需求中列出的 Python 依赖项。

  • 要开始使用,请运行以下命令:
代码语言:txt复制

conda create -n 3DP python=3.7 anaconda

conda activate 3DP

pip install -r requirements.txt

conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit==10.1.243 -c pytorch

代码语言:txt复制
  • 接下来,请使用以下命令下载模型重量:
代码语言:txt复制

chmod x download.sh

./download.sh

代码语言:txt复制

开始使用

  1. 将文件(例如,test.jpg)放入文件夹中。
代码语言:txt复制

.jpg

代码语言:txt复制
代码语言:txt复制

image

代码语言:txt复制
  • 例如,image/moon.jpg
  1. 运行以下命令
代码语言:txt复制

python main.py --config argument.yml

代码语言:txt复制
  • 注意:3D照片生成过程通常需要大约2-3分钟,具体取决于可用的计算资源。
  1. 结果存储在以下目录中:
  • 由MiDaS估计的相应深度图
代码语言:txt复制
 - 例如,`depth/moon.npy``depth/moon.png`
代码语言:txt复制
 - 用户可以手动编辑。
代码语言:txt复制
   ```
代码语言:txt复制
   depth/moon.png
代码语言:txt复制
   ```
代码语言:txt复制
   - 如果用户希望使用手动编辑作为3D照片的输入,请记住设置下面列出的以下两个标志。
代码语言:txt复制
     ```
代码语言:txt复制
     depth/moon.png
代码语言:txt复制
     ```
代码语言:txt复制
     - `depth_format: '.png'`
     - `require_midas: False`
  • 上色3D网格(可选:用户需要打开标志)
代码语言:txt复制
 ```
代码语言:txt复制
 save_ply
代码语言:txt复制
 ```
代码语言:txt复制
 - 例如:`mesh/moon.ply`
  • 具有放大运动的渲染视频
代码语言:txt复制
 - 例如:`video/moon_zoom-in.mp4`
  • 具有摆动动作的渲染视频
代码语言:txt复制
 - 例如:`video/moon_swing.mp4`
  • 具有圆圈运动的渲染视频
代码语言:txt复制
 - 例如:`video/moon_circle.mp4`
  • 具有小车放大效果的渲染视频
代码语言:txt复制
 - 例如:`video/moon_dolly-zoom-in.mp4`
 - 注意:我们假设焦点对象位于图像的中心。
  1. (可选)如果要更改默认配置。请阅读 DOCUMENTATION.md 并修改。argument.yml

下面是官方的一些参数配置:

  • depth_edge_model_ckpt: checkpoints/EdgeModel.pth
  • 深度边缘内画的预训练模型
  • depth_feat_model_ckpt: checkpoints/DepthModel.pth
  • 深度内画的预训练模型
  • rgb_feat_model_ckpt: checkpoints/ColorModel.pth
  • 预训练的颜色内画模型
  • MiDaS_model_ckpt: MiDaS/model.pt
  • 深度估计的预训练模型
  • use_boostmonodepth: True
  • 使用 BoostMonocularDepth 获得更清晰的单目深度估计
  • fps: 40
  • 每秒输出渲染视频的帧数
  • num_frames: 240
  • 输出渲染视频中的总帧数
  • x_shift_range: [-0.03, -0.03, -0.03]
  • 输出渲染视频的 x 轴上的平移。
  • 此参数是一个列表。每个元素对应于特定的摄像机运动。
  • y_shift_range: [-0.00, -0.00, -0.03]
  • 输出渲染视频的 y 轴上的平移。
  • 此参数是一个列表。每个元素对应于特定的摄像机运动。
  • z_shift_range: [-0.07, -0.07, -0.07]
  • 输出渲染视频的 z 轴上的平移。
  • 此参数是一个列表。每个元素对应于特定的摄像机运动。
  • traj_types: ['straight-line', 'circle', 'circle']
  • 相机轨迹的类型。
  • 此参数是一个列表。
  • 目前,我们只 privode 和 .straight-line``circle
  • video_postfix: ['zoom-in', 'swing', 'circle']
  • 视频的后缀。
  • 此参数是一个列表。
  • 请注意,、 、 和 中的元素数应相等。x_shift_range``y_shift_range``z_shift_range``traj_types``video_postfix
  • specific: ''
  • 特定的映像名称,用于指定要执行的映像。默认情况下,将执行文件夹中的所有图像。
  • longer_side_len: 960
  • 输出分辨率中较大尺寸的长度。
  • src_folder: image
  • 输入图像目录。
  • depth_folder: depth
  • 估计深度目录。
  • mesh_folder: mesh
  • 输出 3-D 网格目录。
  • video_folder: video
  • 输出渲染的视频目录
  • load_ply: False
  • 加载已存在的网格 (.ply) 文件的操作
  • save_ply: True
  • 存储输出网格 (.ply) 文件的操作
  • 禁用此选项可减少计算时间。save_ply: False
  • inference_video: True
  • 渲染输出视频的操作
  • gpu_ids: 0
  • 工作 GPU 的 ID。将其留空或负数以使用 CPU。
  • offscreen_rendering: True
  • 如果您在远程服务器(通过 ssh)中执行该过程,请打开此标志。
  • 有时,使用屏幕外渲染会导致执行时间延长。
  • img_format: '.jpg'
  • 输入图像格式。
  • depth_format: '.npy'
  • 输入深度(视差)格式。使用NumPy数组文件作为默认值。
  • 如果用户想要手动编辑深度(视差)图,我们提供格式深度(视差)图。
代码语言:txt复制
```
代码语言:txt复制
.png
代码语言:txt复制
```
代码语言:txt复制
- 请记住在使用具有格式的深度(视差)映射时将此参数从 切换到 。`.npy``.png``.png`
  • require_midas: True
  • 如果用户想要使用 由 估计的深度图,请将其设置为 。True``MiDaS
  • 如果用户想要使用手动编辑的深度图,请将其设置为。False
  • 如果用户想要手动编辑深度(视差)图,我们提供格式深度(视差)图。
代码语言:txt复制
```
代码语言:txt复制
.png
代码语言:txt复制
```
代码语言:txt复制
- 请记住在使用手动编辑的深度图时将此参数从 切换到 。`True``False`
  • depth_threshold: 0.04
  • 视差中的阈值,相邻的两个像素是不连续像素,如果它们之间的差异超过此数字。
  • ext_edge_threshold: 0.002
  • 用于定义内画深度边缘的阈值。如果内画边缘贴图中的像素值超过此数字,则该像素属于扩展深度边缘,
  • sparse_iter: 5
  • 双边中值滤波器的总迭代次数
  • filter_size: [7, 7, 5, 5, 5]
  • 每次迭代中双边中值筛选器的窗口大小。
  • sigma_s: 4.0
  • 双侧中值滤波器的强度项
  • sigma_r: 0.5
  • 双边中值滤波器的空间项
  • redundant_number: 12
  • 该数字定义了短段。如果深度边短于此数字,则该深度边为短段并被移除。
  • background_thickness: 70
  • 合成面积的厚度。
  • context_thickness: 140
  • 上下文区域的厚度。
  • background_thickness_2: 70
  • 第二次上色时合成区域的厚度。
  • context_thickness_2: 70
  • 第二次上色时上下文区域的厚度。
  • discount_factor: 1.00
  • log_depth: True
  • 深度内画的比例。如果为 true,则在对数缩放中执行内画。否则,以线性比例执行。
  • largest_size: 512
  • 最大尺寸的内嵌图像贴片。
  • depth_edge_dilate: 10
  • 膨胀合成区域的厚度。
  • depth_edge_dilate_2: 5
  • 第二次上色时膨胀合成区域的厚度。
  • extrapolate_border: True
  • 向边界外推的操作。
  • extrapolation_thickness: 60
  • 外推面积的厚度。
  • repeat_inpaint_edge: True
  • 重复应用深度边缘内画模型的操作。有时,一旦内画深度边缘导致短的内嵌边缘,重复应用深度边缘内画可以帮助您延长内画的深度边缘。
  • crop_border: [0.03, 0.03, 0.05, 0.03]
  • 要在边框周围裁剪的像素分数。[top, left, bottom, right]
  • anti_flickering: True
  • 避免输出视频中闪烁效果的操作。
  • 这可能会导致渲染阶段的计算时间更长。

0 人点赞