Skip to content

Commit 0e3138e

Browse files
shapovalovfacebook-github-bot
authored andcommitted
Optional ground-truth depth maps in visualiser
Summary: The code does not crash if depth map/mask are not given. Reviewed By: bottler Differential Revision: D45082985 fbshipit-source-id: 3610d8beb4ac897fbbe52f56a6dd012a6365b89b
1 parent 1af6bf4 commit 0e3138e

File tree

3 files changed

+42
-36
lines changed

3 files changed

+42
-36
lines changed

pytorch3d/implicitron/evaluation/evaluate_new_view_synthesis.py

+38-34
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ class _Visualizer:
3838
image_render: torch.Tensor
3939
image_rgb_masked: torch.Tensor
4040
depth_render: torch.Tensor
41-
depth_map: torch.Tensor
42-
depth_mask: torch.Tensor
41+
depth_map: Optional[torch.Tensor]
42+
depth_mask: Optional[torch.Tensor]
4343

4444
visdom_env: str = "eval_debug"
4545

@@ -75,9 +75,11 @@ def show_depth(
7575
viz = self._viz
7676
viz.images(
7777
torch.cat(
78-
(
79-
make_depth_image(self.depth_render, loss_mask_now),
80-
make_depth_image(self.depth_map, loss_mask_now),
78+
(make_depth_image(self.depth_render, loss_mask_now),)
79+
+ (
80+
(make_depth_image(self.depth_map, loss_mask_now),)
81+
if self.depth_map is not None
82+
else ()
8183
),
8284
dim=3,
8385
),
@@ -91,42 +93,44 @@ def show_depth(
9193
win="depth_abs" + name_postfix + "_mask",
9294
opts={"title": f"depth_abs_{name_postfix}_{depth_loss:1.2f}_mask"},
9395
)
94-
viz.images(
95-
self.depth_mask,
96-
env=self.visdom_env,
97-
win="depth_abs" + name_postfix + "_maskd",
98-
opts={"title": f"depth_abs_{name_postfix}_{depth_loss:1.2f}_maskd"},
99-
)
96+
if self.depth_mask is not None:
97+
viz.images(
98+
self.depth_mask,
99+
env=self.visdom_env,
100+
win="depth_abs" + name_postfix + "_maskd",
101+
opts={"title": f"depth_abs_{name_postfix}_{depth_loss:1.2f}_maskd"},
102+
)
100103

101104
# show the 3D plot
102105
# pyre-fixme[9]: viewpoint_trivial has type `PerspectiveCameras`; used as
103106
# `TensorProperties`.
104107
viewpoint_trivial: PerspectiveCameras = PerspectiveCameras().to(
105108
loss_mask_now.device
106109
)
107-
pcl_pred = get_rgbd_point_cloud(
108-
viewpoint_trivial,
109-
self.image_render,
110-
self.depth_render,
111-
# mask_crop,
112-
torch.ones_like(self.depth_render),
113-
# loss_mask_now,
114-
)
115-
pcl_gt = get_rgbd_point_cloud(
116-
viewpoint_trivial,
117-
self.image_rgb_masked,
118-
self.depth_map,
119-
# mask_crop,
120-
torch.ones_like(self.depth_map),
121-
# loss_mask_now,
122-
)
123110
_pcls = {
124-
pn: p
125-
for pn, p in zip(("pred_depth", "gt_depth"), (pcl_pred, pcl_gt))
126-
if int(p.num_points_per_cloud()) > 0
111+
"pred_depth": get_rgbd_point_cloud(
112+
viewpoint_trivial,
113+
self.image_render,
114+
self.depth_render,
115+
# mask_crop,
116+
torch.ones_like(self.depth_render),
117+
# loss_mask_now,
118+
)
127119
}
120+
if self.depth_map is not None:
121+
_pcls["gt_depth"] = get_rgbd_point_cloud(
122+
viewpoint_trivial,
123+
self.image_rgb_masked,
124+
self.depth_map,
125+
# mask_crop,
126+
torch.ones_like(self.depth_map),
127+
# loss_mask_now,
128+
)
129+
130+
_pcls = {pn: p for pn, p in _pcls.items() if int(p.num_points_per_cloud()) > 0}
131+
128132
plotlyplot = plot_scene(
129-
{f"pcl{name_postfix}": _pcls},
133+
{f"pcl{name_postfix}": _pcls}, # pyre-ignore
130134
camera_scale=1.0,
131135
pointcloud_max_points=10000,
132136
pointcloud_marker_size=1,
@@ -277,10 +281,10 @@ def eval_batch(
277281
image_render=image_render,
278282
image_rgb_masked=image_rgb_masked,
279283
depth_render=cloned_render["depth_render"],
280-
# pyre-fixme[6]: Expected `Tensor` for 4th param but got
281-
# `Optional[torch.Tensor]`.
282284
depth_map=frame_data.depth_map,
283-
depth_mask=frame_data.depth_mask[:1],
285+
depth_mask=frame_data.depth_mask[:1]
286+
if frame_data.depth_mask is not None
287+
else None,
284288
visdom_env=visualize_visdom_env,
285289
)
286290

pytorch3d/implicitron/models/generic_model.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ def forward(
360360
and source images, which will be used for intersecting with target rays.
361361
fg_probability: A tensor of shape `(B, 1, H, W)` containing a batch of
362362
foreground masks.
363-
mask_crop: A binary tensor of shape `(B, 1, H, W)` deonting valid
363+
mask_crop: A binary tensor of shape `(B, 1, H, W)` denoting valid
364364
regions in the input images (i.e. regions that do not correspond
365365
to, e.g., zero-padding). When the `RaySampler`'s sampling mode is set to
366366
"mask_sample", rays will be sampled in the non zero regions.

tests/implicitron/test_dataset_visualize.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
from .common_resources import get_skateboard_data
2828

29+
VISDOM_PORT = int(os.environ.get("VISDOM_PORT", 8097))
30+
2931

3032
class TestDatasetVisualize(unittest.TestCase):
3133
def setUp(self):
@@ -77,7 +79,7 @@ def setUp(self):
7779
for k, dataset in self.datasets.items()
7880
}
7981
)
80-
self.visdom = Visdom()
82+
self.visdom = Visdom(port=VISDOM_PORT)
8183
if not self.visdom.check_connection():
8284
print("Visdom server not running! Disabling visdom visualizations.")
8385
self.visdom = None

0 commit comments

Comments
 (0)