Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add self supervised depth completion.
- Loading branch information
Showing
20 changed files
with
2,592 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
modelscope/models/cv/self_supervised_depth_completion/__init__.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Copyright (c) Alibaba, Inc. and its affiliates. | ||
from typing import TYPE_CHECKING | ||
|
||
from modelscope.utils.import_utils import LazyImportModule | ||
|
||
if TYPE_CHECKING: | ||
from .self_supervised_depth_completion import SelfSupervisedDepthCompletion | ||
else: | ||
_import_structure = { | ||
'selfsuperviseddepthcompletion': ['SelfSupervisedDepthCompletion'], | ||
} | ||
|
||
import sys | ||
|
||
sys.modules[__name__] = LazyImportModule( | ||
__name__, | ||
globals()['__file__'], | ||
_import_structure, | ||
module_spec=__spec__, | ||
extra_objects={}, | ||
) |
90 changes: 90 additions & 0 deletions
90
modelscope/models/cv/self_supervised_depth_completion/criteria.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
import torch | ||
import torch.nn as nn | ||
from modelscope.utils.logger import get_logger | ||
logger = get_logger() | ||
|
||
loss_names = ['l1', 'l2'] | ||
|
||
|
||
class MaskedMSELoss(nn.Module): | ||
def __init__(self): | ||
super(MaskedMSELoss, self).__init__() | ||
|
||
def forward(self, pred, target): | ||
assert pred.dim() == target.dim(), "inconsistent dimensions" | ||
valid_mask = (target > 0).detach() | ||
diff = target - pred | ||
diff = diff[valid_mask] | ||
self.loss = (diff**2).mean() | ||
return self.loss | ||
|
||
|
||
class MaskedL1Loss(nn.Module): | ||
def __init__(self): | ||
super(MaskedL1Loss, self).__init__() | ||
|
||
def forward(self, pred, target, weight=None): | ||
assert pred.dim() == target.dim(), "inconsistent dimensions" | ||
valid_mask = (target > 0).detach() | ||
diff = target - pred | ||
diff = diff[valid_mask] | ||
self.loss = diff.abs().mean() | ||
return self.loss | ||
|
||
|
||
class PhotometricLoss(nn.Module): | ||
def __init__(self): | ||
super(PhotometricLoss, self).__init__() | ||
|
||
def forward(self, target, recon, mask=None): | ||
|
||
assert recon.dim( | ||
) == 4, "expected recon dimension to be 4, but instead got {}.".format( | ||
recon.dim()) | ||
assert target.dim( | ||
) == 4, "expected target dimension to be 4, but instead got {}.".format( | ||
target.dim()) | ||
assert recon.size() == target.size(), "expected recon and target to have the same size, but got {} and {} instead"\ | ||
.format(recon.size(), target.size()) | ||
diff = (target - recon).abs() | ||
diff = torch.sum(diff, 1) # sum along the color channel | ||
|
||
# compare only pixels that are not black | ||
valid_mask = (torch.sum(recon, 1) > 0).float() * (torch.sum(target, 1) | ||
> 0).float() | ||
if mask is not None: | ||
valid_mask = valid_mask * torch.squeeze(mask).float() | ||
valid_mask = valid_mask.byte().detach() | ||
if valid_mask.numel() > 0: | ||
diff = diff[valid_mask] | ||
if diff.nelement() > 0: | ||
self.loss = diff.mean() | ||
else: | ||
logger.info( | ||
"warning: diff.nelement()==0 in PhotometricLoss (this is expected during early stage of training, try larger batch size)." | ||
) | ||
self.loss = 0 | ||
else: | ||
logger.info("warning: 0 valid pixel in PhotometricLoss") | ||
self.loss = 0 | ||
return self.loss | ||
|
||
|
||
class SmoothnessLoss(nn.Module): | ||
def __init__(self): | ||
super(SmoothnessLoss, self).__init__() | ||
|
||
def forward(self, depth): | ||
def second_derivative(x): | ||
assert x.dim( | ||
) == 4, "expected 4-dimensional data, but instead got {}".format( | ||
x.dim()) | ||
horizontal = 2 * x[:, :, 1:-1, 1:-1] - x[:, :, 1:-1, : | ||
-2] - x[:, :, 1:-1, 2:] | ||
vertical = 2 * x[:, :, 1:-1, 1:-1] - x[:, :, :-2, 1: | ||
-1] - x[:, :, 2:, 1:-1] | ||
der_2nd = horizontal.abs() + vertical.abs() | ||
return der_2nd.mean() | ||
|
||
self.loss = second_derivative(depth) | ||
return self.loss |
Empty file.
34 changes: 34 additions & 0 deletions
34
modelscope/models/cv/self_supervised_depth_completion/dataloaders/calib_cam_to_cam.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
calib_time: 09-Jan-2012 13:57:47 | ||
corner_dist: 9.950000e-02 | ||
S_00: 1.392000e+03 5.120000e+02 | ||
K_00: 9.842439e+02 0.000000e+00 6.900000e+02 0.000000e+00 9.808141e+02 2.331966e+02 0.000000e+00 0.000000e+00 1.000000e+00 | ||
D_00: -3.728755e-01 2.037299e-01 2.219027e-03 1.383707e-03 -7.233722e-02 | ||
R_00: 1.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e+00 | ||
T_00: 2.573699e-16 -1.059758e-16 1.614870e-16 | ||
S_rect_00: 1.242000e+03 3.750000e+02 | ||
R_rect_00: 9.999239e-01 9.837760e-03 -7.445048e-03 -9.869795e-03 9.999421e-01 -4.278459e-03 7.402527e-03 4.351614e-03 9.999631e-01 | ||
P_rect_00: 7.215377e+02 0.000000e+00 6.095593e+02 0.000000e+00 0.000000e+00 7.215377e+02 1.728540e+02 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e+00 0.000000e+00 | ||
S_01: 1.392000e+03 5.120000e+02 | ||
K_01: 9.895267e+02 0.000000e+00 7.020000e+02 0.000000e+00 9.878386e+02 2.455590e+02 0.000000e+00 0.000000e+00 1.000000e+00 | ||
D_01: -3.644661e-01 1.790019e-01 1.148107e-03 -6.298563e-04 -5.314062e-02 | ||
R_01: 9.993513e-01 1.860866e-02 -3.083487e-02 -1.887662e-02 9.997863e-01 -8.421873e-03 3.067156e-02 8.998467e-03 9.994890e-01 | ||
T_01: -5.370000e-01 4.822061e-03 -1.252488e-02 | ||
S_rect_01: 1.242000e+03 3.750000e+02 | ||
R_rect_01: 9.996878e-01 -8.976826e-03 2.331651e-02 8.876121e-03 9.999508e-01 4.418952e-03 -2.335503e-02 -4.210612e-03 9.997184e-01 | ||
P_rect_01: 7.215377e+02 0.000000e+00 6.095593e+02 -3.875744e+02 0.000000e+00 7.215377e+02 1.728540e+02 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e+00 0.000000e+00 | ||
S_02: 1.392000e+03 5.120000e+02 | ||
K_02: 9.597910e+02 0.000000e+00 6.960217e+02 0.000000e+00 9.569251e+02 2.241806e+02 0.000000e+00 0.000000e+00 1.000000e+00 | ||
D_02: -3.691481e-01 1.968681e-01 1.353473e-03 5.677587e-04 -6.770705e-02 | ||
R_02: 9.999758e-01 -5.267463e-03 -4.552439e-03 5.251945e-03 9.999804e-01 -3.413835e-03 4.570332e-03 3.389843e-03 9.999838e-01 | ||
T_02: 5.956621e-02 2.900141e-04 2.577209e-03 | ||
S_rect_02: 1.242000e+03 3.750000e+02 | ||
R_rect_02: 9.998817e-01 1.511453e-02 -2.841595e-03 -1.511724e-02 9.998853e-01 -9.338510e-04 2.827154e-03 9.766976e-04 9.999955e-01 | ||
P_rect_02: 7.215377e+02 0.000000e+00 6.095593e+02 4.485728e+01 0.000000e+00 7.215377e+02 1.728540e+02 2.163791e-01 0.000000e+00 0.000000e+00 1.000000e+00 2.745884e-03 | ||
S_03: 1.392000e+03 5.120000e+02 | ||
K_03: 9.037596e+02 0.000000e+00 6.957519e+02 0.000000e+00 9.019653e+02 2.242509e+02 0.000000e+00 0.000000e+00 1.000000e+00 | ||
D_03: -3.639558e-01 1.788651e-01 6.029694e-04 -3.922424e-04 -5.382460e-02 | ||
R_03: 9.995599e-01 1.699522e-02 -2.431313e-02 -1.704422e-02 9.998531e-01 -1.809756e-03 2.427880e-02 2.223358e-03 9.997028e-01 | ||
T_03: -4.731050e-01 5.551470e-03 -5.250882e-03 | ||
S_rect_03: 1.242000e+03 3.750000e+02 | ||
R_rect_03: 9.998321e-01 -7.193136e-03 1.685599e-02 7.232804e-03 9.999712e-01 -2.293585e-03 -1.683901e-02 2.415116e-03 9.998553e-01 | ||
P_rect_03: 7.215377e+02 0.000000e+00 6.095593e+02 -3.395242e+02 0.000000e+00 7.215377e+02 1.728540e+02 2.199936e+00 0.000000e+00 0.000000e+00 1.000000e+00 2.729905e-03 |
Oops, something went wrong.