Fix camera clone() with torch.save

Summary:
User reported that cloned cameras fail to save. The error with latest PyTorch is

```
pickle.PicklingError: Can't pickle ~T_destination: attribute lookup T_destination on torch.nn.modules.module failed
```

This fixes it.

Reviewed By: btgraham

Differential Revision: D39692258

fbshipit-source-id: 75bbf3b8dfa0023dc28bf7d4cc253ca96e46a64d
This commit is contained in:
Jeremy Reizenstein 2022-09-22 14:52:09 -07:00 committed by Facebook GitHub Bot
parent ce3fce49d7
commit efea540bbc
2 changed files with 8 additions and 2 deletions

View File

@ -8,7 +8,7 @@
import copy
import inspect
import warnings
from typing import Any, List, Optional, Tuple, Union
from typing import Any, List, Optional, Tuple, TypeVar, Union
import numpy as np
import torch
@ -191,7 +191,7 @@ class TensorProperties(nn.Module):
"""
for k in dir(self):
v = getattr(self, k)
if inspect.ismethod(v) or k.startswith("__"):
if inspect.ismethod(v) or k.startswith("__") or type(v) is TypeVar:
continue
if torch.is_tensor(v):
v_clone = v.clone()

View File

@ -31,6 +31,7 @@
# SOFTWARE.
import math
import pickle
import typing
import unittest
from itertools import product
@ -1333,6 +1334,11 @@ class TestPerspectiveProjection(TestCaseMixin, unittest.TestCase):
# Check in_ndc is handled correctly
self.assertEqual(cam._in_ndc, c0._in_ndc)
def test_clone_picklable(self):
camera = PerspectiveCameras()
pickle.dumps(camera)
pickle.dumps(camera.clone())
############################################################
# FishEye Camera #