Spaces:
Runtime error
Runtime error
Tobias Cornille
commited on
Commit
·
27a9b54
1
Parent(s):
d334f4b
Fix device
Browse files
app.py
CHANGED
|
@@ -3,9 +3,6 @@ import subprocess, os, sys
|
|
| 3 |
result = subprocess.run(["pip", "install", "-e", "GroundingDINO"], check=True)
|
| 4 |
print(f"pip install GroundingDINO = {result}")
|
| 5 |
|
| 6 |
-
result = subprocess.run(["pip", "list"], check=True)
|
| 7 |
-
print(f"pip list = {result}")
|
| 8 |
-
|
| 9 |
sys.path.insert(0, "./GroundingDINO")
|
| 10 |
|
| 11 |
if not os.path.exists("./sam_vit_h_4b8939.pth"):
|
|
@@ -42,9 +39,8 @@ from GroundingDINO.groundingdino.util import box_ops
|
|
| 42 |
from GroundingDINO.groundingdino.util.slconfig import SLConfig
|
| 43 |
from GroundingDINO.groundingdino.util.utils import (
|
| 44 |
clean_state_dict,
|
| 45 |
-
get_phrases_from_posmap,
|
| 46 |
)
|
| 47 |
-
from GroundingDINO.groundingdino.util.inference import annotate,
|
| 48 |
|
| 49 |
# segment anything
|
| 50 |
from segment_anything import build_sam, SamPredictor
|
|
@@ -63,6 +59,7 @@ def load_model_hf(model_config_path, repo_id, filename, device):
|
|
| 63 |
log = model.load_state_dict(clean_state_dict(checkpoint["model"]), strict=False)
|
| 64 |
print("Model loaded from {} \n => {}".format(cache_file, log))
|
| 65 |
_ = model.eval()
|
|
|
|
| 66 |
return model
|
| 67 |
|
| 68 |
|
|
@@ -99,6 +96,7 @@ def dino_detection(
|
|
| 99 |
caption=detection_prompt,
|
| 100 |
box_threshold=box_threshold,
|
| 101 |
text_threshold=text_threshold,
|
|
|
|
| 102 |
)
|
| 103 |
category_ids = [category_name_to_id[phrase] for phrase in phrases]
|
| 104 |
|
|
@@ -113,7 +111,7 @@ def dino_detection(
|
|
| 113 |
return boxes, category_ids
|
| 114 |
|
| 115 |
|
| 116 |
-
def sam_masks_from_dino_boxes(predictor, image_array, boxes):
|
| 117 |
# box: normalized box xywh -> unnormalized xyxy
|
| 118 |
H, W, _ = image_array.shape
|
| 119 |
boxes_xyxy = box_ops.box_cxcywh_to_xyxy(boxes) * torch.Tensor([W, H, W, H])
|
|
@@ -284,14 +282,6 @@ def generate_panoptic_mask(
|
|
| 284 |
image = image.convert("RGB")
|
| 285 |
image_array = np.asarray(image)
|
| 286 |
|
| 287 |
-
if device != "cpu":
|
| 288 |
-
try:
|
| 289 |
-
from GroundingDINO.groundingdino import _C
|
| 290 |
-
except:
|
| 291 |
-
warnings.warn(
|
| 292 |
-
"Failed to load custom C++ ops. Running on CPU mode Only in groundingdino!"
|
| 293 |
-
)
|
| 294 |
-
|
| 295 |
# detect boxes for "thing" categories using Grounding DINO
|
| 296 |
thing_boxes, _ = dino_detection(
|
| 297 |
dino_model,
|
|
@@ -306,7 +296,9 @@ def generate_panoptic_mask(
|
|
| 306 |
# compute SAM image embedding
|
| 307 |
sam_predictor.set_image(image_array)
|
| 308 |
# get segmentation masks for the thing boxes
|
| 309 |
-
thing_masks = sam_masks_from_dino_boxes(
|
|
|
|
|
|
|
| 310 |
# get rough segmentation masks for "stuff" categories using CLIPSeg
|
| 311 |
clipseg_preds, clipseg_semantic_inds = clipseg_segmentation(
|
| 312 |
clipseg_processor,
|
|
@@ -366,9 +358,16 @@ sam_checkpoint = "./sam_vit_h_4b8939.pth"
|
|
| 366 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 367 |
print("Using device:", device)
|
| 368 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 369 |
# initialize groundingdino model
|
| 370 |
dino_model = load_model_hf(config_file, ckpt_repo_id, ckpt_filename, device)
|
| 371 |
-
dino_model = dino_model.to(device)
|
| 372 |
|
| 373 |
# initialize SAM
|
| 374 |
sam = build_sam(checkpoint=sam_checkpoint)
|
|
@@ -458,6 +457,5 @@ if __name__ == "__main__":
|
|
| 458 |
],
|
| 459 |
outputs=[plot],
|
| 460 |
)
|
| 461 |
-
# task_type.change(fn=change_task_type, inputs=[task_type], outputs=[inpaint_prompt])
|
| 462 |
|
| 463 |
block.launch(server_name="0.0.0.0", debug=args.debug, share=args.share)
|
|
|
|
| 3 |
result = subprocess.run(["pip", "install", "-e", "GroundingDINO"], check=True)
|
| 4 |
print(f"pip install GroundingDINO = {result}")
|
| 5 |
|
|
|
|
|
|
|
|
|
|
| 6 |
sys.path.insert(0, "./GroundingDINO")
|
| 7 |
|
| 8 |
if not os.path.exists("./sam_vit_h_4b8939.pth"):
|
|
|
|
| 39 |
from GroundingDINO.groundingdino.util.slconfig import SLConfig
|
| 40 |
from GroundingDINO.groundingdino.util.utils import (
|
| 41 |
clean_state_dict,
|
|
|
|
| 42 |
)
|
| 43 |
+
from GroundingDINO.groundingdino.util.inference import annotate, predict
|
| 44 |
|
| 45 |
# segment anything
|
| 46 |
from segment_anything import build_sam, SamPredictor
|
|
|
|
| 59 |
log = model.load_state_dict(clean_state_dict(checkpoint["model"]), strict=False)
|
| 60 |
print("Model loaded from {} \n => {}".format(cache_file, log))
|
| 61 |
_ = model.eval()
|
| 62 |
+
model = model.to(device)
|
| 63 |
return model
|
| 64 |
|
| 65 |
|
|
|
|
| 96 |
caption=detection_prompt,
|
| 97 |
box_threshold=box_threshold,
|
| 98 |
text_threshold=text_threshold,
|
| 99 |
+
device=device,
|
| 100 |
)
|
| 101 |
category_ids = [category_name_to_id[phrase] for phrase in phrases]
|
| 102 |
|
|
|
|
| 111 |
return boxes, category_ids
|
| 112 |
|
| 113 |
|
| 114 |
+
def sam_masks_from_dino_boxes(predictor, image_array, boxes, device):
|
| 115 |
# box: normalized box xywh -> unnormalized xyxy
|
| 116 |
H, W, _ = image_array.shape
|
| 117 |
boxes_xyxy = box_ops.box_cxcywh_to_xyxy(boxes) * torch.Tensor([W, H, W, H])
|
|
|
|
| 282 |
image = image.convert("RGB")
|
| 283 |
image_array = np.asarray(image)
|
| 284 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 285 |
# detect boxes for "thing" categories using Grounding DINO
|
| 286 |
thing_boxes, _ = dino_detection(
|
| 287 |
dino_model,
|
|
|
|
| 296 |
# compute SAM image embedding
|
| 297 |
sam_predictor.set_image(image_array)
|
| 298 |
# get segmentation masks for the thing boxes
|
| 299 |
+
thing_masks = sam_masks_from_dino_boxes(
|
| 300 |
+
sam_predictor, image_array, thing_boxes, device
|
| 301 |
+
)
|
| 302 |
# get rough segmentation masks for "stuff" categories using CLIPSeg
|
| 303 |
clipseg_preds, clipseg_semantic_inds = clipseg_segmentation(
|
| 304 |
clipseg_processor,
|
|
|
|
| 358 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 359 |
print("Using device:", device)
|
| 360 |
|
| 361 |
+
if device != "cpu":
|
| 362 |
+
try:
|
| 363 |
+
from GroundingDINO.groundingdino import _C
|
| 364 |
+
except:
|
| 365 |
+
warnings.warn(
|
| 366 |
+
"Failed to load custom C++ ops. Running on CPU mode Only in groundingdino!"
|
| 367 |
+
)
|
| 368 |
+
|
| 369 |
# initialize groundingdino model
|
| 370 |
dino_model = load_model_hf(config_file, ckpt_repo_id, ckpt_filename, device)
|
|
|
|
| 371 |
|
| 372 |
# initialize SAM
|
| 373 |
sam = build_sam(checkpoint=sam_checkpoint)
|
|
|
|
| 457 |
],
|
| 458 |
outputs=[plot],
|
| 459 |
)
|
|
|
|
| 460 |
|
| 461 |
block.launch(server_name="0.0.0.0", debug=args.debug, share=args.share)
|