Skip to content

Commit

Permalink
add self supervised depth completion.
Browse files Browse the repository at this point in the history
  • Loading branch information
heyyxd committed Jan 8, 2024
1 parent 0b1a974 commit 7730714
Show file tree
Hide file tree
Showing 20 changed files with 2,592 additions and 2 deletions.
8 changes: 7 additions & 1 deletion modelscope/metainfo.py
Expand Up @@ -129,6 +129,7 @@ class Models(object):
image_control_3d_portrait = 'image-control-3d-portrait'
rife = 'rife'
anydoor = 'anydoor'
self_supervised_depth_completion = 'self-supervised-depth-completion'

# nlp models
bert = 'bert'
Expand Down Expand Up @@ -460,6 +461,7 @@ class Pipelines(object):
rife_video_frame_interpolation = 'rife-video-frame-interpolation'
anydoor = 'anydoor'
image_to_3d = 'image-to-3d'
self_supervised_depth_completion = 'self-supervised-depth-completion'

# nlp tasks
automatic_post_editing = 'automatic-post-editing'
Expand Down Expand Up @@ -941,7 +943,10 @@ class Pipelines(object):
'damo/cv_image-view-transform'),
Tasks.image_control_3d_portrait: (
Pipelines.image_control_3d_portrait,
'damo/cv_vit_image-control-3d-portrait-synthesis')
'damo/cv_vit_image-control-3d-portrait-synthesis'),
Tasks.self_supervised_depth_completion: (
Pipelines.self_supervised_depth_completion,
'damo/self-supervised-depth-completion')
}


Expand All @@ -964,6 +969,7 @@ class CVTrainers(object):
nerf_recon_4k = 'nerf-recon-4k'
action_detection = 'action-detection'
vision_efficient_tuning = 'vision-efficient-tuning'
self_supervised_depth_completion = 'self-supervised-depth-completion'


class NLPTrainers(object):
Expand Down
21 changes: 21 additions & 0 deletions modelscope/models/cv/self_supervised_depth_completion/__init__.py
@@ -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 modelscope/models/cv/self_supervised_depth_completion/criteria.py
@@ -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.
@@ -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

0 comments on commit 7730714

Please sign in to comment.