Jie Hu
commited on
Commit
·
6522999
1
Parent(s):
d17054d
init project
Browse files
app.py
CHANGED
@@ -44,7 +44,7 @@ device = 'cuda' if torch.cuda.is_available() else 'cpu'
|
|
44 |
# pe3r = Models(device)
|
45 |
MAST3R_CKP = 'naver/MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric'
|
46 |
mast3r = AsymmetricMASt3R.from_pretrained(MAST3R_CKP).to(device)
|
47 |
-
|
48 |
|
49 |
|
50 |
def _convert_scene_output_to_glb(outdir, imgs, pts3d, mask, focals, cams2world, cam_size=0.05,
|
@@ -114,138 +114,138 @@ def get_3D_model_from_scene(outdir, scene, min_conf_thr=3, as_pointcloud=False,
|
|
114 |
return _convert_scene_output_to_glb(outdir, rgbimg, pts3d, msk, focals, cams2world, as_pointcloud=as_pointcloud,
|
115 |
transparent_cams=transparent_cams, cam_size=cam_size)
|
116 |
|
117 |
-
def mask_nms(masks, threshold=0.8):
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
def filter(masks, keep):
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
def mask_to_box(mask):
|
140 |
-
|
141 |
-
|
142 |
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
|
153 |
-
|
154 |
-
|
155 |
-
def box_xyxy_to_xywh(box_xyxy):
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
def get_seg_img(mask, box, image):
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
def pad_img(img):
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
def batch_iterator(batch_size: int, *args) -> Generator[List[Any], None, None]:
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
def slerp(u1, u2, t):
|
194 |
-
|
195 |
-
|
196 |
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
|
208 |
-
|
209 |
-
|
210 |
|
211 |
-
|
212 |
-
|
213 |
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
|
220 |
-
|
221 |
-
|
222 |
|
223 |
-
|
224 |
-
|
225 |
|
226 |
-
def slerp_multiple(vectors, t_values):
|
227 |
-
|
228 |
-
|
229 |
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
|
239 |
-
|
240 |
-
|
241 |
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
|
248 |
-
|
249 |
|
250 |
# @torch.no_grad
|
251 |
# def get_mask_from_img_sam1(mobilesamv2, yolov8, sam1_image, yolov8_image, original_size, input_size, transform):
|
@@ -438,7 +438,7 @@ def slerp_multiple(vectors, t_values):
|
|
438 |
|
439 |
# return cog_seg_maps, rev_cog_seg_maps, multi_view_clip_feats
|
440 |
|
441 |
-
@spaces.GPU(duration=
|
442 |
def get_reconstructed_scene(outdir, filelist, schedule, niter, min_conf_thr,
|
443 |
as_pointcloud, mask_sky, clean_depth, transparent_cams, cam_size,
|
444 |
scenegraph_type, winsize, refid):
|
|
|
44 |
# pe3r = Models(device)
|
45 |
MAST3R_CKP = 'naver/MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric'
|
46 |
mast3r = AsymmetricMASt3R.from_pretrained(MAST3R_CKP).to(device)
|
47 |
+
print(device)
|
48 |
|
49 |
|
50 |
def _convert_scene_output_to_glb(outdir, imgs, pts3d, mask, focals, cams2world, cam_size=0.05,
|
|
|
114 |
return _convert_scene_output_to_glb(outdir, rgbimg, pts3d, msk, focals, cams2world, as_pointcloud=as_pointcloud,
|
115 |
transparent_cams=transparent_cams, cam_size=cam_size)
|
116 |
|
117 |
+
# def mask_nms(masks, threshold=0.8):
|
118 |
+
# keep = []
|
119 |
+
# mask_num = len(masks)
|
120 |
+
# suppressed = np.zeros((mask_num), dtype=np.int64)
|
121 |
+
# for i in range(mask_num):
|
122 |
+
# if suppressed[i] == 1:
|
123 |
+
# continue
|
124 |
+
# keep.append(i)
|
125 |
+
# for j in range(i + 1, mask_num):
|
126 |
+
# if suppressed[j] == 1:
|
127 |
+
# continue
|
128 |
+
# intersection = (masks[i] & masks[j]).sum()
|
129 |
+
# if min(intersection / masks[i].sum(), intersection / masks[j].sum()) > threshold:
|
130 |
+
# suppressed[j] = 1
|
131 |
+
# return keep
|
132 |
+
|
133 |
+
# def filter(masks, keep):
|
134 |
+
# ret = []
|
135 |
+
# for i, m in enumerate(masks):
|
136 |
+
# if i in keep: ret.append(m)
|
137 |
+
# return ret
|
138 |
+
|
139 |
+
# def mask_to_box(mask):
|
140 |
+
# if mask.sum() == 0:
|
141 |
+
# return np.array([0, 0, 0, 0])
|
142 |
|
143 |
+
# # Get the rows and columns where the mask is 1
|
144 |
+
# rows = np.any(mask, axis=1)
|
145 |
+
# cols = np.any(mask, axis=0)
|
146 |
|
147 |
+
# # Get top, bottom, left, right edges
|
148 |
+
# top = np.argmax(rows)
|
149 |
+
# bottom = len(rows) - 1 - np.argmax(np.flip(rows))
|
150 |
+
# left = np.argmax(cols)
|
151 |
+
# right = len(cols) - 1 - np.argmax(np.flip(cols))
|
152 |
|
153 |
+
# return np.array([left, top, right, bottom])
|
154 |
+
|
155 |
+
# def box_xyxy_to_xywh(box_xyxy):
|
156 |
+
# box_xywh = deepcopy(box_xyxy)
|
157 |
+
# box_xywh[2] = box_xywh[2] - box_xywh[0]
|
158 |
+
# box_xywh[3] = box_xywh[3] - box_xywh[1]
|
159 |
+
# return box_xywh
|
160 |
+
|
161 |
+
# def get_seg_img(mask, box, image):
|
162 |
+
# image = image.copy()
|
163 |
+
# x, y, w, h = box
|
164 |
+
# # image[mask == 0] = np.array([0, 0, 0], dtype=np.uint8)
|
165 |
+
# box_area = w * h
|
166 |
+
# mask_area = mask.sum()
|
167 |
+
# if 1 - (mask_area / box_area) < 0.2:
|
168 |
+
# image[mask == 0] = np.array([0, 0, 0], dtype=np.uint8)
|
169 |
+
# else:
|
170 |
+
# random_values = np.random.randint(0, 255, size=image.shape, dtype=np.uint8)
|
171 |
+
# image[mask == 0] = random_values[mask == 0]
|
172 |
+
# seg_img = image[y:y+h, x:x+w, ...]
|
173 |
+
# return seg_img
|
174 |
+
|
175 |
+
# def pad_img(img):
|
176 |
+
# h, w, _ = img.shape
|
177 |
+
# l = max(w,h)
|
178 |
+
# pad = np.zeros((l,l,3), dtype=np.uint8) #
|
179 |
+
# if h > w:
|
180 |
+
# pad[:,(h-w)//2:(h-w)//2 + w, :] = img
|
181 |
+
# else:
|
182 |
+
# pad[(w-h)//2:(w-h)//2 + h, :, :] = img
|
183 |
+
# return pad
|
184 |
+
|
185 |
+
# def batch_iterator(batch_size: int, *args) -> Generator[List[Any], None, None]:
|
186 |
+
# assert len(args) > 0 and all(
|
187 |
+
# len(a) == len(args[0]) for a in args
|
188 |
+
# ), "Batched iteration must have inputs of all the same size."
|
189 |
+
# n_batches = len(args[0]) // batch_size + int(len(args[0]) % batch_size != 0)
|
190 |
+
# for b in range(n_batches):
|
191 |
+
# yield [arg[b * batch_size : (b + 1) * batch_size] for arg in args]
|
192 |
+
|
193 |
+
# def slerp(u1, u2, t):
|
194 |
+
# """
|
195 |
+
# Perform spherical linear interpolation (Slerp) between two unit vectors.
|
196 |
|
197 |
+
# Args:
|
198 |
+
# - u1 (torch.Tensor): First unit vector, shape (1024,)
|
199 |
+
# - u2 (torch.Tensor): Second unit vector, shape (1024,)
|
200 |
+
# - t (float): Interpolation parameter
|
201 |
|
202 |
+
# Returns:
|
203 |
+
# - torch.Tensor: Interpolated vector, shape (1024,)
|
204 |
+
# """
|
205 |
+
# # Compute the dot product
|
206 |
+
# dot_product = torch.sum(u1 * u2)
|
207 |
|
208 |
+
# # Ensure the dot product is within the valid range [-1, 1]
|
209 |
+
# dot_product = torch.clamp(dot_product, -1.0, 1.0)
|
210 |
|
211 |
+
# # Compute the angle between the vectors
|
212 |
+
# theta = torch.acos(dot_product)
|
213 |
|
214 |
+
# # Compute the coefficients for the interpolation
|
215 |
+
# sin_theta = torch.sin(theta)
|
216 |
+
# if sin_theta == 0:
|
217 |
+
# # Vectors are parallel, return a linear interpolation
|
218 |
+
# return u1 + t * (u2 - u1)
|
219 |
|
220 |
+
# s1 = torch.sin((1 - t) * theta) / sin_theta
|
221 |
+
# s2 = torch.sin(t * theta) / sin_theta
|
222 |
|
223 |
+
# # Perform the interpolation
|
224 |
+
# return s1 * u1 + s2 * u2
|
225 |
|
226 |
+
# def slerp_multiple(vectors, t_values):
|
227 |
+
# """
|
228 |
+
# Perform spherical linear interpolation (Slerp) for multiple vectors.
|
229 |
|
230 |
+
# Args:
|
231 |
+
# - vectors (torch.Tensor): Tensor of vectors, shape (n, 1024)
|
232 |
+
# - a_values (torch.Tensor): Tensor of values corresponding to each vector, shape (n,)
|
233 |
|
234 |
+
# Returns:
|
235 |
+
# - torch.Tensor: Interpolated vector, shape (1024,)
|
236 |
+
# """
|
237 |
+
# n = vectors.shape[0]
|
238 |
|
239 |
+
# # Initialize the interpolated vector with the first vector
|
240 |
+
# interpolated_vector = vectors[0]
|
241 |
|
242 |
+
# # Perform Slerp iteratively
|
243 |
+
# for i in range(1, n):
|
244 |
+
# # Perform Slerp between the current interpolated vector and the next vector
|
245 |
+
# t = t_values[i] / (t_values[i] + t_values[i-1])
|
246 |
+
# interpolated_vector = slerp(interpolated_vector, vectors[i], t)
|
247 |
|
248 |
+
# return interpolated_vector
|
249 |
|
250 |
# @torch.no_grad
|
251 |
# def get_mask_from_img_sam1(mobilesamv2, yolov8, sam1_image, yolov8_image, original_size, input_size, transform):
|
|
|
438 |
|
439 |
# return cog_seg_maps, rev_cog_seg_maps, multi_view_clip_feats
|
440 |
|
441 |
+
@spaces.GPU(duration=120)
|
442 |
def get_reconstructed_scene(outdir, filelist, schedule, niter, min_conf_thr,
|
443 |
as_pointcloud, mask_sky, clean_depth, transparent_cams, cam_size,
|
444 |
scenegraph_type, winsize, refid):
|