pablovela5620 commited on
Commit
c2a846f
1 Parent(s): 4556a93

Add DSINE model prediction functionality and user agreement modal

Browse files
Files changed (10) hide show
  1. .dockerignore +2 -1
  2. .gitignore +162 -0
  3. main.py +75 -4
  4. models/dsine.py +233 -0
  5. models/submodules.py +194 -0
  6. pixi.lock +658 -87
  7. pixi.toml +12 -2
  8. test.py +86 -0
  9. utils/rotation.py +85 -0
  10. utils/utils.py +105 -0
.dockerignore CHANGED
@@ -1 +1,2 @@
1
- .pixi/
 
 
1
+ .pixi/
2
+ checkpoints/
.gitignore CHANGED
@@ -1,3 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # pixi environments
2
  .pixi
 
 
3
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+
112
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
+ __pypackages__/
114
+
115
+ # Celery stuff
116
+ celerybeat-schedule
117
+ celerybeat.pid
118
+
119
+ # SageMath parsed files
120
+ *.sage.py
121
+
122
+ # Environments
123
+ .env
124
+ .venv
125
+ env/
126
+ venv/
127
+ ENV/
128
+ env.bak/
129
+ venv.bak/
130
+
131
+ # Spyder project settings
132
+ .spyderproject
133
+ .spyproject
134
+
135
+ # Rope project settings
136
+ .ropeproject
137
+
138
+ # mkdocs documentation
139
+ /site
140
+
141
+ # mypy
142
+ .mypy_cache/
143
+ .dmypy.json
144
+ dmypy.json
145
+
146
+ # Pyre type checker
147
+ .pyre/
148
+
149
+ # pytype static type analyzer
150
+ .pytype/
151
+
152
+ # Cython debug symbols
153
+ cython_debug/
154
+
155
+ # PyCharm
156
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
159
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160
+ #.idea/
161
  # pixi environments
162
  .pixi
163
+ samples/*
164
+ checkpoints/*
165
 
main.py CHANGED
@@ -1,9 +1,80 @@
1
  import gradio as gr
 
 
2
 
 
3
 
4
- def greet(name):
5
- return "Hello " + name + "!"
 
 
 
6
 
 
7
 
8
- demo = gr.Interface(fn=greet, inputs="text", outputs="text")
9
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from gradio_modal import Modal
3
+ from gradio_imageslider import ImageSlider
4
 
5
+ import numpy as np
6
 
7
+ import torch
8
+ import torch.nn.functional as F
9
+ from torchvision import transforms
10
+ from PIL import Image
11
+ import utils.utils as utils
12
 
13
+ from models.dsine import DSINE
14
 
15
+ device = torch.device("cpu")
16
+
17
+ model = DSINE().to(device)
18
+ model.pixel_coords = model.pixel_coords.to(device)
19
+ model = utils.load_checkpoint("./checkpoints/dsine.pt", model)
20
+ model.eval()
21
+
22
+
23
+ def predict_normal(img_np: np.ndarray):
24
+ # normalize
25
+ normalize = transforms.Normalize(
26
+ mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
27
+ )
28
+
29
+ with torch.no_grad():
30
+ img = np.array(img_np).astype(np.float32) / 255.0
31
+ img = torch.from_numpy(img).permute(2, 0, 1).unsqueeze(0).to("cpu")
32
+ _, _, orig_H, orig_W = img.shape
33
+
34
+ # zero-pad the input image so that both the width and height are multiples of 32
35
+ l, r, t, b = utils.pad_input(orig_H, orig_W)
36
+ img = F.pad(img, (l, r, t, b), mode="constant", value=0.0)
37
+ img = normalize(img)
38
+
39
+ # NOTE: if intrins is not given, we just assume that the principal point is at the center
40
+ # and that the field-of-view is 60 degrees (feel free to modify this assumption)
41
+ intrins = utils.get_intrins_from_fov(
42
+ new_fov=60.0, H=orig_H, W=orig_W, device="cpu"
43
+ ).unsqueeze(0)
44
+
45
+ intrins[:, 0, 2] += l
46
+ intrins[:, 1, 2] += t
47
+
48
+ pred_norm = model(img, intrins=intrins)[-1]
49
+ pred_norm = pred_norm[:, :, t : t + orig_H, l : l + orig_W]
50
+
51
+ # save to output folder
52
+ # NOTE: by saving the prediction as uint8 png format, you lose a lot of precision
53
+ # if you want to use the predicted normals for downstream tasks, we recommend saving them as float32 NPY files
54
+ pred_norm_np = (
55
+ pred_norm.cpu().detach().numpy()[0, :, :, :].transpose(1, 2, 0)
56
+ ) # (H, W, 3)
57
+ pred_norm_np = ((pred_norm_np + 1.0) / 2.0 * 255.0).astype(np.uint8)
58
+
59
+ return (img_np, pred_norm_np)
60
+
61
+
62
+ with gr.Blocks() as demo:
63
+ with gr.Group():
64
+ with gr.Row():
65
+ input_img = gr.Image(label="Input image", image_mode="RGB")
66
+ output_img = ImageSlider(label="Surface Normal", type="numpy")
67
+ # output_img = gr.Image(label="Normal")
68
+
69
+ btn = gr.Button("Predict")
70
+ btn.click(fn=predict_normal, inputs=[input_img], outputs=[output_img])
71
+
72
+ with Modal(visible=True, allow_user_close=False) as modal:
73
+ gr.Markdown(
74
+ "To use this space, you must agree to the terms and conditions. found [here](https://github.com/baegwangbin/DSINE/blob/main/LICENSE)."
75
+ )
76
+ btn = gr.Button("I agree")
77
+ btn.click(lambda: Modal(visible=False), None, modal)
78
+
79
+ if __name__ == "__main__":
80
+ demo.launch(server_name="0.0.0.0", server_port=7860)
models/dsine.py ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import torch
3
+ import torch.nn as nn
4
+ import torch.nn.functional as F
5
+
6
+ from models.submodules import Encoder, ConvGRU, UpSampleBN, UpSampleGN, RayReLU, \
7
+ convex_upsampling, get_unfold, get_prediction_head, \
8
+ INPUT_CHANNELS_DICT
9
+ from utils.rotation import axis_angle_to_matrix
10
+
11
+
12
+ class Decoder(nn.Module):
13
+ def __init__(self, output_dims, B=5, NF=2048, BN=False, downsample_ratio=8):
14
+ super(Decoder, self).__init__()
15
+ input_channels = INPUT_CHANNELS_DICT[B]
16
+ output_dim, feature_dim, hidden_dim = output_dims
17
+ features = bottleneck_features = NF
18
+ self.downsample_ratio = downsample_ratio
19
+
20
+ UpSample = UpSampleBN if BN else UpSampleGN
21
+ self.conv2 = nn.Conv2d(bottleneck_features + 2, features, kernel_size=1, stride=1, padding=0)
22
+ self.up1 = UpSample(skip_input=features // 1 + input_channels[1] + 2, output_features=features // 2, align_corners=False)
23
+ self.up2 = UpSample(skip_input=features // 2 + input_channels[2] + 2, output_features=features // 4, align_corners=False)
24
+
25
+ # prediction heads
26
+ i_dim = features // 4
27
+ h_dim = 128
28
+ self.normal_head = get_prediction_head(i_dim+2, h_dim, output_dim)
29
+ self.feature_head = get_prediction_head(i_dim+2, h_dim, feature_dim)
30
+ self.hidden_head = get_prediction_head(i_dim+2, h_dim, hidden_dim)
31
+
32
+ def forward(self, features, uvs):
33
+ _, _, x_block2, x_block3, x_block4 = features[4], features[5], features[6], features[8], features[11]
34
+ uv_32, uv_16, uv_8 = uvs
35
+
36
+ x_d0 = self.conv2(torch.cat([x_block4, uv_32], dim=1))
37
+ x_d1 = self.up1(x_d0, torch.cat([x_block3, uv_16], dim=1))
38
+ x_feat = self.up2(x_d1, torch.cat([x_block2, uv_8], dim=1))
39
+ x_feat = torch.cat([x_feat, uv_8], dim=1)
40
+
41
+ normal = self.normal_head(x_feat)
42
+ normal = F.normalize(normal, dim=1)
43
+ f = self.feature_head(x_feat)
44
+ h = self.hidden_head(x_feat)
45
+ return normal, f, h
46
+
47
+
48
+ class DSINE(nn.Module):
49
+ def __init__(self):
50
+ super(DSINE, self).__init__()
51
+ self.downsample_ratio = 8
52
+ self.ps = 5 # patch size
53
+ self.num_iter = 5 # num iterations
54
+
55
+ # define encoder
56
+ self.encoder = Encoder(B=5, pretrained=True)
57
+
58
+ # define decoder
59
+ self.output_dim = output_dim = 3
60
+ self.feature_dim = feature_dim = 64
61
+ self.hidden_dim = hidden_dim = 64
62
+ self.decoder = Decoder([output_dim, feature_dim, hidden_dim], B=5, NF=2048, BN=False)
63
+
64
+ # ray direction-based ReLU
65
+ self.ray_relu = RayReLU(eps=1e-2)
66
+
67
+ # pixel_coords (1, 3, H, W)
68
+ # NOTE: this is set to some arbitrarily high number,
69
+ # if your input is 2000+ pixels wide/tall, increase these values
70
+ h = 2000
71
+ w = 2000
72
+ pixel_coords = np.ones((3, h, w)).astype(np.float32)
73
+ x_range = np.concatenate([np.arange(w).reshape(1, w)] * h, axis=0)
74
+ y_range = np.concatenate([np.arange(h).reshape(h, 1)] * w, axis=1)
75
+ pixel_coords[0, :, :] = x_range + 0.5
76
+ pixel_coords[1, :, :] = y_range + 0.5
77
+ self.pixel_coords = torch.from_numpy(pixel_coords).unsqueeze(0)
78
+
79
+ # define ConvGRU cell
80
+ self.gru = ConvGRU(hidden_dim=hidden_dim, input_dim=feature_dim+2, ks=self.ps)
81
+
82
+ # padding used during NRN
83
+ self.pad = (self.ps - 1) // 2
84
+
85
+ # prediction heads
86
+ self.prob_head = get_prediction_head(self.hidden_dim+2, 64, self.ps*self.ps) # weights assigned for each nghbr pixel
87
+ self.xy_head = get_prediction_head(self.hidden_dim+2, 64, self.ps*self.ps*2) # rotation axis for each nghbr pixel
88
+ self.angle_head = get_prediction_head(self.hidden_dim+2, 64, self.ps*self.ps) # rotation angle for each nghbr pixel
89
+
90
+ # prediction heads - weights used for upsampling the coarse resolution output
91
+ self.up_prob_head = get_prediction_head(self.hidden_dim+2, 64, 9 * self.downsample_ratio * self.downsample_ratio)
92
+
93
+ def get_ray(self, intrins, H, W, orig_H, orig_W, return_uv=False):
94
+ B, _, _ = intrins.shape
95
+ fu = intrins[:, 0, 0][:,None,None] * (W / orig_W)
96
+ cu = intrins[:, 0, 2][:,None,None] * (W / orig_W)
97
+ fv = intrins[:, 1, 1][:,None,None] * (H / orig_H)
98
+ cv = intrins[:, 1, 2][:,None,None] * (H / orig_H)
99
+
100
+ # (B, 2, H, W)
101
+ ray = self.pixel_coords[:, :, :H, :W].repeat(B, 1, 1, 1)
102
+ ray[:, 0, :, :] = (ray[:, 0, :, :] - cu) / fu
103
+ ray[:, 1, :, :] = (ray[:, 1, :, :] - cv) / fv
104
+
105
+ if return_uv:
106
+ return ray[:, :2, :, :]
107
+ else:
108
+ return F.normalize(ray, dim=1)
109
+
110
+ def upsample(self, h, pred_norm, uv_8):
111
+ up_mask = self.up_prob_head(torch.cat([h, uv_8], dim=1))
112
+ up_pred_norm = convex_upsampling(pred_norm, up_mask, self.downsample_ratio)
113
+ up_pred_norm = F.normalize(up_pred_norm, dim=1)
114
+ return up_pred_norm
115
+
116
+ def refine(self, h, feat_map, pred_norm, intrins, orig_H, orig_W, uv_8, ray_8):
117
+ B, C, H, W = pred_norm.shape
118
+ fu = intrins[:, 0, 0][:,None,None,None] * (W / orig_W) # (B, 1, 1, 1)
119
+ cu = intrins[:, 0, 2][:,None,None,None] * (W / orig_W)
120
+ fv = intrins[:, 1, 1][:,None,None,None] * (H / orig_H)
121
+ cv = intrins[:, 1, 2][:,None,None,None] * (H / orig_H)
122
+
123
+ h_new = self.gru(h, feat_map)
124
+
125
+ # get nghbr prob (B, 1, ps*ps, h, w)
126
+ nghbr_prob = self.prob_head(torch.cat([h_new, uv_8], dim=1)).unsqueeze(1)
127
+ nghbr_prob = torch.sigmoid(nghbr_prob)
128
+
129
+ # get nghbr normals (B, 3, ps*ps, h, w)
130
+ nghbr_normals = get_unfold(pred_norm, ps=self.ps, pad=self.pad)
131
+
132
+ # get nghbr xy (B, 2, ps*ps, h, w)
133
+ nghbr_xys = self.xy_head(torch.cat([h_new, uv_8], dim=1))
134
+ nghbr_xs, nghbr_ys = torch.split(nghbr_xys, [self.ps*self.ps, self.ps*self.ps], dim=1)
135
+ nghbr_xys = torch.cat([nghbr_xs.unsqueeze(1), nghbr_ys.unsqueeze(1)], dim=1)
136
+ nghbr_xys = F.normalize(nghbr_xys, dim=1)
137
+
138
+ # get nghbr theta (B, 1, ps*ps, h, w)
139
+ nghbr_angle = self.angle_head(torch.cat([h_new, uv_8], dim=1)).unsqueeze(1)
140
+ nghbr_angle = torch.sigmoid(nghbr_angle) * np.pi
141
+
142
+ # get nghbr pixel coord (1, 3, ps*ps, h, w)
143
+ nghbr_pixel_coord = get_unfold(self.pixel_coords[:, :, :H, :W], ps=self.ps, pad=self.pad)
144
+
145
+ # nghbr axes (B, 3, ps*ps, h, w)
146
+ nghbr_axes = torch.zeros_like(nghbr_normals)
147
+
148
+ du_over_fu = nghbr_xys[:, 0, ...] / fu # (B, ps*ps, h, w)
149
+ dv_over_fv = nghbr_xys[:, 1, ...] / fv # (B, ps*ps, h, w)
150
+
151
+ term_u = (nghbr_pixel_coord[:, 0, ...] + nghbr_xys[:, 0, ...] - cu) / fu # (B, ps*ps, h, w)
152
+ term_v = (nghbr_pixel_coord[:, 1, ...] + nghbr_xys[:, 1, ...] - cv) / fv # (B, ps*ps, h, w)
153
+
154
+ nx = nghbr_normals[:, 0, ...] # (B, ps*ps, h, w)
155
+ ny = nghbr_normals[:, 1, ...] # (B, ps*ps, h, w)
156
+ nz = nghbr_normals[:, 2, ...] # (B, ps*ps, h, w)
157
+
158
+ nghbr_delta_z_num = - (du_over_fu * nx + dv_over_fv * ny)
159
+ nghbr_delta_z_denom = (term_u * nx + term_v * ny + nz)
160
+ nghbr_delta_z_denom[torch.abs(nghbr_delta_z_denom) < 1e-8] = 1e-8 * torch.sign(nghbr_delta_z_denom[torch.abs(nghbr_delta_z_denom) < 1e-8])
161
+ nghbr_delta_z = nghbr_delta_z_num / nghbr_delta_z_denom
162
+
163
+ nghbr_axes[:, 0, ...] = du_over_fu + nghbr_delta_z * term_u
164
+ nghbr_axes[:, 1, ...] = dv_over_fv + nghbr_delta_z * term_v
165
+ nghbr_axes[:, 2, ...] = nghbr_delta_z
166
+ nghbr_axes = F.normalize(nghbr_axes, dim=1) # (B, 3, ps*ps, h, w)
167
+
168
+ # make sure axes are all valid
169
+ invalid = torch.sum(torch.logical_or(torch.isnan(nghbr_axes), torch.isinf(nghbr_axes)).float(), dim=1) > 0.5 # (B, ps*ps, h, w)
170
+ nghbr_axes[:, 0, ...][invalid] = 0.0
171
+ nghbr_axes[:, 1, ...][invalid] = 0.0
172
+ nghbr_axes[:, 2, ...][invalid] = 0.0
173
+
174
+ # nghbr_axes_angle (B, 3, ps*ps, h, w)
175
+ nghbr_axes_angle = nghbr_axes * nghbr_angle
176
+ nghbr_axes_angle = nghbr_axes_angle.permute(0, 2, 3, 4, 1) # (B, ps*ps, h, w, 3)
177
+ nghbr_R = axis_angle_to_matrix(nghbr_axes_angle) # (B, ps*ps, h, w, 3, 3)
178
+
179
+ # (B, 3, ps*ps, h, w)
180
+ nghbr_normals_rot = torch.bmm(
181
+ nghbr_R.reshape(B * self.ps * self.ps * H * W, 3, 3),
182
+ nghbr_normals.permute(0, 2, 3, 4, 1).reshape(B * self.ps * self.ps * H * W, 3).unsqueeze(-1)
183
+ ).reshape(B, self.ps*self.ps, H, W, 3, 1).squeeze(-1).permute(0, 4, 1, 2, 3) # (B, 3, ps*ps, h, w)
184
+ nghbr_normals_rot = F.normalize(nghbr_normals_rot, dim=1)
185
+
186
+ # ray ReLU
187
+ nghbr_normals_rot = torch.cat([
188
+ self.ray_relu(nghbr_normals_rot[:, :, i, :, :], ray_8).unsqueeze(2)
189
+ for i in range(nghbr_normals_rot.size(2))
190
+ ], dim=2)
191
+
192
+ # (B, 1, ps*ps, h, w) * (B, 3, ps*ps, h, w)
193
+ pred_norm = torch.sum(nghbr_prob * nghbr_normals_rot, dim=2) # (B, C, H, W)
194
+ pred_norm = F.normalize(pred_norm, dim=1)
195
+
196
+ up_mask = self.up_prob_head(torch.cat([h_new, uv_8], dim=1))
197
+ up_pred_norm = convex_upsampling(pred_norm, up_mask, self.downsample_ratio)
198
+ up_pred_norm = F.normalize(up_pred_norm, dim=1)
199
+
200
+ return h_new, pred_norm, up_pred_norm
201
+
202
+
203
+ def forward(self, img, intrins=None):
204
+ # Step 1. encoder
205
+ features = self.encoder(img)
206
+
207
+ # Step 2. get uv encoding
208
+ B, _, orig_H, orig_W = img.shape
209
+ intrins[:, 0, 2] += 0.5
210
+ intrins[:, 1, 2] += 0.5
211
+ uv_32 = self.get_ray(intrins, orig_H//32, orig_W//32, orig_H, orig_W, return_uv=True)
212
+ uv_16 = self.get_ray(intrins, orig_H//16, orig_W//16, orig_H, orig_W, return_uv=True)
213
+ uv_8 = self.get_ray(intrins, orig_H//8, orig_W//8, orig_H, orig_W, return_uv=True)
214
+ ray_8 = self.get_ray(intrins, orig_H//8, orig_W//8, orig_H, orig_W)
215
+
216
+ # Step 3. decoder - initial prediction
217
+ pred_norm, feat_map, h = self.decoder(features, uvs=(uv_32, uv_16, uv_8))
218
+ pred_norm = self.ray_relu(pred_norm, ray_8)
219
+
220
+ # Step 4. add ray direction encoding
221
+ feat_map = torch.cat([feat_map, uv_8], dim=1)
222
+
223
+ # iterative refinement
224
+ up_pred_norm = self.upsample(h, pred_norm, uv_8)
225
+ pred_list = [up_pred_norm]
226
+ for i in range(self.num_iter):
227
+ h, pred_norm, up_pred_norm = self.refine(h, feat_map,
228
+ pred_norm.detach(),
229
+ intrins, orig_H, orig_W, uv_8, ray_8)
230
+ pred_list.append(up_pred_norm)
231
+ return pred_list
232
+
233
+
models/submodules.py ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.nn.functional as F
4
+ import geffnet
5
+
6
+
7
+ INPUT_CHANNELS_DICT = {
8
+ 0: [1280, 112, 40, 24, 16],
9
+ 1: [1280, 112, 40, 24, 16],
10
+ 2: [1408, 120, 48, 24, 16],
11
+ 3: [1536, 136, 48, 32, 24],
12
+ 4: [1792, 160, 56, 32, 24],
13
+ 5: [2048, 176, 64, 40, 24],
14
+ 6: [2304, 200, 72, 40, 32],
15
+ 7: [2560, 224, 80, 48, 32]
16
+ }
17
+
18
+
19
+ class Encoder(nn.Module):
20
+ def __init__(self, B=5, pretrained=True):
21
+ """ e.g. B=5 will return EfficientNet-B5
22
+ """
23
+ super(Encoder, self).__init__()
24
+ basemodel = geffnet.create_model('tf_efficientnet_b%s_ap' % B, pretrained=pretrained)
25
+ # Remove last layer
26
+ basemodel.global_pool = nn.Identity()
27
+ basemodel.classifier = nn.Identity()
28
+ self.original_model = basemodel
29
+
30
+ def forward(self, x):
31
+ features = [x]
32
+ for k, v in self.original_model._modules.items():
33
+ if (k == 'blocks'):
34
+ for ki, vi in v._modules.items():
35
+ features.append(vi(features[-1]))
36
+ else:
37
+ features.append(v(features[-1]))
38
+ return features
39
+
40
+
41
+ class ConvGRU(nn.Module):
42
+ def __init__(self, hidden_dim, input_dim, ks=3):
43
+ super(ConvGRU, self).__init__()
44
+ p = (ks - 1) // 2
45
+ self.convz = nn.Conv2d(hidden_dim+input_dim, hidden_dim, ks, padding=p)
46
+ self.convr = nn.Conv2d(hidden_dim+input_dim, hidden_dim, ks, padding=p)
47
+ self.convq = nn.Conv2d(hidden_dim+input_dim, hidden_dim, ks, padding=p)
48
+
49
+ def forward(self, h, x):
50
+ hx = torch.cat([h, x], dim=1)
51
+ z = torch.sigmoid(self.convz(hx))
52
+ r = torch.sigmoid(self.convr(hx))
53
+ q = torch.tanh(self.convq(torch.cat([r*h, x], dim=1)))
54
+ h = (1-z) * h + z * q
55
+ return h
56
+
57
+
58
+ class RayReLU(nn.Module):
59
+ def __init__(self, eps=1e-2):
60
+ super(RayReLU, self).__init__()
61
+ self.eps = eps
62
+
63
+ def forward(self, pred_norm, ray):
64
+ # angle between the predicted normal and ray direction
65
+ cos = torch.cosine_similarity(pred_norm, ray, dim=1).unsqueeze(1) # (B, 1, H, W)
66
+
67
+ # component of pred_norm along view
68
+ norm_along_view = ray * cos
69
+
70
+ # cos should be bigger than eps
71
+ norm_along_view_relu = ray * (torch.relu(cos - self.eps) + self.eps)
72
+
73
+ # difference
74
+ diff = norm_along_view_relu - norm_along_view
75
+
76
+ # updated pred_norm
77
+ new_pred_norm = pred_norm + diff
78
+ new_pred_norm = F.normalize(new_pred_norm, dim=1)
79
+
80
+ return new_pred_norm
81
+
82
+
83
+ class UpSampleBN(nn.Module):
84
+ def __init__(self, skip_input, output_features, align_corners=True):
85
+ super(UpSampleBN, self).__init__()
86
+ self._net = nn.Sequential(nn.Conv2d(skip_input, output_features, kernel_size=3, stride=1, padding=1),
87
+ nn.BatchNorm2d(output_features),
88
+ nn.LeakyReLU(),
89
+ nn.Conv2d(output_features, output_features, kernel_size=3, stride=1, padding=1),
90
+ nn.BatchNorm2d(output_features),
91
+ nn.LeakyReLU())
92
+ self.align_corners = align_corners
93
+
94
+ def forward(self, x, concat_with):
95
+ up_x = F.interpolate(x, size=[concat_with.size(2), concat_with.size(3)], mode='bilinear', align_corners=self.align_corners)
96
+ f = torch.cat([up_x, concat_with], dim=1)
97
+ return self._net(f)
98
+
99
+
100
+ class Conv2d_WS(nn.Conv2d):
101
+ """ weight standardization
102
+ """
103
+ def __init__(self, in_channels, out_channels, kernel_size, stride=1,
104
+ padding=0, dilation=1, groups=1, bias=True):
105
+ super(Conv2d_WS, self).__init__(in_channels, out_channels, kernel_size, stride,
106
+ padding, dilation, groups, bias)
107
+
108
+ def forward(self, x):
109
+ weight = self.weight
110
+ weight_mean = weight.mean(dim=1, keepdim=True).mean(dim=2,
111
+ keepdim=True).mean(dim=3, keepdim=True)
112
+ weight = weight - weight_mean
113
+ std = weight.view(weight.size(0), -1).std(dim=1).view(-1, 1, 1, 1) + 1e-5
114
+ weight = weight / std.expand_as(weight)
115
+ return F.conv2d(x, weight, self.bias, self.stride, self.padding, self.dilation, self.groups)
116
+
117
+
118
+ class UpSampleGN(nn.Module):
119
+ """ UpSample with GroupNorm
120
+ """
121
+ def __init__(self, skip_input, output_features, align_corners=True):
122
+ super(UpSampleGN, self).__init__()
123
+ self._net = nn.Sequential(Conv2d_WS(skip_input, output_features, kernel_size=3, stride=1, padding=1),
124
+ nn.GroupNorm(8, output_features),
125
+ nn.LeakyReLU(),
126
+ Conv2d_WS(output_features, output_features, kernel_size=3, stride=1, padding=1),
127
+ nn.GroupNorm(8, output_features),
128
+ nn.LeakyReLU())
129
+ self.align_corners = align_corners
130
+
131
+ def forward(self, x, concat_with):
132
+ up_x = F.interpolate(x, size=[concat_with.size(2), concat_with.size(3)], mode='bilinear', align_corners=self.align_corners)
133
+ f = torch.cat([up_x, concat_with], dim=1)
134
+ return self._net(f)
135
+
136
+
137
+ def upsample_via_bilinear(out, up_mask, downsample_ratio):
138
+ """ bilinear upsampling (up_mask is a dummy variable)
139
+ """
140
+ return F.interpolate(out, scale_factor=downsample_ratio, mode='bilinear', align_corners=True)
141
+
142
+
143
+ def upsample_via_mask(out, up_mask, downsample_ratio):
144
+ """ convex upsampling
145
+ """
146
+ # out: low-resolution output (B, o_dim, H, W)
147
+ # up_mask: (B, 9*k*k, H, W)
148
+ k = downsample_ratio
149
+
150
+ N, o_dim, H, W = out.shape
151
+ up_mask = up_mask.view(N, 1, 9, k, k, H, W)
152
+ up_mask = torch.softmax(up_mask, dim=2) # (B, 1, 9, k, k, H, W)
153
+
154
+ up_out = F.unfold(out, [3, 3], padding=1) # (B, 2, H, W) -> (B, 2 X 3*3, H*W)
155
+ up_out = up_out.view(N, o_dim, 9, 1, 1, H, W) # (B, 2, 3*3, 1, 1, H, W)
156
+ up_out = torch.sum(up_mask * up_out, dim=2) # (B, 2, k, k, H, W)
157
+
158
+ up_out = up_out.permute(0, 1, 4, 2, 5, 3) # (B, 2, H, k, W, k)
159
+ return up_out.reshape(N, o_dim, k*H, k*W) # (B, 2, kH, kW)
160
+
161
+
162
+ def convex_upsampling(out, up_mask, k):
163
+ # out: low-resolution output (B, C, H, W)
164
+ # up_mask: (B, 9*k*k, H, W)
165
+ B, C, H, W = out.shape
166
+ up_mask = up_mask.view(B, 1, 9, k, k, H, W)
167
+ up_mask = torch.softmax(up_mask, dim=2) # (B, 1, 9, k, k, H, W)
168
+
169
+ out = F.pad(out, pad=(1,1,1,1), mode='replicate')
170
+ up_out = F.unfold(out, [3, 3], padding=0) # (B, C, H, W) -> (B, C X 3*3, H*W)
171
+ up_out = up_out.view(B, C, 9, 1, 1, H, W) # (B, C, 9, 1, 1, H, W)
172
+
173
+ up_out = torch.sum(up_mask * up_out, dim=2) # (B, C, k, k, H, W)
174
+ up_out = up_out.permute(0, 1, 4, 2, 5, 3) # (B, C, H, k, W, k)
175
+ return up_out.reshape(B, C, k*H, k*W) # (B, C, kH, kW)
176
+
177
+
178
+ def get_unfold(pred_norm, ps, pad):
179
+ B, C, H, W = pred_norm.shape
180
+ pred_norm = F.pad(pred_norm, pad=(pad,pad,pad,pad), mode='replicate') # (B, C, h, w)
181
+ pred_norm_unfold = F.unfold(pred_norm, [ps, ps], padding=0) # (B, C X ps*ps, h*w)
182
+ pred_norm_unfold = pred_norm_unfold.view(B, C, ps*ps, H, W) # (B, C, ps*ps, h, w)
183
+ return pred_norm_unfold
184
+
185
+
186
+ def get_prediction_head(input_dim, hidden_dim, output_dim):
187
+ return nn.Sequential(
188
+ nn.Conv2d(input_dim, hidden_dim, 3, padding=1),
189
+ nn.ReLU(inplace=True),
190
+ nn.Conv2d(hidden_dim, hidden_dim, 1),
191
+ nn.ReLU(inplace=True),
192
+ nn.Conv2d(hidden_dim, output_dim, 1),
193
+ )
194
+
pixi.lock CHANGED
@@ -3,11 +3,13 @@ environments:
3
  default:
4
  channels:
5
  - url: https://conda.anaconda.org/conda-forge/
 
6
  packages:
7
  linux-64:
8
  - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
9
- - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
10
  - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.8.1-h59595ed_0.conda
 
11
  - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda
12
  - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda
13
  - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda
@@ -24,6 +26,7 @@ environments:
24
  - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2
25
  - conda: https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2
26
  - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_0.conda
 
27
  - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.7.9-hb077bed_0.conda
28
  - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2
29
  - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda
@@ -35,11 +38,11 @@ environments:
35
  - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2
36
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240116.1-cxx17_h59595ed_2.conda
37
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.1-h8fe9dca_1.conda
38
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-21_linux64_openblas.conda
39
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda
40
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda
41
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda
42
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-21_linux64_openblas.conda
43
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda
44
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.120-hd590300_0.conda
45
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda
@@ -48,14 +51,12 @@ environments:
48
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda
49
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_5.conda
50
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.4-h783c2da_0.conda
51
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_5.conda
52
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda
53
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda
54
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.7-hd590300_0.conda
55
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda
56
- - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-21_linux64_openblas.conda
57
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
58
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.26-pthreads_h413a1c8_0.conda
59
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2023.3.0-h2e90f83_2.conda
60
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2023.3.0-hd5fc58b_2.conda
61
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2023.3.0-hd5fc58b_2.conda
@@ -85,8 +86,12 @@ environments:
85
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
86
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.5-h232c23b_0.conda
87
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda
 
88
  - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda
89
  - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.3-py311h54ef318_0.conda
 
 
 
90
  - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda
91
  - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda
92
  - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda
@@ -139,6 +144,7 @@ environments:
139
  - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.6.0-pyhd8ed1ab_0.conda
140
  - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.3.0-pyhd8ed1ab_0.conda
141
  - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda
 
142
  - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
143
  - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
144
  - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
@@ -155,6 +161,7 @@ environments:
155
  - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2
156
  - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2
157
  - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.2.0-pyhca7485f_0.conda
 
158
  - conda: https://conda.anaconda.org/conda-forge/noarch/gradio-4.19.2-pyhd8ed1ab_0.conda
159
  - conda: https://conda.anaconda.org/conda-forge/noarch/gradio-client-0.10.1-pyhd8ed1ab_1.conda
160
  - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2
@@ -173,7 +180,9 @@ environments:
173
  - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda
174
  - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
175
  - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
 
176
  - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2
 
177
  - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda
178
  - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda
179
  - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.6.3-pyhd8ed1ab_0.conda
@@ -192,7 +201,9 @@ environments:
192
  - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
193
  - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
194
  - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda
 
195
  - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.27.0-pyhd8ed1ab_0.conda
 
196
  - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.0-pyha770c72_0.conda
197
  - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda
198
  - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda
@@ -202,6 +213,28 @@ environments:
202
  - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
203
  - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
204
  - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  packages:
206
  - kind: conda
207
  name: _libgcc_mutex
@@ -217,21 +250,19 @@ packages:
217
  - kind: conda
218
  name: _openmp_mutex
219
  version: '4.5'
220
- build: 2_gnu
221
- build_number: 16
222
  subdir: linux-64
223
- url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
224
- sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22
225
- md5: 73aaf86a425cc6e73fcf236a5a46396d
226
  depends:
227
  - _libgcc_mutex 0.1 conda_forge
228
- - libgomp >=7.5.0
229
- constrains:
230
- - openmp_impl 9999
231
  license: BSD-3-Clause
232
  license_family: BSD
233
- size: 23621
234
- timestamp: 1650670423406
235
  - kind: conda
236
  name: aiofiles
237
  version: 23.2.1
@@ -245,6 +276,8 @@ packages:
245
  - python >=3.7
246
  license: Apache-2.0
247
  license_family: Apache
 
 
248
  size: 19507
249
  timestamp: 1698946114329
250
  - kind: conda
@@ -268,6 +301,8 @@ packages:
268
  - typing-extensions >=4.0.1
269
  license: BSD-3-Clause
270
  license_family: BSD
 
 
271
  size: 457454
272
  timestamp: 1701735672437
273
  - kind: conda
@@ -284,6 +319,8 @@ packages:
284
  - typing-extensions >=4.0.0
285
  license: MIT
286
  license_family: MIT
 
 
287
  size: 17026
288
  timestamp: 1696634393637
289
  - kind: conda
@@ -306,6 +343,8 @@ packages:
306
  - uvloop >=0.17
307
  license: MIT
308
  license_family: MIT
 
 
309
  size: 102331
310
  timestamp: 1708355504396
311
  - kind: conda
@@ -336,8 +375,40 @@ packages:
336
  - python >=3.7
337
  license: MIT
338
  license_family: MIT
 
 
339
  size: 54582
340
  timestamp: 1704011393776
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
341
  - kind: conda
342
  name: brotli
343
  version: 1.1.0
@@ -475,6 +546,8 @@ packages:
475
  - python >=3.7
476
  license: MIT
477
  license_family: MIT
 
 
478
  size: 46597
479
  timestamp: 1698833765762
480
  - kind: conda
@@ -491,6 +564,8 @@ packages:
491
  - python >=3.8
492
  license: BSD-3-Clause
493
  license_family: BSD
 
 
494
  size: 84437
495
  timestamp: 1692311973840
496
  - kind: conda
@@ -506,6 +581,8 @@ packages:
506
  - python >=3.7
507
  license: BSD-3-Clause
508
  license_family: BSD
 
 
509
  size: 25170
510
  timestamp: 1666700778190
511
  - kind: conda
@@ -524,6 +601,8 @@ packages:
524
  - python_abi 3.11.* *_cp311
525
  license: BSD-3-Clause
526
  license_family: BSD
 
 
527
  size: 255843
528
  timestamp: 1699041590533
529
  - kind: conda
@@ -539,6 +618,8 @@ packages:
539
  - python >=3.8
540
  license: BSD-3-Clause
541
  license_family: BSD
 
 
542
  size: 13458
543
  timestamp: 1696677888423
544
  - kind: conda
@@ -568,6 +649,8 @@ packages:
568
  depends:
569
  - python >=3.7
570
  license: MIT and PSF-2.0
 
 
571
  size: 20551
572
  timestamp: 1704921321122
573
  - kind: conda
@@ -602,6 +685,8 @@ packages:
602
  - typing-extensions >=4.5.0
603
  license: MIT
604
  license_family: MIT
 
 
605
  size: 56205
606
  timestamp: 1693161441022
607
  - kind: conda
@@ -670,6 +755,8 @@ packages:
670
  - python >=3.6
671
  license: MIT
672
  license_family: MIT
 
 
673
  size: 10415
674
  timestamp: 1659475099796
675
  - kind: conda
@@ -684,6 +771,8 @@ packages:
684
  depends:
685
  - python >=3.7
686
  license: Unlicense
 
 
687
  size: 15605
688
  timestamp: 1698715139726
689
  - kind: conda
@@ -806,6 +895,8 @@ packages:
806
  - python_abi 3.11.* *_cp311
807
  license: MIT
808
  license_family: MIT
 
 
809
  size: 2817685
810
  timestamp: 1708049363863
811
  - kind: conda
@@ -850,8 +941,40 @@ packages:
850
  - python >=3.8
851
  license: BSD-3-Clause
852
  license_family: BSD
 
 
853
  size: 128662
854
  timestamp: 1707102616711
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
855
  - kind: conda
856
  name: gettext
857
  version: 0.21.1
@@ -865,6 +988,11 @@ packages:
865
  license: LGPL-2.1-or-later AND GPL-3.0-or-later
866
  size: 4320628
867
  timestamp: 1665673494324
 
 
 
 
 
868
  - kind: conda
869
  name: gmp
870
  version: 6.3.0
@@ -879,6 +1007,28 @@ packages:
879
  license: GPL-2.0-or-later AND LGPL-3.0-or-later
880
  size: 563123
881
  timestamp: 1699629991732
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
882
  - kind: conda
883
  name: gnutls
884
  version: 3.7.9
@@ -936,6 +1086,8 @@ packages:
936
  - typing-extensions >=4.0,<5.dev0
937
  - uvicorn >=0.14.0
938
  license: MIT AND Apache-2.0
 
 
939
  size: 12582364
940
  timestamp: 1708676706303
941
  - kind: conda
@@ -958,8 +1110,26 @@ packages:
958
  - websockets >=10.0,<12.0
959
  license: Apache-2.0
960
  license_family: APACHE
 
 
961
  size: 299846
962
  timestamp: 1708677035723
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
963
  - kind: conda
964
  name: graphite2
965
  version: 1.3.13
@@ -989,6 +1159,8 @@ packages:
989
  - typing_extensions
990
  license: MIT
991
  license_family: MIT
 
 
992
  size: 48251
993
  timestamp: 1664132995560
994
  - kind: conda
@@ -1006,6 +1178,8 @@ packages:
1006
  - python >=3.6.1
1007
  license: MIT
1008
  license_family: MIT
 
 
1009
  size: 46754
1010
  timestamp: 1634280590080
1011
  - kind: conda
@@ -1041,6 +1215,8 @@ packages:
1041
  - python
1042
  license: MIT
1043
  license_family: MIT
 
 
1044
  size: 25341
1045
  timestamp: 1598856368685
1046
  - kind: conda
@@ -1061,6 +1237,8 @@ packages:
1061
  - sniffio 1.*
1062
  license: BSD-3-Clause
1063
  license_family: BSD
 
 
1064
  size: 45727
1065
  timestamp: 1708529429006
1066
  - kind: conda
@@ -1081,6 +1259,8 @@ packages:
1081
  - sniffio
1082
  license: BSD-3-Clause
1083
  license_family: BSD
 
 
1084
  size: 64651
1085
  timestamp: 1708531043505
1086
  - kind: conda
@@ -1103,6 +1283,8 @@ packages:
1103
  - typing-extensions >=3.7.4.3
1104
  license: Apache-2.0
1105
  license_family: APACHE
 
 
1106
  size: 225834
1107
  timestamp: 1709252375076
1108
  - kind: conda
@@ -1118,6 +1300,8 @@ packages:
1118
  - python >=3.6
1119
  license: MIT
1120
  license_family: MIT
 
 
1121
  size: 14646
1122
  timestamp: 1619110249723
1123
  - kind: conda
@@ -1148,6 +1332,8 @@ packages:
1148
  - python >=3.6
1149
  license: BSD-3-Clause
1150
  license_family: BSD
 
 
1151
  size: 50124
1152
  timestamp: 1701027126206
1153
  - kind: conda
@@ -1198,6 +1384,8 @@ packages:
1198
  - importlib-resources >=6.1.2,<6.1.3.0a0
1199
  license: Apache-2.0
1200
  license_family: APACHE
 
 
1201
  size: 30448
1202
  timestamp: 1708948623752
1203
  - kind: conda
@@ -1214,6 +1402,8 @@ packages:
1214
  - python >=3.7
1215
  license: BSD-3-Clause
1216
  license_family: BSD
 
 
1217
  size: 111589
1218
  timestamp: 1704967140287
1219
  - kind: conda
@@ -1252,6 +1442,8 @@ packages:
1252
  - referencing >=0.31.0
1253
  license: MIT
1254
  license_family: MIT
 
 
1255
  size: 16431
1256
  timestamp: 1703778502971
1257
  - kind: conda
@@ -1270,6 +1462,8 @@ packages:
1270
  - python_abi 3.11.* *_cp311
1271
  license: BSD-3-Clause
1272
  license_family: BSD
 
 
1273
  size: 73273
1274
  timestamp: 1695380140676
1275
  - kind: conda
@@ -1376,24 +1570,22 @@ packages:
1376
  - kind: conda
1377
  name: libblas
1378
  version: 3.9.0
1379
- build: 21_linux64_openblas
1380
- build_number: 21
1381
  subdir: linux-64
1382
- url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-21_linux64_openblas.conda
1383
- sha256: ebd5c91f029f779fb88a1fcbd1e499559a9c258e3674ff58a2fbb4e375ae56d9
1384
- md5: 0ac9f44fc096772b0aa092119b00c3ca
1385
  depends:
1386
- - libopenblas >=0.3.26,<0.3.27.0a0
1387
- - libopenblas >=0.3.26,<1.0a0
1388
- constrains:
1389
- - liblapacke 3.9.0 21_linux64_openblas
1390
- - blas * openblas
1391
- - libcblas 3.9.0 21_linux64_openblas
1392
- - liblapack 3.9.0 21_linux64_openblas
1393
  license: BSD-3-Clause
1394
  license_family: BSD
1395
- size: 14691
1396
- timestamp: 1705979549006
1397
  - kind: conda
1398
  name: libbrotlicommon
1399
  version: 1.1.0
@@ -1444,22 +1636,23 @@ packages:
1444
  - kind: conda
1445
  name: libcblas
1446
  version: 3.9.0
1447
- build: 21_linux64_openblas
1448
- build_number: 21
1449
  subdir: linux-64
1450
- url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-21_linux64_openblas.conda
1451
- sha256: 467bbfbfe1a1aeb8b1f9f6485eedd8ed1b6318941bf3702da72336ccf4dc25a6
1452
- md5: 4a3816d06451c4946e2db26b86472cb6
1453
  depends:
1454
- - libblas 3.9.0 21_linux64_openblas
1455
- constrains:
1456
- - liblapacke 3.9.0 21_linux64_openblas
1457
- - blas * openblas
1458
- - liblapack 3.9.0 21_linux64_openblas
 
1459
  license: BSD-3-Clause
1460
  license_family: BSD
1461
- size: 14614
1462
- timestamp: 1705979564122
1463
  - kind: conda
1464
  name: libdeflate
1465
  version: '1.19'
@@ -1592,21 +1785,6 @@ packages:
1592
  license: LGPL-2.1-or-later
1593
  size: 2692079
1594
  timestamp: 1708284870228
1595
- - kind: conda
1596
- name: libgomp
1597
- version: 13.2.0
1598
- build: h807b86a_5
1599
- build_number: 5
1600
- subdir: linux-64
1601
- url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_5.conda
1602
- sha256: 0d3d4b1b0134283ea02d58e8eb5accf3655464cf7159abf098cc694002f8d34e
1603
- md5: d211c42b9ce49aee3734fdc828731689
1604
- depends:
1605
- - _libgcc_mutex 0.1 conda_forge
1606
- license: GPL-3.0-only WITH GCC-exception-3.1
1607
- license_family: GPL
1608
- size: 419751
1609
- timestamp: 1706819107383
1610
  - kind: conda
1611
  name: libhwloc
1612
  version: 2.9.3
@@ -1672,22 +1850,23 @@ packages:
1672
  - kind: conda
1673
  name: liblapack
1674
  version: 3.9.0
1675
- build: 21_linux64_openblas
1676
- build_number: 21
1677
  subdir: linux-64
1678
- url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-21_linux64_openblas.conda
1679
- sha256: 64b5c35dce00dd6f9f53178b2fe87116282e00967970bd6551a5a42923806ded
1680
- md5: 1a42f305615c3867684e049e85927531
1681
  depends:
1682
- - libblas 3.9.0 21_linux64_openblas
1683
- constrains:
1684
- - liblapacke 3.9.0 21_linux64_openblas
1685
- - libcblas 3.9.0 21_linux64_openblas
1686
- - blas * openblas
 
1687
  license: BSD-3-Clause
1688
  license_family: BSD
1689
- size: 14599
1690
- timestamp: 1705979579648
1691
  - kind: conda
1692
  name: libnsl
1693
  version: 2.0.1
@@ -1702,24 +1881,6 @@ packages:
1702
  license_family: GPL
1703
  size: 33408
1704
  timestamp: 1697359010159
1705
- - kind: conda
1706
- name: libopenblas
1707
- version: 0.3.26
1708
- build: pthreads_h413a1c8_0
1709
- subdir: linux-64
1710
- url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.26-pthreads_h413a1c8_0.conda
1711
- sha256: b626954b5a1113dafec8df89fa8bf18ce9b4701464d9f084ddd7fc9fac404bbd
1712
- md5: 760ae35415f5ba8b15d09df5afe8b23a
1713
- depends:
1714
- - libgcc-ng >=12
1715
- - libgfortran-ng
1716
- - libgfortran5 >=12.3.0
1717
- constrains:
1718
- - openblas >=0.3.26,<0.3.27.0a0
1719
- license: BSD-3-Clause
1720
- license_family: BSD
1721
- size: 5578031
1722
- timestamp: 1704950143521
1723
  - kind: conda
1724
  name: libopenvino
1725
  version: 2023.3.0
@@ -2183,6 +2344,22 @@ packages:
2183
  license_family: Other
2184
  size: 61588
2185
  timestamp: 1686575217516
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2186
  - kind: conda
2187
  name: markdown-it-py
2188
  version: 3.0.0
@@ -2197,6 +2374,8 @@ packages:
2197
  - python >=3.8
2198
  license: MIT
2199
  license_family: MIT
 
 
2200
  size: 64356
2201
  timestamp: 1686175179621
2202
  - kind: conda
@@ -2215,6 +2394,8 @@ packages:
2215
  - jinja2 >=3.0.0
2216
  license: BSD-3-Clause
2217
  license_family: BSD
 
 
2218
  size: 27502
2219
  timestamp: 1706900084436
2220
  - kind: conda
@@ -2245,6 +2426,8 @@ packages:
2245
  - tk >=8.6.13,<8.7.0a0
2246
  license: PSF-2.0
2247
  license_family: PSF
 
 
2248
  size: 7927557
2249
  timestamp: 1708026755428
2250
  - kind: conda
@@ -2260,8 +2443,76 @@ packages:
2260
  - python >=3.6
2261
  license: MIT
2262
  license_family: MIT
 
 
2263
  size: 14680
2264
  timestamp: 1704317789138
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2265
  - kind: conda
2266
  name: munkres
2267
  version: 1.1.4
@@ -2305,6 +2556,28 @@ packages:
2305
  license_family: GPL
2306
  size: 1011638
2307
  timestamp: 1686309814836
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2308
  - kind: conda
2309
  name: numpy
2310
  version: 1.26.4
@@ -2325,8 +2598,90 @@ packages:
2325
  - numpy-base <0a0
2326
  license: BSD-3-Clause
2327
  license_family: BSD
 
 
2328
  size: 8065890
2329
  timestamp: 1707225944355
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2330
  - kind: conda
2331
  name: ocl-icd
2332
  version: 2.3.2
@@ -2405,6 +2760,8 @@ packages:
2405
  - python_abi 3.11.* *_cp311
2406
  license: Apache-2.0
2407
  license_family: Apache
 
 
2408
  size: 274831
2409
  timestamp: 1708717354229
2410
  - kind: conda
@@ -2436,6 +2793,8 @@ packages:
2436
  - python >=3.7
2437
  license: Apache-2.0
2438
  license_family: APACHE
 
 
2439
  size: 49452
2440
  timestamp: 1696202521121
2441
  - kind: conda
@@ -2527,6 +2886,8 @@ packages:
2527
  depends:
2528
  - python >=3.6
2529
  license: MIT AND PSF-2.0
 
 
2530
  size: 10778
2531
  timestamp: 1694617398467
2532
  - kind: conda
@@ -2575,6 +2936,8 @@ packages:
2575
  - typing-extensions >=4.6.1
2576
  license: MIT
2577
  license_family: MIT
 
 
2578
  size: 271902
2579
  timestamp: 1709075341323
2580
  - kind: conda
@@ -2592,6 +2955,8 @@ packages:
2592
  - typing-extensions >=4.6.0,!=4.7.0
2593
  license: MIT
2594
  license_family: MIT
 
 
2595
  size: 1659194
2596
  timestamp: 1708700970198
2597
  - kind: conda
@@ -2607,6 +2972,8 @@ packages:
2607
  - python >=3.6
2608
  license: MIT
2609
  license_family: MIT
 
 
2610
  size: 31190
2611
  timestamp: 1615612572693
2612
  - kind: conda
@@ -2622,6 +2989,8 @@ packages:
2622
  - python >=3.7
2623
  license: BSD-2-Clause
2624
  license_family: BSD
 
 
2625
  size: 860425
2626
  timestamp: 1700608076927
2627
  - kind: conda
@@ -2637,6 +3006,8 @@ packages:
2637
  - python >=3.6
2638
  license: MIT
2639
  license_family: MIT
 
 
2640
  size: 89521
2641
  timestamp: 1690737983548
2642
  - kind: conda
@@ -2654,6 +3025,8 @@ packages:
2654
  - python >=3.8
2655
  license: BSD-3-Clause
2656
  license_family: BSD
 
 
2657
  size: 18981
2658
  timestamp: 1661604969727
2659
  - kind: conda
@@ -2700,6 +3073,8 @@ packages:
2700
  - six >=1.5
2701
  license: Apache-2.0
2702
  license_family: APACHE
 
 
2703
  size: 222742
2704
  timestamp: 1709299922152
2705
  - kind: conda
@@ -2715,6 +3090,8 @@ packages:
2715
  - python >=3.7
2716
  license: Apache-2.0
2717
  license_family: Apache
 
 
2718
  size: 26439
2719
  timestamp: 1707760278735
2720
  - kind: conda
@@ -2730,6 +3107,8 @@ packages:
2730
  - python >=3.6
2731
  license: Apache-2.0
2732
  license_family: APACHE
 
 
2733
  size: 144024
2734
  timestamp: 1707747742930
2735
  - kind: conda
@@ -2747,6 +3126,45 @@ packages:
2747
  license_family: BSD
2748
  size: 6385
2749
  timestamp: 1695147338551
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2750
  - kind: conda
2751
  name: pytz
2752
  version: '2024.1'
@@ -2760,6 +3178,8 @@ packages:
2760
  - python >=3.7
2761
  license: MIT
2762
  license_family: MIT
 
 
2763
  size: 188538
2764
  timestamp: 1706886944988
2765
  - kind: conda
@@ -2811,6 +3231,8 @@ packages:
2811
  - rpds-py >=0.7.0
2812
  license: MIT
2813
  license_family: MIT
 
 
2814
  size: 39055
2815
  timestamp: 1706711589688
2816
  - kind: conda
@@ -2832,6 +3254,8 @@ packages:
2832
  - chardet >=3.0.2,<6
2833
  license: Apache-2.0
2834
  license_family: APACHE
 
 
2835
  size: 56690
2836
  timestamp: 1684774408600
2837
  - kind: conda
@@ -2866,6 +3290,8 @@ packages:
2866
  - python_abi 3.11.* *_cp311
2867
  license: MIT
2868
  license_family: MIT
 
 
2869
  size: 915849
2870
  timestamp: 1707923007711
2871
  - kind: conda
@@ -2883,6 +3309,8 @@ packages:
2883
  - python_abi 3.11.* *_cp311
2884
  license: MIT
2885
  license_family: MIT
 
 
2886
  size: 5738078
2887
  timestamp: 1709229162825
2888
  - kind: conda
@@ -2898,6 +3326,8 @@ packages:
2898
  - python >=2.7
2899
  license: BSD-2-Clause
2900
  license_family: BSD
 
 
2901
  size: 17923
2902
  timestamp: 1653579450384
2903
  - kind: conda
@@ -2913,6 +3343,8 @@ packages:
2913
  - python >=3.7
2914
  license: MIT
2915
  license_family: MIT
 
 
2916
  size: 14568
2917
  timestamp: 1698144516278
2918
  - kind: conda
@@ -2928,6 +3360,8 @@ packages:
2928
  - python
2929
  license: MIT
2930
  license_family: MIT
 
 
2931
  size: 14259
2932
  timestamp: 1620240338595
2933
  - kind: conda
@@ -2958,8 +3392,28 @@ packages:
2958
  - python >=3.7
2959
  license: Apache-2.0
2960
  license_family: Apache
 
 
2961
  size: 15064
2962
  timestamp: 1708953086199
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2963
  - kind: conda
2964
  name: starlette
2965
  version: 0.27.0
@@ -2992,6 +3446,28 @@ packages:
2992
  license_family: BSD
2993
  size: 2644060
2994
  timestamp: 1702359203835
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2995
  - kind: conda
2996
  name: tbb
2997
  version: 2021.11.0
@@ -3038,6 +3514,8 @@ packages:
3038
  - python >=3.7
3039
  license: MIT
3040
  license_family: MIT
 
 
3041
  size: 37086
3042
  timestamp: 1690458478787
3043
  - kind: conda
@@ -3055,6 +3533,67 @@ packages:
3055
  license_family: BSD
3056
  size: 52358
3057
  timestamp: 1706112720607
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3058
  - kind: conda
3059
  name: tqdm
3060
  version: 4.66.2
@@ -3068,8 +3607,30 @@ packages:
3068
  - colorama
3069
  - python >=3.7
3070
  license: MPL-2.0 or MIT
 
 
3071
  size: 89567
3072
  timestamp: 1707598746354
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3073
  - kind: conda
3074
  name: typer
3075
  version: 0.9.0
@@ -3088,6 +3649,8 @@ packages:
3088
  - typing-extensions >=3.7.4.3
3089
  license: MIT
3090
  license_family: MIT
 
 
3091
  size: 79064
3092
  timestamp: 1683029411797
3093
  - kind: conda
@@ -3118,6 +3681,8 @@ packages:
3118
  - python >=3.8
3119
  license: PSF-2.0
3120
  license_family: PSF
 
 
3121
  size: 37018
3122
  timestamp: 1708904796013
3123
  - kind: conda
@@ -3147,6 +3712,8 @@ packages:
3147
  - python >=3.7
3148
  license: MIT
3149
  license_family: MIT
 
 
3150
  size: 94669
3151
  timestamp: 1708239595549
3152
  - kind: conda
@@ -3181,6 +3748,8 @@ packages:
3181
  - python_abi 3.11.* *_cp311
3182
  license: BSD-3-Clause
3183
  license_family: BSD
 
 
3184
  size: 200745
3185
  timestamp: 1695410107238
3186
  - kind: conda
@@ -3457,6 +4026,8 @@ packages:
3457
  - python >=3.8
3458
  license: MIT
3459
  license_family: MIT
 
 
3460
  size: 18954
3461
  timestamp: 1695255262261
3462
  - kind: conda
 
3
  default:
4
  channels:
5
  - url: https://conda.anaconda.org/conda-forge/
6
+ - url: https://conda.anaconda.org/pytorch/
7
  packages:
8
  linux-64:
9
  - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
10
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2
11
  - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.8.1-h59595ed_0.conda
12
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/blas-1.0-mkl.tar.bz2
13
  - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda
14
  - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda
15
  - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda
 
26
  - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2
27
  - conda: https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2
28
  - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_0.conda
29
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.1.2-py311h6a5fa03_1.tar.bz2
30
  - conda: https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.7.9-hb077bed_0.conda
31
  - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2
32
  - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda
 
38
  - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2
39
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240116.1-cxx17_h59595ed_2.conda
40
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.1-h8fe9dca_1.conda
41
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-1_h86c2bf4_netlib.tar.bz2
42
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda
43
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda
44
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda
45
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-5_h92ddd45_netlib.tar.bz2
46
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda
47
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.120-hd590300_0.conda
48
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda
 
51
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda
52
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_5.conda
53
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.4-h783c2da_0.conda
 
54
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda
55
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda
56
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.7-hd590300_0.conda
57
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda
58
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-5_h92ddd45_netlib.tar.bz2
59
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
 
60
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2023.3.0-h2e90f83_2.conda
61
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2023.3.0-hd5fc58b_2.conda
62
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2023.3.0-hd5fc58b_2.conda
 
86
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
87
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.5-h232c23b_0.conda
88
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda
89
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-15.0.7-h0cdce71_0.conda
90
  - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda
91
  - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.3-py311h54ef318_0.conda
92
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.0.0-h84fe81f_26648.conda
93
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-hfe3b2da_0.conda
94
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda
95
  - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda
96
  - conda: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda
97
  - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda
 
144
  - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.6.0-pyhd8ed1ab_0.conda
145
  - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.3.0-pyhd8ed1ab_0.conda
146
  - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda
147
+ - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
148
  - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda
149
  - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda
150
  - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda
 
161
  - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2
162
  - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2
163
  - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.2.0-pyhca7485f_0.conda
164
+ - conda: https://conda.anaconda.org/conda-forge/noarch/gdown-5.1.0-pyhd8ed1ab_0.conda
165
  - conda: https://conda.anaconda.org/conda-forge/noarch/gradio-4.19.2-pyhd8ed1ab_0.conda
166
  - conda: https://conda.anaconda.org/conda-forge/noarch/gradio-client-0.10.1-pyhd8ed1ab_1.conda
167
  - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2
 
180
  - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda
181
  - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda
182
  - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
183
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda
184
  - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2
185
+ - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda
186
  - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda
187
  - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda
188
  - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.6.3-pyhd8ed1ab_0.conda
 
201
  - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda
202
  - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
203
  - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda
204
+ - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda
205
  - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.27.0-pyhd8ed1ab_0.conda
206
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.12-pypyh9d50eac_103.conda
207
  - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.0-pyha770c72_0.conda
208
  - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda
209
  - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda
 
213
  - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
214
  - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda
215
  - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda
216
+ - conda: https://conda.anaconda.org/pytorch/linux-64/pytorch-2.2.1-py3.11_cpu_0.tar.bz2
217
+ - conda: https://conda.anaconda.org/pytorch/linux-64/torchvision-0.17.1-py311_cpu.tar.bz2
218
+ - conda: https://conda.anaconda.org/pytorch/noarch/pytorch-mutex-1.0-cpu.tar.bz2
219
+ - pypi: https://files.pythonhosted.org/packages/01/37/e25f147a4219931ba1703f29e4d445b3b772017e9d0fa817cfe341f5fdf8/gradio_imageslider-0.0.18-py3-none-any.whl#sha256=69d3de62f86fdc6480354c7a751a9a26d16cadbf0ce792f5fb179082349686bf
220
+ - pypi: https://files.pythonhosted.org/packages/1c/0e/ff7a83382d42fdf6f3f5e1ea4b6761d45945d9901ba6900167833252b709/gradio_modal-0.0.2-py3-none-any.whl#sha256=7fb1b30dd967e5d64251b763afc922e189f24cadc1ae428126575c26cdd42b83
221
+ - pypi: https://files.pythonhosted.org/packages/1e/07/bf730d44c2fe1b676ad9cc2be5f5f861eb5d153fb6951987a2d6a96379a9/nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl#sha256=64335a8088e2b9d196ae8665430bc6a2b7e6ef2eb877a9c735c804bd4ff6467c
222
+ - pypi: https://files.pythonhosted.org/packages/2c/df/5810707da6f2fd4be57f0cc417987c0fa16a2eecf0b1b71f82ea555dc619/torch-2.2.1-cp311-cp311-manylinux1_x86_64.whl#sha256=d86664ec85902967d902e78272e97d1aff1d331f7619d398d3ffab1c9b8e9157
223
+ - pypi: https://files.pythonhosted.org/packages/37/6d/121efd7382d5b0284239f4ab1fc1590d86d34ed4a4a2fdb13b30ca8e5740/nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl#sha256=ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728
224
+ - pypi: https://files.pythonhosted.org/packages/38/00/d0d4e48aef772ad5aebcf70b73028f88db6e5640b36c38e90445b7a57c45/nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl#sha256=a9734707a2c96443331c1e48c717024aa6678a0e2a4cb66b2c364d18cee6b48d
225
+ - pypi: https://files.pythonhosted.org/packages/3a/49/12fc5188602c68a789a0fdaee63d176a71ad5c1e34d25aeb8554abe46089/torchvision-0.17.1-cp311-cp311-manylinux1_x86_64.whl#sha256=5966936c669a08870f6547cd0a90d08b157aeda03293f79e2adbb934687175ed
226
+ - pypi: https://files.pythonhosted.org/packages/44/31/4890b1c9abc496303412947fc7dcea3d14861720642b49e8ceed89636705/nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl#sha256=9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0
227
+ - pypi: https://files.pythonhosted.org/packages/65/5b/cfaeebf25cd9fdec14338ccb16f6b2c4c7fa9163aefcf057d86b9cc248bb/nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl#sha256=f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c
228
+ - pypi: https://files.pythonhosted.org/packages/7e/00/6b218edd739ecfc60524e585ba8e6b00554dd908de2c9c66c1af3e44e18d/nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl#sha256=e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e
229
+ - pypi: https://files.pythonhosted.org/packages/86/94/eb540db023ce1d162e7bea9f8f5aa781d57c65aed513c33ee9a5123ead4d/nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl#sha256=794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56
230
+ - pypi: https://files.pythonhosted.org/packages/b6/9f/c64c03f49d6fbc56196664d05dba14e3a561038a81a638eeb47f4d4cfd48/nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl#sha256=339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2
231
+ - pypi: https://files.pythonhosted.org/packages/bc/1d/8de1e5c67099015c834315e333911273a8c6aaba78923dd1d1e25fc5f217/nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl#sha256=8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd
232
+ - pypi: https://files.pythonhosted.org/packages/bd/ac/3974caaa459bf2c3a244a84be8d17561f631f7d42af370fc311defeca2fb/triton-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=da58a152bddb62cafa9a857dd2bc1f886dbf9f9c90a2b5da82157cd2b34392b0
233
+ - pypi: https://files.pythonhosted.org/packages/d7/a5/bbbc3b74a94fbdbd7915e7ad030f16539bfdc1362f7e9003b594f0537950/glob2-0.7.tar.gz#sha256=85c3dbd07c8aa26d63d7aacee34fa86e9a91a3873bc30bf62ec46e531f92ab8c
234
+ - pypi: https://files.pythonhosted.org/packages/da/d3/8057f0587683ed2fcd4dbfbdfdfa807b9160b809976099d36b8f60d08f03/nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl#sha256=dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5
235
+ - pypi: https://files.pythonhosted.org/packages/eb/d5/c68b1d2cdfcc59e72e8a5949a37ddb22ae6cade80cd4a57a84d4c8b55472/nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl#sha256=6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40
236
+ - pypi: https://files.pythonhosted.org/packages/ed/1f/95cb961341bf33e534a472672ef4916c90046dc3c57b1442f5586dda72f1/geffnet-1.0.2-py3-none-any.whl#sha256=259013030bf429bc7a4fc4e8dc3fef6364e9750a6cee24d28e1674f8c3048d3a
237
+ - pypi: https://files.pythonhosted.org/packages/ff/74/a2e2be7fb83aaedec84f391f082cf765dfb635e7caa9b49065f73e4835d8/nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl#sha256=5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9
238
  packages:
239
  - kind: conda
240
  name: _libgcc_mutex
 
250
  - kind: conda
251
  name: _openmp_mutex
252
  version: '4.5'
253
+ build: 2_kmp_llvm
254
+ build_number: 2
255
  subdir: linux-64
256
+ url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2
257
+ sha256: 84a66275da3a66e3f3e70e9d8f10496d807d01a9e4ec16cd2274cc5e28c478fc
258
+ md5: 562b26ba2e19059551a811e72ab7f793
259
  depends:
260
  - _libgcc_mutex 0.1 conda_forge
261
+ - llvm-openmp >=9.0.1
 
 
262
  license: BSD-3-Clause
263
  license_family: BSD
264
+ size: 5744
265
+ timestamp: 1650742457817
266
  - kind: conda
267
  name: aiofiles
268
  version: 23.2.1
 
276
  - python >=3.7
277
  license: Apache-2.0
278
  license_family: Apache
279
+ purls:
280
+ - pkg:pypi/aiofiles
281
  size: 19507
282
  timestamp: 1698946114329
283
  - kind: conda
 
301
  - typing-extensions >=4.0.1
302
  license: BSD-3-Clause
303
  license_family: BSD
304
+ purls:
305
+ - pkg:pypi/altair
306
  size: 457454
307
  timestamp: 1701735672437
308
  - kind: conda
 
319
  - typing-extensions >=4.0.0
320
  license: MIT
321
  license_family: MIT
322
+ purls:
323
+ - pkg:pypi/annotated-types
324
  size: 17026
325
  timestamp: 1696634393637
326
  - kind: conda
 
343
  - uvloop >=0.17
344
  license: MIT
345
  license_family: MIT
346
+ purls:
347
+ - pkg:pypi/anyio
348
  size: 102331
349
  timestamp: 1708355504396
350
  - kind: conda
 
375
  - python >=3.7
376
  license: MIT
377
  license_family: MIT
378
+ purls:
379
+ - pkg:pypi/attrs
380
  size: 54582
381
  timestamp: 1704011393776
382
+ - kind: conda
383
+ name: beautifulsoup4
384
+ version: 4.12.3
385
+ build: pyha770c72_0
386
+ subdir: noarch
387
+ noarch: python
388
+ url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
389
+ sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317
390
+ md5: 332493000404d8411859539a5a630865
391
+ depends:
392
+ - python >=3.6
393
+ - soupsieve >=1.2
394
+ license: MIT
395
+ license_family: MIT
396
+ size: 118200
397
+ timestamp: 1705564819537
398
+ - kind: conda
399
+ name: blas
400
+ version: '1.0'
401
+ build: mkl
402
+ subdir: linux-64
403
+ url: https://conda.anaconda.org/conda-forge/linux-64/blas-1.0-mkl.tar.bz2
404
+ sha256: a9a9125029a66905fc9e932dfd4f595be3a59a30db37fd7bf4a675a5c6151d62
405
+ md5: 349aef876b1d8c9dccae01de20d5b385
406
+ depends:
407
+ - mkl
408
+ track_features:
409
+ - blas_mkl
410
+ license: BSD 3-clause
411
+ size: 1381
412
  - kind: conda
413
  name: brotli
414
  version: 1.1.0
 
546
  - python >=3.7
547
  license: MIT
548
  license_family: MIT
549
+ purls:
550
+ - pkg:pypi/charset-normalizer
551
  size: 46597
552
  timestamp: 1698833765762
553
  - kind: conda
 
564
  - python >=3.8
565
  license: BSD-3-Clause
566
  license_family: BSD
567
+ purls:
568
+ - pkg:pypi/click
569
  size: 84437
570
  timestamp: 1692311973840
571
  - kind: conda
 
581
  - python >=3.7
582
  license: BSD-3-Clause
583
  license_family: BSD
584
+ purls:
585
+ - pkg:pypi/colorama
586
  size: 25170
587
  timestamp: 1666700778190
588
  - kind: conda
 
601
  - python_abi 3.11.* *_cp311
602
  license: BSD-3-Clause
603
  license_family: BSD
604
+ purls:
605
+ - pkg:pypi/contourpy
606
  size: 255843
607
  timestamp: 1699041590533
608
  - kind: conda
 
618
  - python >=3.8
619
  license: BSD-3-Clause
620
  license_family: BSD
621
+ purls:
622
+ - pkg:pypi/cycler
623
  size: 13458
624
  timestamp: 1696677888423
625
  - kind: conda
 
649
  depends:
650
  - python >=3.7
651
  license: MIT and PSF-2.0
652
+ purls:
653
+ - pkg:pypi/exceptiongroup
654
  size: 20551
655
  timestamp: 1704921321122
656
  - kind: conda
 
685
  - typing-extensions >=4.5.0
686
  license: MIT
687
  license_family: MIT
688
+ purls:
689
+ - pkg:pypi/fastapi
690
  size: 56205
691
  timestamp: 1693161441022
692
  - kind: conda
 
755
  - python >=3.6
756
  license: MIT
757
  license_family: MIT
758
+ purls:
759
+ - pkg:pypi/ffmpy
760
  size: 10415
761
  timestamp: 1659475099796
762
  - kind: conda
 
771
  depends:
772
  - python >=3.7
773
  license: Unlicense
774
+ purls:
775
+ - pkg:pypi/filelock
776
  size: 15605
777
  timestamp: 1698715139726
778
  - kind: conda
 
895
  - python_abi 3.11.* *_cp311
896
  license: MIT
897
  license_family: MIT
898
+ purls:
899
+ - pkg:pypi/fonttools
900
  size: 2817685
901
  timestamp: 1708049363863
902
  - kind: conda
 
941
  - python >=3.8
942
  license: BSD-3-Clause
943
  license_family: BSD
944
+ purls:
945
+ - pkg:pypi/fsspec
946
  size: 128662
947
  timestamp: 1707102616711
948
+ - kind: conda
949
+ name: gdown
950
+ version: 5.1.0
951
+ build: pyhd8ed1ab_0
952
+ subdir: noarch
953
+ noarch: python
954
+ url: https://conda.anaconda.org/conda-forge/noarch/gdown-5.1.0-pyhd8ed1ab_0.conda
955
+ sha256: 1ab1e5cf5c851f91abebfc6a6c094bc6e2afa3639e6586f6ff890acc8551a63d
956
+ md5: 6f880647c0270648f710f334c60bc76c
957
+ depends:
958
+ - beautifulsoup4
959
+ - filelock
960
+ - python >=3.8
961
+ - requests
962
+ - tqdm
963
+ license: MIT
964
+ license_family: MIT
965
+ purls:
966
+ - pkg:pypi/gdown
967
+ size: 21479
968
+ timestamp: 1706981727598
969
+ - kind: pypi
970
+ name: geffnet
971
+ version: 1.0.2
972
+ url: https://files.pythonhosted.org/packages/ed/1f/95cb961341bf33e534a472672ef4916c90046dc3c57b1442f5586dda72f1/geffnet-1.0.2-py3-none-any.whl#sha256=259013030bf429bc7a4fc4e8dc3fef6364e9750a6cee24d28e1674f8c3048d3a
973
+ sha256: 259013030bf429bc7a4fc4e8dc3fef6364e9750a6cee24d28e1674f8c3048d3a
974
+ requires_dist:
975
+ - torch >=1.4
976
+ - torchvision
977
+ requires_python: '>=3.6'
978
  - kind: conda
979
  name: gettext
980
  version: 0.21.1
 
988
  license: LGPL-2.1-or-later AND GPL-3.0-or-later
989
  size: 4320628
990
  timestamp: 1665673494324
991
+ - kind: pypi
992
+ name: glob2
993
+ version: '0.7'
994
+ url: https://files.pythonhosted.org/packages/d7/a5/bbbc3b74a94fbdbd7915e7ad030f16539bfdc1362f7e9003b594f0537950/glob2-0.7.tar.gz#sha256=85c3dbd07c8aa26d63d7aacee34fa86e9a91a3873bc30bf62ec46e531f92ab8c
995
+ sha256: 85c3dbd07c8aa26d63d7aacee34fa86e9a91a3873bc30bf62ec46e531f92ab8c
996
  - kind: conda
997
  name: gmp
998
  version: 6.3.0
 
1007
  license: GPL-2.0-or-later AND LGPL-3.0-or-later
1008
  size: 563123
1009
  timestamp: 1699629991732
1010
+ - kind: conda
1011
+ name: gmpy2
1012
+ version: 2.1.2
1013
+ build: py311h6a5fa03_1
1014
+ build_number: 1
1015
+ subdir: linux-64
1016
+ url: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.1.2-py311h6a5fa03_1.tar.bz2
1017
+ sha256: 20862200f4d07ba583ab6ae9b56d7de2462474240872100973711dfa20d562d7
1018
+ md5: 3515bd4a3d92bbd3cc2d25aac335e34d
1019
+ depends:
1020
+ - gmp >=6.2.1,<7.0a0
1021
+ - libgcc-ng >=12
1022
+ - mpc >=1.2.1,<2.0a0
1023
+ - mpfr >=4.1.0,<5.0a0
1024
+ - python >=3.11,<3.12.0a0
1025
+ - python_abi 3.11.* *_cp311
1026
+ license: LGPL-3.0-or-later
1027
+ license_family: LGPL
1028
+ purls:
1029
+ - pkg:pypi/gmpy2
1030
+ size: 219751
1031
+ timestamp: 1666808798297
1032
  - kind: conda
1033
  name: gnutls
1034
  version: 3.7.9
 
1086
  - typing-extensions >=4.0,<5.dev0
1087
  - uvicorn >=0.14.0
1088
  license: MIT AND Apache-2.0
1089
+ purls:
1090
+ - pkg:pypi/gradio
1091
  size: 12582364
1092
  timestamp: 1708676706303
1093
  - kind: conda
 
1110
  - websockets >=10.0,<12.0
1111
  license: Apache-2.0
1112
  license_family: APACHE
1113
+ purls:
1114
+ - pkg:pypi/gradio-client
1115
  size: 299846
1116
  timestamp: 1708677035723
1117
+ - kind: pypi
1118
+ name: gradio-imageslider
1119
+ version: 0.0.18
1120
+ url: https://files.pythonhosted.org/packages/01/37/e25f147a4219931ba1703f29e4d445b3b772017e9d0fa817cfe341f5fdf8/gradio_imageslider-0.0.18-py3-none-any.whl#sha256=69d3de62f86fdc6480354c7a751a9a26d16cadbf0ce792f5fb179082349686bf
1121
+ sha256: 69d3de62f86fdc6480354c7a751a9a26d16cadbf0ce792f5fb179082349686bf
1122
+ requires_python: '>=3.8'
1123
+ - kind: pypi
1124
+ name: gradio-modal
1125
+ version: 0.0.2
1126
+ url: https://files.pythonhosted.org/packages/1c/0e/ff7a83382d42fdf6f3f5e1ea4b6761d45945d9901ba6900167833252b709/gradio_modal-0.0.2-py3-none-any.whl#sha256=7fb1b30dd967e5d64251b763afc922e189f24cadc1ae428126575c26cdd42b83
1127
+ sha256: 7fb1b30dd967e5d64251b763afc922e189f24cadc1ae428126575c26cdd42b83
1128
+ requires_dist:
1129
+ - gradio <5.0, >=4.0
1130
+ - build ; extra == 'dev'
1131
+ - twine ; extra == 'dev'
1132
+ requires_python: '>=3.8'
1133
  - kind: conda
1134
  name: graphite2
1135
  version: 1.3.13
 
1159
  - typing_extensions
1160
  license: MIT
1161
  license_family: MIT
1162
+ purls:
1163
+ - pkg:pypi/h11
1164
  size: 48251
1165
  timestamp: 1664132995560
1166
  - kind: conda
 
1178
  - python >=3.6.1
1179
  license: MIT
1180
  license_family: MIT
1181
+ purls:
1182
+ - pkg:pypi/h2
1183
  size: 46754
1184
  timestamp: 1634280590080
1185
  - kind: conda
 
1215
  - python
1216
  license: MIT
1217
  license_family: MIT
1218
+ purls:
1219
+ - pkg:pypi/hpack
1220
  size: 25341
1221
  timestamp: 1598856368685
1222
  - kind: conda
 
1237
  - sniffio 1.*
1238
  license: BSD-3-Clause
1239
  license_family: BSD
1240
+ purls:
1241
+ - pkg:pypi/httpcore
1242
  size: 45727
1243
  timestamp: 1708529429006
1244
  - kind: conda
 
1259
  - sniffio
1260
  license: BSD-3-Clause
1261
  license_family: BSD
1262
+ purls:
1263
+ - pkg:pypi/httpx
1264
  size: 64651
1265
  timestamp: 1708531043505
1266
  - kind: conda
 
1283
  - typing-extensions >=3.7.4.3
1284
  license: Apache-2.0
1285
  license_family: APACHE
1286
+ purls:
1287
+ - pkg:pypi/huggingface-hub
1288
  size: 225834
1289
  timestamp: 1709252375076
1290
  - kind: conda
 
1300
  - python >=3.6
1301
  license: MIT
1302
  license_family: MIT
1303
+ purls:
1304
+ - pkg:pypi/hyperframe
1305
  size: 14646
1306
  timestamp: 1619110249723
1307
  - kind: conda
 
1332
  - python >=3.6
1333
  license: BSD-3-Clause
1334
  license_family: BSD
1335
+ purls:
1336
+ - pkg:pypi/idna
1337
  size: 50124
1338
  timestamp: 1701027126206
1339
  - kind: conda
 
1384
  - importlib-resources >=6.1.2,<6.1.3.0a0
1385
  license: Apache-2.0
1386
  license_family: APACHE
1387
+ purls:
1388
+ - pkg:pypi/importlib-resources
1389
  size: 30448
1390
  timestamp: 1708948623752
1391
  - kind: conda
 
1402
  - python >=3.7
1403
  license: BSD-3-Clause
1404
  license_family: BSD
1405
+ purls:
1406
+ - pkg:pypi/jinja2
1407
  size: 111589
1408
  timestamp: 1704967140287
1409
  - kind: conda
 
1442
  - referencing >=0.31.0
1443
  license: MIT
1444
  license_family: MIT
1445
+ purls:
1446
+ - pkg:pypi/jsonschema-specifications
1447
  size: 16431
1448
  timestamp: 1703778502971
1449
  - kind: conda
 
1462
  - python_abi 3.11.* *_cp311
1463
  license: BSD-3-Clause
1464
  license_family: BSD
1465
+ purls:
1466
+ - pkg:pypi/kiwisolver
1467
  size: 73273
1468
  timestamp: 1695380140676
1469
  - kind: conda
 
1570
  - kind: conda
1571
  name: libblas
1572
  version: 3.9.0
1573
+ build: 1_h86c2bf4_netlib
1574
+ build_number: 1
1575
  subdir: linux-64
1576
+ url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-1_h86c2bf4_netlib.tar.bz2
1577
+ sha256: c95bf82fbf258350d5f61c653a1a14d2e1cca7302bb348cc8347caa84e7ac9b1
1578
+ md5: 91273b91f1023d5c72ffc79e02e7812e
1579
  depends:
1580
+ - libgcc-ng >=9.3.0
1581
+ - libgfortran-ng
1582
+ - libgfortran5 >=9.3.0
1583
+ track_features:
1584
+ - blas_netlib
 
 
1585
  license: BSD-3-Clause
1586
  license_family: BSD
1587
+ size: 203305
1588
+ timestamp: 1603052017387
1589
  - kind: conda
1590
  name: libbrotlicommon
1591
  version: 1.1.0
 
1636
  - kind: conda
1637
  name: libcblas
1638
  version: 3.9.0
1639
+ build: 5_h92ddd45_netlib
1640
+ build_number: 5
1641
  subdir: linux-64
1642
+ url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-5_h92ddd45_netlib.tar.bz2
1643
+ sha256: 93086c3586c5b1f961cb468995dc35d9b99ca8f10d0b76d594a554029f60670c
1644
+ md5: 6a3f536ec30f6e6948211a07b1d04ced
1645
  depends:
1646
+ - libblas 3.9.0.*
1647
+ - libgcc-ng >=9.3.0
1648
+ - libgfortran-ng
1649
+ - libgfortran5 >=9.3.0
1650
+ track_features:
1651
+ - blas_netlib
1652
  license: BSD-3-Clause
1653
  license_family: BSD
1654
+ size: 55516
1655
+ timestamp: 1618011709500
1656
  - kind: conda
1657
  name: libdeflate
1658
  version: '1.19'
 
1785
  license: LGPL-2.1-or-later
1786
  size: 2692079
1787
  timestamp: 1708284870228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1788
  - kind: conda
1789
  name: libhwloc
1790
  version: 2.9.3
 
1850
  - kind: conda
1851
  name: liblapack
1852
  version: 3.9.0
1853
+ build: 5_h92ddd45_netlib
1854
+ build_number: 5
1855
  subdir: linux-64
1856
+ url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-5_h92ddd45_netlib.tar.bz2
1857
+ sha256: 41eb83ea6ce409fd8c81fc38e029422840f581022e6f33998a680c0b23884cd6
1858
+ md5: ffb80081cf8f43903b07045630188851
1859
  depends:
1860
+ - libblas 3.9.0.*
1861
+ - libgcc-ng >=9.3.0
1862
+ - libgfortran-ng
1863
+ - libgfortran5 >=9.3.0
1864
+ track_features:
1865
+ - blas_netlib
1866
  license: BSD-3-Clause
1867
  license_family: BSD
1868
+ size: 3111106
1869
+ timestamp: 1618011727809
1870
  - kind: conda
1871
  name: libnsl
1872
  version: 2.0.1
 
1881
  license_family: GPL
1882
  size: 33408
1883
  timestamp: 1697359010159
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1884
  - kind: conda
1885
  name: libopenvino
1886
  version: 2023.3.0
 
2344
  license_family: Other
2345
  size: 61588
2346
  timestamp: 1686575217516
2347
+ - kind: conda
2348
+ name: llvm-openmp
2349
+ version: 15.0.7
2350
+ build: h0cdce71_0
2351
+ subdir: linux-64
2352
+ url: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-15.0.7-h0cdce71_0.conda
2353
+ sha256: 7c67d383a8b1f3e7bf9e046e785325c481f6868194edcfb9d78d261da4ad65d4
2354
+ md5: 589c9a3575a050b583241c3d688ad9aa
2355
+ depends:
2356
+ - libzlib >=1.2.13,<1.3.0a0
2357
+ constrains:
2358
+ - openmp 15.0.7|15.0.7.*
2359
+ license: Apache-2.0 WITH LLVM-exception
2360
+ license_family: APACHE
2361
+ size: 3268766
2362
+ timestamp: 1673584331056
2363
  - kind: conda
2364
  name: markdown-it-py
2365
  version: 3.0.0
 
2374
  - python >=3.8
2375
  license: MIT
2376
  license_family: MIT
2377
+ purls:
2378
+ - pkg:pypi/markdown-it-py
2379
  size: 64356
2380
  timestamp: 1686175179621
2381
  - kind: conda
 
2394
  - jinja2 >=3.0.0
2395
  license: BSD-3-Clause
2396
  license_family: BSD
2397
+ purls:
2398
+ - pkg:pypi/markupsafe
2399
  size: 27502
2400
  timestamp: 1706900084436
2401
  - kind: conda
 
2426
  - tk >=8.6.13,<8.7.0a0
2427
  license: PSF-2.0
2428
  license_family: PSF
2429
+ purls:
2430
+ - pkg:pypi/matplotlib
2431
  size: 7927557
2432
  timestamp: 1708026755428
2433
  - kind: conda
 
2443
  - python >=3.6
2444
  license: MIT
2445
  license_family: MIT
2446
+ purls:
2447
+ - pkg:pypi/mdurl
2448
  size: 14680
2449
  timestamp: 1704317789138
2450
+ - kind: conda
2451
+ name: mkl
2452
+ version: 2023.0.0
2453
+ build: h84fe81f_26648
2454
+ build_number: 26648
2455
+ subdir: linux-64
2456
+ url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.0.0-h84fe81f_26648.conda
2457
+ sha256: 989c614ec8417a22f61e9d4ec920c88910bbc3239885a6f20ad4eacad09f277c
2458
+ md5: 2a37425a272410241c7613c38e3955b2
2459
+ depends:
2460
+ - _openmp_mutex * *_llvm
2461
+ - _openmp_mutex >=4.5
2462
+ - llvm-openmp >=15.0.7
2463
+ - tbb 2021.*
2464
+ license: LicenseRef-ProprietaryIntel
2465
+ license_family: Proprietary
2466
+ size: 161440193
2467
+ timestamp: 1674673370494
2468
+ - kind: conda
2469
+ name: mpc
2470
+ version: 1.3.1
2471
+ build: hfe3b2da_0
2472
+ subdir: linux-64
2473
+ url: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-hfe3b2da_0.conda
2474
+ sha256: 2f88965949ba7b4b21e7e5facd62285f7c6efdb17359d1b365c3bb4ecc968d29
2475
+ md5: 289c71e83dc0daa7d4c81f04180778ca
2476
+ depends:
2477
+ - gmp >=6.2.1,<7.0a0
2478
+ - libgcc-ng >=12
2479
+ - mpfr >=4.1.0,<5.0a0
2480
+ license: LGPL-3.0-or-later
2481
+ license_family: LGPL
2482
+ size: 116276
2483
+ timestamp: 1674263855481
2484
+ - kind: conda
2485
+ name: mpfr
2486
+ version: 4.2.1
2487
+ build: h9458935_0
2488
+ subdir: linux-64
2489
+ url: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda
2490
+ sha256: 008230a53ff15cf61966476b44f7ba2c779826825b9ca639a0a2b44d8f7aa6cb
2491
+ md5: 4c28f3210b30250037a4a627eeee9e0f
2492
+ depends:
2493
+ - gmp >=6.2.1,<7.0a0
2494
+ - libgcc-ng >=12
2495
+ license: LGPL-3.0-only
2496
+ license_family: LGPL
2497
+ size: 641512
2498
+ timestamp: 1698004072487
2499
+ - kind: conda
2500
+ name: mpmath
2501
+ version: 1.3.0
2502
+ build: pyhd8ed1ab_0
2503
+ subdir: noarch
2504
+ noarch: python
2505
+ url: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda
2506
+ sha256: a4f025c712ec1502a55c471b56a640eaeebfce38dd497d5a1a33729014cac47a
2507
+ md5: dbf6e2d89137da32fa6670f3bffc024e
2508
+ depends:
2509
+ - python >=3.6
2510
+ license: BSD-3-Clause
2511
+ license_family: BSD
2512
+ purls:
2513
+ - pkg:pypi/mpmath
2514
+ size: 438339
2515
+ timestamp: 1678228210181
2516
  - kind: conda
2517
  name: munkres
2518
  version: 1.1.4
 
2556
  license_family: GPL
2557
  size: 1011638
2558
  timestamp: 1686309814836
2559
+ - kind: conda
2560
+ name: networkx
2561
+ version: 3.2.1
2562
+ build: pyhd8ed1ab_0
2563
+ subdir: noarch
2564
+ noarch: python
2565
+ url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda
2566
+ sha256: 7629aa4f9f8cdff45ea7a4701fe58dccce5bf2faa01c26eb44cbb27b7e15ca9d
2567
+ md5: 425fce3b531bed6ec3c74fab3e5f0a1c
2568
+ depends:
2569
+ - python >=3.9
2570
+ constrains:
2571
+ - matplotlib >=3.5
2572
+ - scipy >=1.9,!=1.11.0,!=1.11.1
2573
+ - numpy >=1.22
2574
+ - pandas >=1.4
2575
+ license: BSD-3-Clause
2576
+ license_family: BSD
2577
+ purls:
2578
+ - pkg:pypi/networkx
2579
+ size: 1149552
2580
+ timestamp: 1698504905258
2581
  - kind: conda
2582
  name: numpy
2583
  version: 1.26.4
 
2598
  - numpy-base <0a0
2599
  license: BSD-3-Clause
2600
  license_family: BSD
2601
+ purls:
2602
+ - pkg:pypi/numpy
2603
  size: 8065890
2604
  timestamp: 1707225944355
2605
+ - kind: pypi
2606
+ name: nvidia-cublas-cu12
2607
+ version: 12.1.3.1
2608
+ url: https://files.pythonhosted.org/packages/37/6d/121efd7382d5b0284239f4ab1fc1590d86d34ed4a4a2fdb13b30ca8e5740/nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl#sha256=ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728
2609
+ sha256: ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728
2610
+ requires_python: '>=3'
2611
+ - kind: pypi
2612
+ name: nvidia-cuda-cupti-cu12
2613
+ version: 12.1.105
2614
+ url: https://files.pythonhosted.org/packages/7e/00/6b218edd739ecfc60524e585ba8e6b00554dd908de2c9c66c1af3e44e18d/nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl#sha256=e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e
2615
+ sha256: e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e
2616
+ requires_python: '>=3'
2617
+ - kind: pypi
2618
+ name: nvidia-cuda-nvrtc-cu12
2619
+ version: 12.1.105
2620
+ url: https://files.pythonhosted.org/packages/b6/9f/c64c03f49d6fbc56196664d05dba14e3a561038a81a638eeb47f4d4cfd48/nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl#sha256=339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2
2621
+ sha256: 339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2
2622
+ requires_python: '>=3'
2623
+ - kind: pypi
2624
+ name: nvidia-cuda-runtime-cu12
2625
+ version: 12.1.105
2626
+ url: https://files.pythonhosted.org/packages/eb/d5/c68b1d2cdfcc59e72e8a5949a37ddb22ae6cade80cd4a57a84d4c8b55472/nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl#sha256=6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40
2627
+ sha256: 6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40
2628
+ requires_python: '>=3'
2629
+ - kind: pypi
2630
+ name: nvidia-cudnn-cu12
2631
+ version: 8.9.2.26
2632
+ url: https://files.pythonhosted.org/packages/ff/74/a2e2be7fb83aaedec84f391f082cf765dfb635e7caa9b49065f73e4835d8/nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl#sha256=5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9
2633
+ sha256: 5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9
2634
+ requires_dist:
2635
+ - nvidia-cublas-cu12
2636
+ requires_python: '>=3'
2637
+ - kind: pypi
2638
+ name: nvidia-cufft-cu12
2639
+ version: 11.0.2.54
2640
+ url: https://files.pythonhosted.org/packages/86/94/eb540db023ce1d162e7bea9f8f5aa781d57c65aed513c33ee9a5123ead4d/nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl#sha256=794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56
2641
+ sha256: 794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56
2642
+ requires_python: '>=3'
2643
+ - kind: pypi
2644
+ name: nvidia-curand-cu12
2645
+ version: 10.3.2.106
2646
+ url: https://files.pythonhosted.org/packages/44/31/4890b1c9abc496303412947fc7dcea3d14861720642b49e8ceed89636705/nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl#sha256=9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0
2647
+ sha256: 9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0
2648
+ requires_python: '>=3'
2649
+ - kind: pypi
2650
+ name: nvidia-cusolver-cu12
2651
+ version: 11.4.5.107
2652
+ url: https://files.pythonhosted.org/packages/bc/1d/8de1e5c67099015c834315e333911273a8c6aaba78923dd1d1e25fc5f217/nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl#sha256=8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd
2653
+ sha256: 8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd
2654
+ requires_dist:
2655
+ - nvidia-cublas-cu12
2656
+ - nvidia-nvjitlink-cu12
2657
+ - nvidia-cusparse-cu12
2658
+ requires_python: '>=3'
2659
+ - kind: pypi
2660
+ name: nvidia-cusparse-cu12
2661
+ version: 12.1.0.106
2662
+ url: https://files.pythonhosted.org/packages/65/5b/cfaeebf25cd9fdec14338ccb16f6b2c4c7fa9163aefcf057d86b9cc248bb/nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl#sha256=f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c
2663
+ sha256: f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c
2664
+ requires_dist:
2665
+ - nvidia-nvjitlink-cu12
2666
+ requires_python: '>=3'
2667
+ - kind: pypi
2668
+ name: nvidia-nccl-cu12
2669
+ version: 2.19.3
2670
+ url: https://files.pythonhosted.org/packages/38/00/d0d4e48aef772ad5aebcf70b73028f88db6e5640b36c38e90445b7a57c45/nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl#sha256=a9734707a2c96443331c1e48c717024aa6678a0e2a4cb66b2c364d18cee6b48d
2671
+ sha256: a9734707a2c96443331c1e48c717024aa6678a0e2a4cb66b2c364d18cee6b48d
2672
+ requires_python: '>=3'
2673
+ - kind: pypi
2674
+ name: nvidia-nvjitlink-cu12
2675
+ version: 12.3.101
2676
+ url: https://files.pythonhosted.org/packages/1e/07/bf730d44c2fe1b676ad9cc2be5f5f861eb5d153fb6951987a2d6a96379a9/nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl#sha256=64335a8088e2b9d196ae8665430bc6a2b7e6ef2eb877a9c735c804bd4ff6467c
2677
+ sha256: 64335a8088e2b9d196ae8665430bc6a2b7e6ef2eb877a9c735c804bd4ff6467c
2678
+ requires_python: '>=3'
2679
+ - kind: pypi
2680
+ name: nvidia-nvtx-cu12
2681
+ version: 12.1.105
2682
+ url: https://files.pythonhosted.org/packages/da/d3/8057f0587683ed2fcd4dbfbdfdfa807b9160b809976099d36b8f60d08f03/nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl#sha256=dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5
2683
+ sha256: dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5
2684
+ requires_python: '>=3'
2685
  - kind: conda
2686
  name: ocl-icd
2687
  version: 2.3.2
 
2760
  - python_abi 3.11.* *_cp311
2761
  license: Apache-2.0
2762
  license_family: Apache
2763
+ purls:
2764
+ - pkg:pypi/orjson
2765
  size: 274831
2766
  timestamp: 1708717354229
2767
  - kind: conda
 
2793
  - python >=3.7
2794
  license: Apache-2.0
2795
  license_family: APACHE
2796
+ purls:
2797
+ - pkg:pypi/packaging
2798
  size: 49452
2799
  timestamp: 1696202521121
2800
  - kind: conda
 
2886
  depends:
2887
  - python >=3.6
2888
  license: MIT AND PSF-2.0
2889
+ purls:
2890
+ - pkg:pypi/pkgutil-resolve-name
2891
  size: 10778
2892
  timestamp: 1694617398467
2893
  - kind: conda
 
2936
  - typing-extensions >=4.6.1
2937
  license: MIT
2938
  license_family: MIT
2939
+ purls:
2940
+ - pkg:pypi/pydantic
2941
  size: 271902
2942
  timestamp: 1709075341323
2943
  - kind: conda
 
2955
  - typing-extensions >=4.6.0,!=4.7.0
2956
  license: MIT
2957
  license_family: MIT
2958
+ purls:
2959
+ - pkg:pypi/pydantic-core
2960
  size: 1659194
2961
  timestamp: 1708700970198
2962
  - kind: conda
 
2972
  - python >=3.6
2973
  license: MIT
2974
  license_family: MIT
2975
+ purls:
2976
+ - pkg:pypi/pydub
2977
  size: 31190
2978
  timestamp: 1615612572693
2979
  - kind: conda
 
2989
  - python >=3.7
2990
  license: BSD-2-Clause
2991
  license_family: BSD
2992
+ purls:
2993
+ - pkg:pypi/pygments
2994
  size: 860425
2995
  timestamp: 1700608076927
2996
  - kind: conda
 
3006
  - python >=3.6
3007
  license: MIT
3008
  license_family: MIT
3009
+ purls:
3010
+ - pkg:pypi/pyparsing
3011
  size: 89521
3012
  timestamp: 1690737983548
3013
  - kind: conda
 
3025
  - python >=3.8
3026
  license: BSD-3-Clause
3027
  license_family: BSD
3028
+ purls:
3029
+ - pkg:pypi/pysocks
3030
  size: 18981
3031
  timestamp: 1661604969727
3032
  - kind: conda
 
3073
  - six >=1.5
3074
  license: Apache-2.0
3075
  license_family: APACHE
3076
+ purls:
3077
+ - pkg:pypi/python-dateutil
3078
  size: 222742
3079
  timestamp: 1709299922152
3080
  - kind: conda
 
3090
  - python >=3.7
3091
  license: Apache-2.0
3092
  license_family: Apache
3093
+ purls:
3094
+ - pkg:pypi/python-multipart
3095
  size: 26439
3096
  timestamp: 1707760278735
3097
  - kind: conda
 
3107
  - python >=3.6
3108
  license: Apache-2.0
3109
  license_family: APACHE
3110
+ purls:
3111
+ - pkg:pypi/tzdata
3112
  size: 144024
3113
  timestamp: 1707747742930
3114
  - kind: conda
 
3126
  license_family: BSD
3127
  size: 6385
3128
  timestamp: 1695147338551
3129
+ - kind: conda
3130
+ name: pytorch
3131
+ version: 2.2.1
3132
+ build: py3.11_cpu_0
3133
+ subdir: linux-64
3134
+ url: https://conda.anaconda.org/pytorch/linux-64/pytorch-2.2.1-py3.11_cpu_0.tar.bz2
3135
+ sha256: a7397aaeb0a67d73bfca7f3e6c1a29286ff57fc7e6c3b510fe9271ab906f0848
3136
+ md5: 00b065484baa6166c50a5f067980edca
3137
+ depends:
3138
+ - blas * mkl
3139
+ - filelock
3140
+ - jinja2
3141
+ - llvm-openmp <16
3142
+ - mkl >=2018
3143
+ - networkx
3144
+ - python >=3.11,<3.12.0a0
3145
+ - pytorch-mutex 1.0 cpu
3146
+ - pyyaml
3147
+ - sympy
3148
+ - typing_extensions
3149
+ constrains:
3150
+ - cpuonly
3151
+ license: BSD 3-Clause
3152
+ license_family: BSD
3153
+ size: 86421712
3154
+ timestamp: 1708027733815
3155
+ - kind: conda
3156
+ name: pytorch-mutex
3157
+ version: '1.0'
3158
+ build: cpu
3159
+ subdir: noarch
3160
+ noarch: generic
3161
+ url: https://conda.anaconda.org/pytorch/noarch/pytorch-mutex-1.0-cpu.tar.bz2
3162
+ sha256: d48c964188ca49660d750cffd73698d217cf94e694cd51987f9f186425435e76
3163
+ md5: 49565ed726991fd28d08a39885caa88d
3164
+ track_features:
3165
+ - pytorch-mutex
3166
+ size: 2897
3167
+ timestamp: 1628062935164
3168
  - kind: conda
3169
  name: pytz
3170
  version: '2024.1'
 
3178
  - python >=3.7
3179
  license: MIT
3180
  license_family: MIT
3181
+ purls:
3182
+ - pkg:pypi/pytz
3183
  size: 188538
3184
  timestamp: 1706886944988
3185
  - kind: conda
 
3231
  - rpds-py >=0.7.0
3232
  license: MIT
3233
  license_family: MIT
3234
+ purls:
3235
+ - pkg:pypi/referencing
3236
  size: 39055
3237
  timestamp: 1706711589688
3238
  - kind: conda
 
3254
  - chardet >=3.0.2,<6
3255
  license: Apache-2.0
3256
  license_family: APACHE
3257
+ purls:
3258
+ - pkg:pypi/requests
3259
  size: 56690
3260
  timestamp: 1684774408600
3261
  - kind: conda
 
3290
  - python_abi 3.11.* *_cp311
3291
  license: MIT
3292
  license_family: MIT
3293
+ purls:
3294
+ - pkg:pypi/rpds-py
3295
  size: 915849
3296
  timestamp: 1707923007711
3297
  - kind: conda
 
3309
  - python_abi 3.11.* *_cp311
3310
  license: MIT
3311
  license_family: MIT
3312
+ purls:
3313
+ - pkg:pypi/ruff
3314
  size: 5738078
3315
  timestamp: 1709229162825
3316
  - kind: conda
 
3326
  - python >=2.7
3327
  license: BSD-2-Clause
3328
  license_family: BSD
3329
+ purls:
3330
+ - pkg:pypi/semantic-version
3331
  size: 17923
3332
  timestamp: 1653579450384
3333
  - kind: conda
 
3343
  - python >=3.7
3344
  license: MIT
3345
  license_family: MIT
3346
+ purls:
3347
+ - pkg:pypi/shellingham
3348
  size: 14568
3349
  timestamp: 1698144516278
3350
  - kind: conda
 
3360
  - python
3361
  license: MIT
3362
  license_family: MIT
3363
+ purls:
3364
+ - pkg:pypi/six
3365
  size: 14259
3366
  timestamp: 1620240338595
3367
  - kind: conda
 
3392
  - python >=3.7
3393
  license: Apache-2.0
3394
  license_family: Apache
3395
+ purls:
3396
+ - pkg:pypi/sniffio
3397
  size: 15064
3398
  timestamp: 1708953086199
3399
+ - kind: conda
3400
+ name: soupsieve
3401
+ version: '2.5'
3402
+ build: pyhd8ed1ab_1
3403
+ build_number: 1
3404
+ subdir: noarch
3405
+ noarch: python
3406
+ url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda
3407
+ sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c
3408
+ md5: 3f144b2c34f8cb5a9abd9ed23a39c561
3409
+ depends:
3410
+ - python >=3.8
3411
+ license: MIT
3412
+ license_family: MIT
3413
+ purls:
3414
+ - pkg:pypi/soupsieve
3415
+ size: 36754
3416
+ timestamp: 1693929424267
3417
  - kind: conda
3418
  name: starlette
3419
  version: 0.27.0
 
3446
  license_family: BSD
3447
  size: 2644060
3448
  timestamp: 1702359203835
3449
+ - kind: conda
3450
+ name: sympy
3451
+ version: '1.12'
3452
+ build: pypyh9d50eac_103
3453
+ build_number: 103
3454
+ subdir: noarch
3455
+ noarch: python
3456
+ url: https://conda.anaconda.org/conda-forge/noarch/sympy-1.12-pypyh9d50eac_103.conda
3457
+ sha256: 0025dd4e6411423903bf478d1b9fbff0cbbbe546f51c9375dfd6729ef2e1a1ac
3458
+ md5: 2f7d6347d7acf6edf1ac7f2189f44c8f
3459
+ depends:
3460
+ - __unix
3461
+ - gmpy2 >=2.0.8
3462
+ - mpmath >=0.19
3463
+ - python * *_cpython
3464
+ - python >=3.8
3465
+ license: BSD-3-Clause
3466
+ license_family: BSD
3467
+ purls:
3468
+ - pkg:pypi/sympy
3469
+ size: 4256289
3470
+ timestamp: 1684180689319
3471
  - kind: conda
3472
  name: tbb
3473
  version: 2021.11.0
 
3514
  - python >=3.7
3515
  license: MIT
3516
  license_family: MIT
3517
+ purls:
3518
+ - pkg:pypi/tomlkit
3519
  size: 37086
3520
  timestamp: 1690458478787
3521
  - kind: conda
 
3533
  license_family: BSD
3534
  size: 52358
3535
  timestamp: 1706112720607
3536
+ - kind: pypi
3537
+ name: torch
3538
+ version: 2.2.1
3539
+ url: https://files.pythonhosted.org/packages/2c/df/5810707da6f2fd4be57f0cc417987c0fa16a2eecf0b1b71f82ea555dc619/torch-2.2.1-cp311-cp311-manylinux1_x86_64.whl#sha256=d86664ec85902967d902e78272e97d1aff1d331f7619d398d3ffab1c9b8e9157
3540
+ sha256: d86664ec85902967d902e78272e97d1aff1d331f7619d398d3ffab1c9b8e9157
3541
+ requires_dist:
3542
+ - filelock
3543
+ - typing-extensions >=4.8.0
3544
+ - sympy
3545
+ - networkx
3546
+ - jinja2
3547
+ - fsspec
3548
+ - nvidia-cuda-nvrtc-cu12 ==12.1.105 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3549
+ - nvidia-cuda-runtime-cu12 ==12.1.105 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3550
+ - nvidia-cuda-cupti-cu12 ==12.1.105 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3551
+ - nvidia-cudnn-cu12 ==8.9.2.26 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3552
+ - nvidia-cublas-cu12 ==12.1.3.1 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3553
+ - nvidia-cufft-cu12 ==11.0.2.54 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3554
+ - nvidia-curand-cu12 ==10.3.2.106 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3555
+ - nvidia-cusolver-cu12 ==11.4.5.107 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3556
+ - nvidia-cusparse-cu12 ==12.1.0.106 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3557
+ - nvidia-nccl-cu12 ==2.19.3 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3558
+ - nvidia-nvtx-cu12 ==12.1.105 ; platform_system == 'Linux' and platform_machine == 'x86_64'
3559
+ - triton ==2.2.0 ; platform_system == 'Linux' and platform_machine == 'x86_64' and python_version < '3.12'
3560
+ - opt-einsum >=3.3 ; extra == 'opt-einsum'
3561
+ - optree >=0.9.1 ; extra == 'optree'
3562
+ requires_python: '>=3.8.0'
3563
+ - kind: pypi
3564
+ name: torchvision
3565
+ version: 0.17.1
3566
+ url: https://files.pythonhosted.org/packages/3a/49/12fc5188602c68a789a0fdaee63d176a71ad5c1e34d25aeb8554abe46089/torchvision-0.17.1-cp311-cp311-manylinux1_x86_64.whl#sha256=5966936c669a08870f6547cd0a90d08b157aeda03293f79e2adbb934687175ed
3567
+ sha256: 5966936c669a08870f6547cd0a90d08b157aeda03293f79e2adbb934687175ed
3568
+ requires_dist:
3569
+ - numpy
3570
+ - torch ==2.2.1
3571
+ - pillow !=8.3.*, >=5.3.0
3572
+ - scipy ; extra == 'scipy'
3573
+ requires_python: '>=3.8'
3574
+ - kind: conda
3575
+ name: torchvision
3576
+ version: 0.17.1
3577
+ build: py311_cpu
3578
+ subdir: linux-64
3579
+ url: https://conda.anaconda.org/pytorch/linux-64/torchvision-0.17.1-py311_cpu.tar.bz2
3580
+ sha256: 4ec2bd12953402d2304d3ae5f752d3597a3d3336ad523dff4f6c4107e27a80ab
3581
+ md5: c30958c550b69bba88314247da8a6a5d
3582
+ depends:
3583
+ - ffmpeg >=4.2
3584
+ - libjpeg-turbo
3585
+ - libpng
3586
+ - numpy >=1.23.5
3587
+ - pillow >=5.3.0,!=8.3.*
3588
+ - python >=3.11,<3.12.0a0
3589
+ - pytorch 2.2.1
3590
+ - pytorch-mutex 1.0 cpu
3591
+ - requests
3592
+ constrains:
3593
+ - cpuonly
3594
+ license: BSD
3595
+ size: 7351821
3596
+ timestamp: 1708371226538
3597
  - kind: conda
3598
  name: tqdm
3599
  version: 4.66.2
 
3607
  - colorama
3608
  - python >=3.7
3609
  license: MPL-2.0 or MIT
3610
+ purls:
3611
+ - pkg:pypi/tqdm
3612
  size: 89567
3613
  timestamp: 1707598746354
3614
+ - kind: pypi
3615
+ name: triton
3616
+ version: 2.2.0
3617
+ url: https://files.pythonhosted.org/packages/bd/ac/3974caaa459bf2c3a244a84be8d17561f631f7d42af370fc311defeca2fb/triton-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=da58a152bddb62cafa9a857dd2bc1f886dbf9f9c90a2b5da82157cd2b34392b0
3618
+ sha256: da58a152bddb62cafa9a857dd2bc1f886dbf9f9c90a2b5da82157cd2b34392b0
3619
+ requires_dist:
3620
+ - filelock
3621
+ - cmake >=3.20 ; extra == 'build'
3622
+ - lit ; extra == 'build'
3623
+ - autopep8 ; extra == 'tests'
3624
+ - flake8 ; extra == 'tests'
3625
+ - isort ; extra == 'tests'
3626
+ - numpy ; extra == 'tests'
3627
+ - pytest ; extra == 'tests'
3628
+ - scipy >=1.7.1 ; extra == 'tests'
3629
+ - torch ; extra == 'tests'
3630
+ - matplotlib ; extra == 'tutorials'
3631
+ - pandas ; extra == 'tutorials'
3632
+ - tabulate ; extra == 'tutorials'
3633
+ - torch ; extra == 'tutorials'
3634
  - kind: conda
3635
  name: typer
3636
  version: 0.9.0
 
3649
  - typing-extensions >=3.7.4.3
3650
  license: MIT
3651
  license_family: MIT
3652
+ purls:
3653
+ - pkg:pypi/typer
3654
  size: 79064
3655
  timestamp: 1683029411797
3656
  - kind: conda
 
3681
  - python >=3.8
3682
  license: PSF-2.0
3683
  license_family: PSF
3684
+ purls:
3685
+ - pkg:pypi/typing-extensions
3686
  size: 37018
3687
  timestamp: 1708904796013
3688
  - kind: conda
 
3712
  - python >=3.7
3713
  license: MIT
3714
  license_family: MIT
3715
+ purls:
3716
+ - pkg:pypi/urllib3
3717
  size: 94669
3718
  timestamp: 1708239595549
3719
  - kind: conda
 
3748
  - python_abi 3.11.* *_cp311
3749
  license: BSD-3-Clause
3750
  license_family: BSD
3751
+ purls:
3752
+ - pkg:pypi/websockets
3753
  size: 200745
3754
  timestamp: 1695410107238
3755
  - kind: conda
 
4026
  - python >=3.8
4027
  license: MIT
4028
  license_family: MIT
4029
+ purls:
4030
+ - pkg:pypi/zipp
4031
  size: 18954
4032
  timestamp: 1695255262261
4033
  - kind: conda
pixi.toml CHANGED
@@ -3,12 +3,22 @@ name = "DSINE-space"
3
  version = "0.1.0"
4
  description = "Add a short description here"
5
  authors = ["pablovela5620 <pablovela5620@gmail.com>"]
6
- channels = ["conda-forge"]
7
  platforms = ["linux-64"]
8
 
9
  [tasks]
10
- start="python main.py"
 
11
 
12
  [dependencies]
13
  python = "3.11.*"
 
 
14
  gradio = ">=4.19.2,<4.20"
 
 
 
 
 
 
 
 
3
  version = "0.1.0"
4
  description = "Add a short description here"
5
  authors = ["pablovela5620 <pablovela5620@gmail.com>"]
6
+ channels = ["conda-forge", "pytorch"]
7
  platforms = ["linux-64"]
8
 
9
  [tasks]
10
+ download-ckpt = "gdown 1B60LahYi3IuHu0nP2EySEWH29guWavZI --output checkpoints/"
11
+ start={cmd="python main.py", depends_on=["download-ckpt"]}
12
 
13
  [dependencies]
14
  python = "3.11.*"
15
+ pytorch = {version = ">=2.2.0,<2.3", channel="pytorch"}
16
+ torchvision = {version = ">=0.17.0,<0.18", channel="pytorch"}
17
  gradio = ">=4.19.2,<4.20"
18
+ gdown = ">=5.1.0,<5.2"
19
+
20
+ [pypi-dependencies]
21
+ gradio-modal = "*"
22
+ gradio-imageslider = "*"
23
+ geffnet = "*"
24
+ glob2 = "*"
test.py ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ import glob
4
+ import argparse
5
+ import numpy as np
6
+
7
+ import torch
8
+ import torch.nn.functional as F
9
+ from torchvision import transforms
10
+ from PIL import Image
11
+ import utils.utils as utils
12
+
13
+
14
+ def test_samples(args, model, intrins=None, device="cpu"):
15
+ img_paths = glob.glob("./samples/img/*.png") + glob.glob("./samples/img/*.jpg")
16
+ img_paths.sort()
17
+
18
+ # normalize
19
+ normalize = transforms.Normalize(
20
+ mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
21
+ )
22
+
23
+ with torch.no_grad():
24
+ for img_path in img_paths:
25
+ print(img_path)
26
+ ext = os.path.splitext(img_path)[1]
27
+ img = Image.open(img_path).convert("RGB")
28
+ img = np.array(img).astype(np.float32) / 255.0
29
+ img = torch.from_numpy(img).permute(2, 0, 1).unsqueeze(0).to(device)
30
+ _, _, orig_H, orig_W = img.shape
31
+
32
+ # zero-pad the input image so that both the width and height are multiples of 32
33
+ l, r, t, b = utils.pad_input(orig_H, orig_W)
34
+ img = F.pad(img, (l, r, t, b), mode="constant", value=0.0)
35
+ img = normalize(img)
36
+
37
+ intrins_path = img_path.replace(ext, ".txt")
38
+ if os.path.exists(intrins_path):
39
+ # NOTE: camera intrinsics should be given as a txt file
40
+ # it should contain the values of fx, fy, cx, cy
41
+ intrins = utils.get_intrins_from_txt(
42
+ intrins_path, device=device
43
+ ).unsqueeze(0)
44
+ else:
45
+ # NOTE: if intrins is not given, we just assume that the principal point is at the center
46
+ # and that the field-of-view is 60 degrees (feel free to modify this assumption)
47
+ intrins = utils.get_intrins_from_fov(
48
+ new_fov=60.0, H=orig_H, W=orig_W, device=device
49
+ ).unsqueeze(0)
50
+
51
+ intrins[:, 0, 2] += l
52
+ intrins[:, 1, 2] += t
53
+
54
+ pred_norm = model(img, intrins=intrins)[-1]
55
+ pred_norm = pred_norm[:, :, t : t + orig_H, l : l + orig_W]
56
+
57
+ # save to output folder
58
+ # NOTE: by saving the prediction as uint8 png format, you lose a lot of precision
59
+ # if you want to use the predicted normals for downstream tasks, we recommend saving them as float32 NPY files
60
+ pred_norm_np = (
61
+ pred_norm.cpu().detach().numpy()[0, :, :, :].transpose(1, 2, 0)
62
+ ) # (H, W, 3)
63
+ pred_norm_np = ((pred_norm_np + 1.0) / 2.0 * 255.0).astype(np.uint8)
64
+ target_path = img_path.replace("/img/", "/output/").replace(ext, ".png")
65
+ im = Image.fromarray(pred_norm_np)
66
+ im.save(target_path)
67
+
68
+
69
+ if __name__ == "__main__":
70
+ parser = argparse.ArgumentParser()
71
+ parser.add_argument("--ckpt", default="dsine", type=str, help="model checkpoint")
72
+ parser.add_argument("--mode", default="samples", type=str, help="{samples}")
73
+ args = parser.parse_args()
74
+
75
+ # define model
76
+ device = torch.device("cpu")
77
+
78
+ from models.dsine import DSINE
79
+
80
+ model = DSINE().to(device)
81
+ model.pixel_coords = model.pixel_coords.to(device)
82
+ model = utils.load_checkpoint("./checkpoints/%s.pt" % args.ckpt, model)
83
+ model.eval()
84
+
85
+ if args.mode == "samples":
86
+ test_samples(args, model, intrins=None, device=device)
utils/rotation.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import numpy as np
3
+
4
+
5
+ # NOTE: from PyTorch3D
6
+ def axis_angle_to_quaternion(axis_angle: torch.Tensor) -> torch.Tensor:
7
+ """
8
+ Convert rotations given as axis/angle to quaternions.
9
+
10
+ Args:
11
+ axis_angle: Rotations given as a vector in axis angle form,
12
+ as a tensor of shape (..., 3), where the magnitude is
13
+ the angle turned anticlockwise in radians around the
14
+ vector's direction.
15
+
16
+ Returns:
17
+ quaternions with real part first, as tensor of shape (..., 4).
18
+ """
19
+ angles = torch.norm(axis_angle, p=2, dim=-1, keepdim=True)
20
+ half_angles = angles * 0.5
21
+ eps = 1e-6
22
+ small_angles = angles.abs() < eps
23
+ sin_half_angles_over_angles = torch.empty_like(angles)
24
+ sin_half_angles_over_angles[~small_angles] = (
25
+ torch.sin(half_angles[~small_angles]) / angles[~small_angles]
26
+ )
27
+ # for x small, sin(x/2) is about x/2 - (x/2)^3/6
28
+ # so sin(x/2)/x is about 1/2 - (x*x)/48
29
+ sin_half_angles_over_angles[small_angles] = (
30
+ 0.5 - (angles[small_angles] * angles[small_angles]) / 48
31
+ )
32
+ quaternions = torch.cat(
33
+ [torch.cos(half_angles), axis_angle * sin_half_angles_over_angles], dim=-1
34
+ )
35
+ return quaternions
36
+
37
+
38
+ # NOTE: from PyTorch3D
39
+ def quaternion_to_matrix(quaternions: torch.Tensor) -> torch.Tensor:
40
+ """
41
+ Convert rotations given as quaternions to rotation matrices.
42
+
43
+ Args:
44
+ quaternions: quaternions with real part first,
45
+ as tensor of shape (..., 4).
46
+
47
+ Returns:
48
+ Rotation matrices as tensor of shape (..., 3, 3).
49
+ """
50
+ r, i, j, k = torch.unbind(quaternions, -1)
51
+ # pyre-fixme[58]: `/` is not supported for operand types `float` and `Tensor`.
52
+ two_s = 2.0 / (quaternions * quaternions).sum(-1)
53
+
54
+ o = torch.stack(
55
+ (
56
+ 1 - two_s * (j * j + k * k),
57
+ two_s * (i * j - k * r),
58
+ two_s * (i * k + j * r),
59
+ two_s * (i * j + k * r),
60
+ 1 - two_s * (i * i + k * k),
61
+ two_s * (j * k - i * r),
62
+ two_s * (i * k - j * r),
63
+ two_s * (j * k + i * r),
64
+ 1 - two_s * (i * i + j * j),
65
+ ),
66
+ -1,
67
+ )
68
+ return o.reshape(quaternions.shape[:-1] + (3, 3))
69
+
70
+
71
+ # NOTE: from PyTorch3D
72
+ def axis_angle_to_matrix(axis_angle: torch.Tensor) -> torch.Tensor:
73
+ """
74
+ Convert rotations given as axis/angle to rotation matrices.
75
+
76
+ Args:
77
+ axis_angle: Rotations given as a vector in axis angle form,
78
+ as a tensor of shape (..., 3), where the magnitude is
79
+ the angle turned anticlockwise in radians around the
80
+ vector's direction.
81
+
82
+ Returns:
83
+ Rotation matrices as tensor of shape (..., 3, 3).
84
+ """
85
+ return quaternion_to_matrix(axis_angle_to_quaternion(axis_angle))
utils/utils.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """ utils
2
+ """
3
+ import os
4
+ import torch
5
+ import numpy as np
6
+
7
+
8
+ def load_checkpoint(fpath, model):
9
+ print('loading checkpoint... {}'.format(fpath))
10
+
11
+ ckpt = torch.load(fpath, map_location='cpu')['model']
12
+
13
+ load_dict = {}
14
+ for k, v in ckpt.items():
15
+ if k.startswith('module.'):
16
+ k_ = k.replace('module.', '')
17
+ load_dict[k_] = v
18
+ else:
19
+ load_dict[k] = v
20
+
21
+ model.load_state_dict(load_dict)
22
+ print('loading checkpoint... / done')
23
+ return model
24
+
25
+
26
+ def compute_normal_error(pred_norm, gt_norm):
27
+ pred_error = torch.cosine_similarity(pred_norm, gt_norm, dim=1)
28
+ pred_error = torch.clamp(pred_error, min=-1.0, max=1.0)
29
+ pred_error = torch.acos(pred_error) * 180.0 / np.pi
30
+ pred_error = pred_error.unsqueeze(1) # (B, 1, H, W)
31
+ return pred_error
32
+
33
+
34
+ def compute_normal_metrics(total_normal_errors):
35
+ total_normal_errors = total_normal_errors.detach().cpu().numpy()
36
+ num_pixels = total_normal_errors.shape[0]
37
+
38
+ metrics = {
39
+ 'mean': np.average(total_normal_errors),
40
+ 'median': np.median(total_normal_errors),
41
+ 'rmse': np.sqrt(np.sum(total_normal_errors * total_normal_errors) / num_pixels),
42
+ 'a1': 100.0 * (np.sum(total_normal_errors < 5) / num_pixels),
43
+ 'a2': 100.0 * (np.sum(total_normal_errors < 7.5) / num_pixels),
44
+ 'a3': 100.0 * (np.sum(total_normal_errors < 11.25) / num_pixels),
45
+ 'a4': 100.0 * (np.sum(total_normal_errors < 22.5) / num_pixels),
46
+ 'a5': 100.0 * (np.sum(total_normal_errors < 30) / num_pixels)
47
+ }
48
+
49
+ return metrics
50
+
51
+
52
+ def pad_input(orig_H, orig_W):
53
+ if orig_W % 32 == 0:
54
+ l = 0
55
+ r = 0
56
+ else:
57
+ new_W = 32 * ((orig_W // 32) + 1)
58
+ l = (new_W - orig_W) // 2
59
+ r = (new_W - orig_W) - l
60
+
61
+ if orig_H % 32 == 0:
62
+ t = 0
63
+ b = 0
64
+ else:
65
+ new_H = 32 * ((orig_H // 32) + 1)
66
+ t = (new_H - orig_H) // 2
67
+ b = (new_H - orig_H) - t
68
+ return l, r, t, b
69
+
70
+
71
+ def get_intrins_from_fov(new_fov, H, W, device):
72
+ # NOTE: top-left pixel should be (0,0)
73
+ if W >= H:
74
+ new_fu = (W / 2.0) / np.tan(np.deg2rad(new_fov / 2.0))
75
+ new_fv = (W / 2.0) / np.tan(np.deg2rad(new_fov / 2.0))
76
+ else:
77
+ new_fu = (H / 2.0) / np.tan(np.deg2rad(new_fov / 2.0))
78
+ new_fv = (H / 2.0) / np.tan(np.deg2rad(new_fov / 2.0))
79
+
80
+ new_cu = (W / 2.0) - 0.5
81
+ new_cv = (H / 2.0) - 0.5
82
+
83
+ new_intrins = torch.tensor([
84
+ [new_fu, 0, new_cu ],
85
+ [0, new_fv, new_cv ],
86
+ [0, 0, 1 ]
87
+ ], dtype=torch.float32, device=device)
88
+
89
+ return new_intrins
90
+
91
+
92
+ def get_intrins_from_txt(intrins_path, device):
93
+ # NOTE: top-left pixel should be (0,0)
94
+ with open(intrins_path, 'r') as f:
95
+ intrins_ = f.readlines()[0].split()[0].split(',')
96
+ intrins_ = [float(i) for i in intrins_]
97
+ fx, fy, cx, cy = intrins_
98
+
99
+ intrins = torch.tensor([
100
+ [fx, 0,cx],
101
+ [ 0,fy,cy],
102
+ [ 0, 0, 1]
103
+ ], dtype=torch.float32, device=device)
104
+
105
+ return intrins