SkalskiP commited on
Commit
43903ef
1 Parent(s): fb9c81b

with class remapping for YOLO-NAS

Browse files
Files changed (1) hide show
  1. app.py +38 -10
app.py CHANGED
@@ -1,6 +1,5 @@
1
  from typing import Tuple
2
 
3
- import spaces
4
  import gradio as gr
5
  import numpy as np
6
  import supervision as sv
@@ -11,17 +10,17 @@ MARKDOWN = """
11
 
12
  Welcome to YOLO-Arena! This demo showcases the performance of various YOLO models:
13
 
14
- - YOLOv8
15
- - YOLOv9
16
- - YOLOv10
17
- - YOLO-NAS
18
 
19
  Powered by Roboflow [Inference](https://github.com/roboflow/inference) and
20
  [Supervision](https://github.com/roboflow/supervision).
21
  """
22
 
23
  IMAGE_EXAMPLES = [
24
- ['https://media.roboflow.com/dog.jpeg', 0.3]
25
  ]
26
 
27
  YOLO_V8_MODEL = get_model(model_id="yolov8m-640")
@@ -29,6 +28,17 @@ YOLO_NAS_MODEL = get_model(model_id="coco/15")
29
  YOLO_V9_MODEL = get_model(model_id="coco/17")
30
  YOLO_V10_MODEL = get_model(model_id="coco/22")
31
 
 
 
 
 
 
 
 
 
 
 
 
32
  LABEL_ANNOTATORS = sv.LabelAnnotator(text_color=sv.Color.black())
33
  BOUNDING_BOX_ANNOTATORS = sv.BoundingBoxAnnotator()
34
 
@@ -37,7 +47,8 @@ def detect_and_annotate(
37
  model,
38
  input_image: np.ndarray,
39
  confidence_threshold: float,
40
- iou_threshold: float
 
41
  ) -> np.ndarray:
42
  result = model.infer(
43
  input_image,
@@ -45,15 +56,28 @@ def detect_and_annotate(
45
  iou_threshold=iou_threshold
46
  )[0]
47
  detections = sv.Detections.from_inference(result)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  annotated_image = input_image.copy()
49
  annotated_image = BOUNDING_BOX_ANNOTATORS.annotate(
50
  scene=annotated_image, detections=detections)
51
  annotated_image = LABEL_ANNOTATORS.annotate(
52
- scene=annotated_image, detections=detections)
53
  return annotated_image
54
 
55
 
56
- @spaces.GPU(duration=200)
57
  def process_image(
58
  input_image: np.ndarray,
59
  confidence_threshold: float,
@@ -62,7 +86,11 @@ def process_image(
62
  yolo_v8_annotated_image = detect_and_annotate(
63
  YOLO_V8_MODEL, input_image, confidence_threshold, iou_threshold)
64
  yolo_nas_annotated_image = detect_and_annotate(
65
- YOLO_NAS_MODEL, input_image, confidence_threshold, iou_threshold)
 
 
 
 
66
  yolo_v9_annotated_image = detect_and_annotate(
67
  YOLO_V9_MODEL, input_image, confidence_threshold, iou_threshold)
68
  yolo_10_annotated_image = detect_and_annotate(
 
1
  from typing import Tuple
2
 
 
3
  import gradio as gr
4
  import numpy as np
5
  import supervision as sv
 
10
 
11
  Welcome to YOLO-Arena! This demo showcases the performance of various YOLO models:
12
 
13
+ - YOLOv8 [[code](https://github.com/ultralytics/ultralytics)]
14
+ - YOLOv9 [[code](https://github.com/WongKinYiu/yolov9)]
15
+ - YOLOv10 [[code](https://github.com/THU-MIG/yolov10)]
16
+ - YOLO-NAS [[code](https://github.com/Deci-AI/super-gradients/blob/master/YOLONAS.md)]
17
 
18
  Powered by Roboflow [Inference](https://github.com/roboflow/inference) and
19
  [Supervision](https://github.com/roboflow/supervision).
20
  """
21
 
22
  IMAGE_EXAMPLES = [
23
+ ['https://media.roboflow.com/dog.jpeg', 0.4]
24
  ]
25
 
26
  YOLO_V8_MODEL = get_model(model_id="yolov8m-640")
 
28
  YOLO_V9_MODEL = get_model(model_id="coco/17")
29
  YOLO_V10_MODEL = get_model(model_id="coco/22")
30
 
31
+ YOLO_NAS_TO_COCO_CLASS_ID_MAPPING = {
32
+ 49: 0, 9: 1, 18: 2, 44: 3, 0: 4, 16: 5, 73: 6, 74: 7, 11: 8, 72: 9, 31: 10, 63: 11,
33
+ 48: 12, 8: 13, 10: 14, 20: 15, 28: 16, 37: 17, 56: 18, 25: 19, 30: 20, 6: 21,
34
+ 79: 22, 34: 23, 2: 24, 76: 25, 36: 26, 68: 27, 64: 28, 33: 29, 59: 30, 60: 31,
35
+ 62: 32, 40: 33, 4: 34, 5: 35, 58: 36, 65: 37, 67: 38, 13: 39, 78: 40, 26: 41,
36
+ 32: 42, 41: 43, 61: 44, 14: 45, 3: 46, 1: 47, 54: 48, 46: 49, 15: 50, 19: 51,
37
+ 38: 52, 50: 53, 29: 54, 17: 55, 22: 56, 24: 57, 51: 58, 7: 59, 27: 60, 70: 61,
38
+ 75: 62, 42: 63, 45: 64, 53: 65, 39: 66, 21: 67, 43: 68, 47: 69, 69: 70, 57: 71,
39
+ 52: 72, 12: 73, 23: 74, 77: 75, 55: 76, 66: 77, 35: 78, 71: 79
40
+ }
41
+
42
  LABEL_ANNOTATORS = sv.LabelAnnotator(text_color=sv.Color.black())
43
  BOUNDING_BOX_ANNOTATORS = sv.BoundingBoxAnnotator()
44
 
 
47
  model,
48
  input_image: np.ndarray,
49
  confidence_threshold: float,
50
+ iou_threshold: float,
51
+ class_id_mapping: dict = None
52
  ) -> np.ndarray:
53
  result = model.infer(
54
  input_image,
 
56
  iou_threshold=iou_threshold
57
  )[0]
58
  detections = sv.Detections.from_inference(result)
59
+
60
+ if class_id_mapping:
61
+ detections.class_id = np.array([
62
+ class_id_mapping[class_id]
63
+ for class_id
64
+ in detections.class_id
65
+ ])
66
+
67
+ labels = [
68
+ f"{class_name} ({confidence:.2f})"
69
+ for class_name, confidence
70
+ in zip(detections['class_name'], detections.confidence)
71
+ ]
72
+
73
  annotated_image = input_image.copy()
74
  annotated_image = BOUNDING_BOX_ANNOTATORS.annotate(
75
  scene=annotated_image, detections=detections)
76
  annotated_image = LABEL_ANNOTATORS.annotate(
77
+ scene=annotated_image, detections=detections, labels=labels)
78
  return annotated_image
79
 
80
 
 
81
  def process_image(
82
  input_image: np.ndarray,
83
  confidence_threshold: float,
 
86
  yolo_v8_annotated_image = detect_and_annotate(
87
  YOLO_V8_MODEL, input_image, confidence_threshold, iou_threshold)
88
  yolo_nas_annotated_image = detect_and_annotate(
89
+ YOLO_NAS_MODEL,
90
+ input_image,
91
+ confidence_threshold,
92
+ iou_threshold,
93
+ YOLO_NAS_TO_COCO_CLASS_ID_MAPPING)
94
  yolo_v9_annotated_image = detect_and_annotate(
95
  YOLO_V9_MODEL, input_image, confidence_threshold, iou_threshold)
96
  yolo_10_annotated_image = detect_and_annotate(