nystrom-ncut 0.0.7__py3-none-any.whl → 0.0.8__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- nystrom_ncut/ncut_pytorch.py +1 -1
- nystrom_ncut/propagation_utils.py +10 -28
- nystrom_ncut/visualize_utils.py +2 -7
- {nystrom_ncut-0.0.7.dist-info → nystrom_ncut-0.0.8.dist-info}/METADATA +1 -1
- nystrom_ncut-0.0.8.dist-info/RECORD +11 -0
- nystrom_ncut-0.0.7.dist-info/RECORD +0 -11
- {nystrom_ncut-0.0.7.dist-info → nystrom_ncut-0.0.8.dist-info}/LICENSE +0 -0
- {nystrom_ncut-0.0.7.dist-info → nystrom_ncut-0.0.8.dist-info}/WHEEL +0 -0
- {nystrom_ncut-0.0.7.dist-info → nystrom_ncut-0.0.8.dist-info}/top_level.txt +0 -0
nystrom_ncut/ncut_pytorch.py
CHANGED
@@ -98,7 +98,11 @@ def distance_from_features(
|
|
98
98
|
D = torch.cdist(features, features_B, p=2)
|
99
99
|
elif distance == "rbf":
|
100
100
|
D = torch.cdist(features, features_B, p=2) ** 2
|
101
|
-
|
101
|
+
|
102
|
+
# Outlier-robust scale invariance using quantiles to estimate standard deviation
|
103
|
+
stds = torch.quantile(features, q=torch.tensor((0.158655, 0.841345), device=features.device), dim=0)
|
104
|
+
stds = (stds[1] - stds[0]) / 2
|
105
|
+
D = D / (2 * torch.linalg.norm(stds) ** 2)
|
102
106
|
else:
|
103
107
|
raise ValueError("distance should be 'cosine' or 'euclidean', 'rbf'")
|
104
108
|
return D
|
@@ -178,39 +182,17 @@ def extrapolate_knn(
|
|
178
182
|
V_list = []
|
179
183
|
for _v in torch.chunk(extrapolation_features, n_chunks, dim=0):
|
180
184
|
_v = _v.to(device) # [_m x d]
|
185
|
+
|
181
186
|
_A = affinity_from_features(anchor_features, _v, affinity_focal_gamma, distance).mT # [_m x n]
|
182
187
|
if knn is not None:
|
183
188
|
_A, indices = _A.topk(k=knn, dim=-1, largest=True) # [_m x k], [_m x k]
|
184
189
|
_anchor_output = anchor_output[indices] # [_m x k x d]
|
185
190
|
else:
|
186
191
|
_anchor_output = anchor_output[None] # [1 x n x d]
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
# elif distance == 'euclidean':
|
192
|
-
# _A = - torch.cdist(_v, subgraph_features, p=2)
|
193
|
-
# elif distance == 'rbf':
|
194
|
-
# _A = - torch.cdist(_v, subgraph_features, p=2) ** 2
|
195
|
-
# else:
|
196
|
-
# raise ValueError("distance should be 'cosine' or 'euclidean', 'rbf'")
|
197
|
-
#
|
198
|
-
# # keep topk KNN for each row
|
199
|
-
# topk_sim, topk_idx = _A.topk(knn, dim=-1, largest=True)
|
200
|
-
# row_id = torch.arange(topk_idx.shape[0], device=_A.device)[:, None].expand(
|
201
|
-
# -1, topk_idx.shape[1]
|
202
|
-
# )
|
203
|
-
# _A = torch.sparse_coo_tensor(
|
204
|
-
# torch.stack([row_id, topk_idx], dim=-1).reshape(-1, 2).T,
|
205
|
-
# topk_sim.reshape(-1),
|
206
|
-
# size=(_A.shape[0], _A.shape[1]),
|
207
|
-
# device=_A.device,
|
208
|
-
# )
|
209
|
-
# _A = _A.to_dense().to(dtype=subgraph_output.dtype)
|
210
|
-
# _D = _A.sum(-1)
|
211
|
-
# _A /= _D[:, None]
|
212
|
-
|
213
|
-
_V = (_A[:, None, :] @ _anchor_output).squeeze(1)
|
192
|
+
|
193
|
+
_A = Fn.normalize(_A, p=1, dim=-1) # [_m x k]
|
194
|
+
_V = (_A[:, None, :] @ _anchor_output).squeeze(1) # [_m x d]
|
195
|
+
|
214
196
|
if move_output_to_cpu:
|
215
197
|
_V = _V.cpu()
|
216
198
|
V_list.append(_V)
|
nystrom_ncut/visualize_utils.py
CHANGED
@@ -38,14 +38,9 @@ def _rgb_with_dimensionality_reduction(
|
|
38
38
|
) -> Tuple[torch.Tensor, torch.Tensor]:
|
39
39
|
|
40
40
|
if pre_smooth:
|
41
|
-
_subgraph_indices = run_subgraph_sampling(
|
42
|
-
features,
|
43
|
-
num_sample,
|
44
|
-
sample_method="farthest",
|
45
|
-
)
|
46
41
|
features = extrapolate_knn(
|
47
|
-
features
|
48
|
-
features
|
42
|
+
features,
|
43
|
+
features,
|
49
44
|
features,
|
50
45
|
distance="cosine",
|
51
46
|
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: nystrom_ncut
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.8
|
4
4
|
Summary: Normalized Cut and Nyström Approximation
|
5
5
|
Author-email: Huzheng Yang <huze.yann@gmail.com>, Wentinn Liao <wentinn.liao@gmail.com>
|
6
6
|
Project-URL: Documentation, https://github.com/JophiArcana/Nystrom-NCUT/
|
@@ -0,0 +1,11 @@
|
|
1
|
+
nystrom_ncut/__init__.py,sha256=Vlc_iAlfvTNUiJXpZLWUOaL2Q-YqZqgr7WoG6cVnD0g,439
|
2
|
+
nystrom_ncut/common.py,sha256=G6w_8_BfBUMc6r8WFgA0NH4K6am7AzZCSdrQEVjra7U,671
|
3
|
+
nystrom_ncut/ncut_pytorch.py,sha256=-SKs9AdkafJSGkeYt4LwhbKZr8oq9JA5caAqjiVDAzU,11220
|
4
|
+
nystrom_ncut/nystrom.py,sha256=-l26oiJ0oPReSGlMlYV3gftszgFdAAHAi7OFtGPZ4Ic,8802
|
5
|
+
nystrom_ncut/propagation_utils.py,sha256=0d2VhT0JrLRurd44hZbnxBvBh-QscPKxtV7VrwYtTdo,11569
|
6
|
+
nystrom_ncut/visualize_utils.py,sha256=jDjuyZ9rdd25jqrPObJgK8zCLHc3Oms0fQnaIetHk-U,17112
|
7
|
+
nystrom_ncut-0.0.8.dist-info/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
|
8
|
+
nystrom_ncut-0.0.8.dist-info/METADATA,sha256=zQpx3REOOckpJSuc7N6UNpXZoqgsM5UoFWV6__DuaRQ,6058
|
9
|
+
nystrom_ncut-0.0.8.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
10
|
+
nystrom_ncut-0.0.8.dist-info/top_level.txt,sha256=j7g_j0S048EvguFFnGgD5Ewd3r2H6klsxd5A4dd-wHw,13
|
11
|
+
nystrom_ncut-0.0.8.dist-info/RECORD,,
|
@@ -1,11 +0,0 @@
|
|
1
|
-
nystrom_ncut/__init__.py,sha256=Vlc_iAlfvTNUiJXpZLWUOaL2Q-YqZqgr7WoG6cVnD0g,439
|
2
|
-
nystrom_ncut/common.py,sha256=G6w_8_BfBUMc6r8WFgA0NH4K6am7AzZCSdrQEVjra7U,671
|
3
|
-
nystrom_ncut/ncut_pytorch.py,sha256=S_nrD3ecK9PX91ZRWu3AVHsXN3V5lse7oRs4P0rDT0Y,11229
|
4
|
-
nystrom_ncut/nystrom.py,sha256=-l26oiJ0oPReSGlMlYV3gftszgFdAAHAi7OFtGPZ4Ic,8802
|
5
|
-
nystrom_ncut/propagation_utils.py,sha256=t8pHp4VjqEeCNWl5jIu79WhQzINj982n-z2UAcxnEUY,12181
|
6
|
-
nystrom_ncut/visualize_utils.py,sha256=17z3kTUHWb9ZKF_UfNIMGESI7YrjxaHYIq-0xJ02bng,17295
|
7
|
-
nystrom_ncut-0.0.7.dist-info/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
|
8
|
-
nystrom_ncut-0.0.7.dist-info/METADATA,sha256=q7lIa-_S1iEbNoV2ml_0TbOuCGOSAuq-0ryJc1HAf0k,6058
|
9
|
-
nystrom_ncut-0.0.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
10
|
-
nystrom_ncut-0.0.7.dist-info/top_level.txt,sha256=j7g_j0S048EvguFFnGgD5Ewd3r2H6klsxd5A4dd-wHw,13
|
11
|
-
nystrom_ncut-0.0.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|