UsuarioCompuElite commited on
Commit
9ef518d
·
1 Parent(s): 328ea15
Files changed (5) hide show
  1. app.py +169 -0
  2. detection1.pth +3 -0
  3. requirements.txt +8 -0
  4. sam2.1_b.pt +3 -0
  5. training-metrics.json +573 -0
app.py ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import math
2
+
3
+ import os
4
+ os.environ["MPLBACKEND"] = "Agg" # backend sin Qt / sin ventanas
5
+
6
+ import gradio as gr
7
+
8
+ import torch
9
+ import torchvision
10
+ import cv2
11
+ import numpy as np
12
+ from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
13
+ from PIL import Image
14
+ from ultralytics import SAM
15
+ #grad camara
16
+ from pytorch_grad_cam import EigenGradCAM
17
+ from pytorch_grad_cam.utils.model_targets import FasterRCNNBoxScoreTarget
18
+ from pytorch_grad_cam.utils.image import show_cam_on_image
19
+ device = 'cuda' if torch.cuda.is_available() else 'cpu'
20
+
21
+
22
+ def load():
23
+ state = torch.load("detection1.pth", map_location=device)
24
+ model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
25
+ in_feat = model.roi_heads.box_predictor.cls_score.in_features
26
+ model.roi_heads.box_predictor = FastRCNNPredictor(in_channels=in_feat, num_classes=2)
27
+ model.load_state_dict(state)
28
+ model.to(device)
29
+ model.eval()
30
+ return model
31
+
32
+
33
+ GR_MODEL = load()
34
+ SAM_MODEL = SAM('sam2.1_b.pt')
35
+
36
+ def predict(image, thr=0.5):
37
+ rgb_image = Image.fromarray(image).convert('RGB')
38
+ grad_img_input = np.asarray(rgb_image)
39
+
40
+ cv_image = cv2.cvtColor(np.array(rgb_image), cv2.COLOR_RGB2BGR)
41
+ cv_copy_image = cv_image.copy()
42
+ input = torchvision.transforms.ToTensor()(rgb_image).to(device=device)
43
+ grad_input = input.clone()
44
+ with torch.no_grad():
45
+ predictions = GR_MODEL([input])[0]
46
+
47
+ boxes = predictions["boxes"]
48
+ scores = predictions["scores"]
49
+ labels = predictions["labels"]
50
+
51
+ print(scores)
52
+ bounding_boxes = []
53
+ labels_grad = []
54
+
55
+ for (box, score, label) in zip(boxes, scores, labels):
56
+ if score < thr:
57
+ continue
58
+
59
+ x1, y1, x2, y2 = map(math.floor, box)
60
+ cv_image = cv2.rectangle(cv_image, (x1, y1),(x2, y2), thickness=3, color=[0.0, 255.0, 0.0, 255.0])
61
+ cv_image = cv2.putText(cv_image, f'Huina {score*100:.2f}% de probabilidad', (x1, y1 - 10),cv2.FONT_HERSHEY_SIMPLEX, 3.0, [0.0, 255.0, 0.0,],3)
62
+ bounding_boxes.append([x1, y1, x2, y2])
63
+ labels_grad.append(int(label))
64
+
65
+ if len(bounding_boxes) > 0:
66
+ with torch.no_grad():
67
+ results = SAM_MODEL(source=cv_copy_image,bboxes=bounding_boxes)
68
+ mask_data = np.zeros((cv_image.shape[0], cv_image.shape[1]))
69
+ for mask in results[0].masks.data:
70
+ mask_data = np.maximum(mask_data, mask.cpu().numpy())
71
+ cv_copy_image = (cv_copy_image * (mask_data)[:, :, np.newaxis]).astype(np.uint8)
72
+
73
+ if len(bounding_boxes) > 0:
74
+ GR_MODEL.train()
75
+
76
+ grad_cam = EigenGradCAM(
77
+ model=GR_MODEL,
78
+ target_layers=[GR_MODEL.backbone.body.layer4[-1]]
79
+ )
80
+ boxes_np = np.array(bounding_boxes, dtype=np.float32)
81
+ labels_np = np.array(labels_grad, dtype=np.int64)
82
+
83
+
84
+ targets = [FasterRCNNBoxScoreTarget(labels=labels_np, bounding_boxes=boxes_np, iou_threshold=0.4)]
85
+ gray_cam = grad_cam(grad_input.unsqueeze(0), targets=targets)[0]
86
+ grad_img = show_cam_on_image(grad_img_input.astype('float32')/255.0, gray_cam, use_rgb=True)
87
+
88
+ return cv2.cvtColor(cv_image, cv2.COLOR_BGR2RGB), cv2.cvtColor(cv_copy_image, cv2.COLOR_RGB2BGR), grad_img
89
+
90
+ import gradio as gr
91
+ import json
92
+
93
+ STATIC_JSON = json.load(open('training-metrics.json', mode='r+'))
94
+ for obj in STATIC_JSON['metrics']:
95
+ if obj.__contains__('AP100'):
96
+ ar100 = obj["AP100"]
97
+ del obj["AP100"]
98
+ obj["AR100"] = ar100
99
+ obj['AP'] = round(obj['AP'], 2)
100
+ obj['AP75'] = round(obj['AP75'], 2)
101
+ obj['AR100'] = round(obj['AR100'], 2)
102
+
103
+ STATIC_JSON['best_score'] = round(STATIC_JSON['best_score'], 2)
104
+
105
+ with gr.Blocks() as demo:
106
+ gr.Markdown("# Detector de Huiñas en cámaras trampa")
107
+ gr.Markdown("""
108
+ **Detección de Huiñas con FAST R-CNN y PyTorch**
109
+ - Épocas de entrenamiento: 80
110
+ - Número de clases: 1
111
+ - Label: Huiña
112
+ - Métrica: AP@0.5 * 0.5 + AP@0.75 * 0.25 + AR@100 * 0.25
113
+ - Train: 85% (398 imágenes)
114
+ - Val: 10% (46 imágenes)
115
+ - Test: 5% (24 imágenes)
116
+ - Detección de gradiente con EigenGradCam
117
+ - Segmentación de máscara con SAM (Segment Anything Model)
118
+ """)
119
+ with gr.Row():
120
+ with gr.Column(scale=1):
121
+ inp_img = gr.Image(type="numpy", label="Imagen")
122
+ thr = gr.Slider(0.1, 0.99, value=0.5, step=0.01, label="Threshold")
123
+
124
+ with gr.Row():
125
+ btn_submit = gr.Button("Submit", variant="primary")
126
+ btn_clear = gr.Button("Clear")
127
+
128
+ # JSON fijo debajo de los botones
129
+ gr.JSON(value=STATIC_JSON, label="Información de entrenamiento")
130
+
131
+ with gr.Column(scale=1):
132
+ out_bbox = gr.Image(type="numpy", label="Detección de bounding box")
133
+ out_sam = gr.Image(type="numpy", label="Segmentation Anything (SAM)")
134
+ out_cam = gr.Image(type="numpy", label="Eigen/Grad-CAM")
135
+
136
+ gr.Examples(
137
+ examples=[
138
+ ["https://i.postimg.cc/G8wjmq2N/ex1.jpg", 0.50],
139
+ ["https://i.postimg.cc/CdCczTbf/ex5.jpg", 0.70],
140
+ ["https://i.postimg.cc/k2Gs12zK/ex6.jpg", 0.70],
141
+ ["https://i.postimg.cc/p5PYDrKz/ex3.jpg", 0.70],
142
+ ["https://i.postimg.cc/bd02h6pP/ex4.jpg", 0.70],
143
+ ["https://i.postimg.cc/LYt3YLgZ/ex2.jpg", 0.70],
144
+
145
+ ],
146
+ inputs=[inp_img, thr],
147
+ fn=predict,
148
+ outputs=[out_bbox, out_sam, out_cam],
149
+ cache_examples=True,
150
+ label="Ejemplos",
151
+ )
152
+
153
+ btn_submit.click(
154
+ fn=predict,
155
+ inputs=[inp_img, thr],
156
+ outputs=[out_bbox, out_sam, out_cam],
157
+ )
158
+
159
+ def _clear():
160
+ return None, 0.5, None, None, None
161
+
162
+ btn_clear.click(
163
+ fn=_clear,
164
+ inputs=[],
165
+ outputs=[inp_img, thr, out_bbox, out_sam, out_cam],
166
+ )
167
+
168
+ demo.launch()
169
+
detection1.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b11cf00cf8651fbf2c82156403c20cf7f57593f948832b9ffba0737c1237da86
3
+ size 165728267
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ gradio
2
+ numpy
3
+ opencv-python-headless
4
+ torch
5
+ torchvision
6
+ pillow
7
+ ultralytics
8
+ grad-cam
sam2.1_b.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f1a9cf2dd69d84bb463b5ad98246d03e2d47a130a9295db0ec967e6cd95e2e47
3
+ size 161935802
training-metrics.json ADDED
@@ -0,0 +1,573 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "metrics": [
3
+ {
4
+ "Epoch": 0,
5
+ "AP": 0.67395913877102,
6
+ "AP75": 0.8012185833968013,
7
+ "AP100": 0.7259259259259261,
8
+ "save": true
9
+ },
10
+ {
11
+ "Epoch": 1,
12
+ "AP": 0.6615959352543971,
13
+ "AP75": 0.762964758014263,
14
+ "AP100": 0.6962962962962964,
15
+ "save": false
16
+ },
17
+ {
18
+ "Epoch": 1,
19
+ "AP": 0.6148379453329949,
20
+ "AP75": 0.7207920792079208,
21
+ "AP100": 0.6555555555555557,
22
+ "save": false
23
+ },
24
+ {
25
+ "Epoch": 2,
26
+ "AP": 0.6645932401674296,
27
+ "AP75": 0.8206089760114728,
28
+ "AP100": 0.711111111111111,
29
+ "save": true
30
+ },
31
+ {
32
+ "Epoch": 3,
33
+ "AP": 0.6451778743675967,
34
+ "AP75": 0.728082808280828,
35
+ "AP100": 0.6925925925925925,
36
+ "save": false
37
+ },
38
+ {
39
+ "Epoch": 4,
40
+ "AP": 0.6470110139970109,
41
+ "AP75": 0.7272984441301272,
42
+ "AP100": 0.6888888888888889,
43
+ "save": false
44
+ },
45
+ {
46
+ "Epoch": 5,
47
+ "AP": 0.612512776087798,
48
+ "AP75": 0.7484107413418423,
49
+ "AP100": 0.674074074074074,
50
+ "save": false
51
+ },
52
+ {
53
+ "Epoch": 6,
54
+ "AP": 0.6562096007171568,
55
+ "AP75": 0.8391954580073393,
56
+ "AP100": 0.7074074074074074,
57
+ "save": false
58
+ },
59
+ {
60
+ "Epoch": 7,
61
+ "AP": 0.6570133428977573,
62
+ "AP75": 0.8377151048438178,
63
+ "AP100": 0.7111111111111111,
64
+ "save": false
65
+ },
66
+ {
67
+ "Epoch": 8,
68
+ "AP": 0.6602958707241962,
69
+ "AP75": 0.839762906056492,
70
+ "AP100": 0.7,
71
+ "save": false
72
+ },
73
+ {
74
+ "Epoch": 9,
75
+ "AP": 0.691502532131771,
76
+ "AP75": 0.8619143552072329,
77
+ "AP100": 0.7407407407407408,
78
+ "save": false
79
+ },
80
+ {
81
+ "Epoch": 10,
82
+ "AP": 0.6848634836608363,
83
+ "AP75": 0.8575932605205099,
84
+ "AP100": 0.7296296296296296,
85
+ "save": false
86
+ },
87
+ {
88
+ "Epoch": 11,
89
+ "AP": 0.6175727352810468,
90
+ "AP75": 0.7465582272512967,
91
+ "AP100": 0.6703703703703703,
92
+ "save": false
93
+ },
94
+ {
95
+ "Epoch": 12,
96
+ "AP": 0.6265393531111353,
97
+ "AP75": 0.7781162731657782,
98
+ "AP100": 0.6888888888888889,
99
+ "save": false
100
+ },
101
+ {
102
+ "Epoch": 13,
103
+ "AP": 0.6367633572206267,
104
+ "AP75": 0.7993326805207993,
105
+ "AP100": 0.6777777777777777,
106
+ "save": false
107
+ },
108
+ {
109
+ "Epoch": 14,
110
+ "AP": 0.6197018206359576,
111
+ "AP75": 0.7886192489291931,
112
+ "AP100": 0.6740740740740742,
113
+ "save": false
114
+ },
115
+ {
116
+ "Epoch": 15,
117
+ "AP": 0.6487374966193361,
118
+ "AP75": 0.7961942860952763,
119
+ "AP100": 0.6851851851851851,
120
+ "save": false
121
+ },
122
+ {
123
+ "Epoch": 16,
124
+ "AP": 0.6615402902747175,
125
+ "AP75": 0.7993326805207993,
126
+ "AP100": 0.7037037037037036,
127
+ "save": false
128
+ },
129
+ {
130
+ "Epoch": 17,
131
+ "AP": 0.6723582771320611,
132
+ "AP75": 0.8206776474748924,
133
+ "AP100": 0.7259259259259259,
134
+ "save": false
135
+ },
136
+ {
137
+ "Epoch": 18,
138
+ "AP": 0.6615193243801815,
139
+ "AP75": 0.8176023773485342,
140
+ "AP100": 0.7148148148148149,
141
+ "save": false
142
+ },
143
+ {
144
+ "Epoch": 19,
145
+ "AP": 0.6694297223840031,
146
+ "AP75": 0.8312388931200813,
147
+ "AP100": 0.7111111111111111,
148
+ "save": false
149
+ },
150
+ {
151
+ "Epoch": 20,
152
+ "AP": 0.6552525301691534,
153
+ "AP75": 0.6597186034392912,
154
+ "AP100": 0.6925925925925925,
155
+ "save": false
156
+ },
157
+ {
158
+ "Epoch": 21,
159
+ "AP": 0.6736141474267183,
160
+ "AP75": 0.8132402598270236,
161
+ "AP100": 0.7333333333333334,
162
+ "save": false
163
+ },
164
+ {
165
+ "Epoch": 22,
166
+ "AP": 0.6595772993588951,
167
+ "AP75": 0.8355950979713357,
168
+ "AP100": 0.7037037037037037,
169
+ "save": false
170
+ },
171
+ {
172
+ "Epoch": 23,
173
+ "AP": 0.6773315983201753,
174
+ "AP75": 0.853591646827574,
175
+ "AP100": 0.7296296296296296,
176
+ "save": false
177
+ },
178
+ {
179
+ "Epoch": 24,
180
+ "AP": 0.684417063402212,
181
+ "AP75": 0.8525275901513526,
182
+ "AP100": 0.7407407407407407,
183
+ "save": false
184
+ },
185
+ {
186
+ "Epoch": 25,
187
+ "AP": 0.648404917584944,
188
+ "AP75": 0.7892694416925788,
189
+ "AP100": 0.6925925925925925,
190
+ "save": false
191
+ },
192
+ {
193
+ "Epoch": 26,
194
+ "AP": 0.6483312349331523,
195
+ "AP75": 0.7901966247118841,
196
+ "AP100": 0.6925925925925925,
197
+ "save": false
198
+ },
199
+ {
200
+ "Epoch": 27,
201
+ "AP": 0.6541149157400344,
202
+ "AP75": 0.7919334443565815,
203
+ "AP100": 0.6962962962962963,
204
+ "save": false
205
+ },
206
+ {
207
+ "Epoch": 28,
208
+ "AP": 0.6863342734288813,
209
+ "AP75": 0.8550719999910955,
210
+ "AP100": 0.7407407407407407,
211
+ "save": false
212
+ },
213
+ {
214
+ "Epoch": 29,
215
+ "AP": 0.6830123314327817,
216
+ "AP75": 0.8529925953257852,
217
+ "AP100": 0.7333333333333333,
218
+ "save": false
219
+ },
220
+ {
221
+ "Epoch": 30,
222
+ "AP": 0.6656851057917124,
223
+ "AP75": 0.8341051974284863,
224
+ "AP100": 0.711111111111111,
225
+ "save": false
226
+ },
227
+ {
228
+ "Epoch": 31,
229
+ "AP": 0.6667324314849068,
230
+ "AP75": 0.8351467014833351,
231
+ "AP100": 0.711111111111111,
232
+ "save": false
233
+ },
234
+ {
235
+ "Epoch": 32,
236
+ "AP": 0.6846186510391014,
237
+ "AP75": 0.8557073576445079,
238
+ "AR100": 0.7333333333333333,
239
+ "save": true
240
+ },
241
+ {
242
+ "Epoch": 33,
243
+ "AP": 0.6577926022556445,
244
+ "AP75": 0.8341051974284863,
245
+ "AR100": 0.7037037037037037,
246
+ "save": false
247
+ },
248
+ {
249
+ "Epoch": 34,
250
+ "AP": 0.6693708821431594,
251
+ "AP75": 0.8351467014833351,
252
+ "AR100": 0.711111111111111,
253
+ "save": false
254
+ },
255
+ {
256
+ "Epoch": 35,
257
+ "AP": 0.6677691781537278,
258
+ "AP75": 0.8341051974284863,
259
+ "AR100": 0.711111111111111,
260
+ "save": false
261
+ },
262
+ {
263
+ "Epoch": 36,
264
+ "AP": 0.6702107794567153,
265
+ "AP75": 0.8341051974284863,
266
+ "AR100": 0.7148148148148148,
267
+ "save": false
268
+ },
269
+ {
270
+ "Epoch": 37,
271
+ "AP": 0.649879493571444,
272
+ "AP75": 0.7919334443565815,
273
+ "AR100": 0.6925925925925925,
274
+ "save": false
275
+ },
276
+ {
277
+ "Epoch": 38,
278
+ "AP": 0.6545885601003539,
279
+ "AP75": 0.7936578273211936,
280
+ "AR100": 0.6962962962962963,
281
+ "save": false
282
+ },
283
+ {
284
+ "Epoch": 39,
285
+ "AP": 0.678628150872618,
286
+ "AP75": 0.8553970781693555,
287
+ "AR100": 0.7333333333333334,
288
+ "save": false
289
+ },
290
+ {
291
+ "Epoch": 40,
292
+ "AP": 0.6502854374803996,
293
+ "AP75": 0.7936578273211936,
294
+ "AR100": 0.6925925925925925,
295
+ "save": false
296
+ },
297
+ {
298
+ "Epoch": 41,
299
+ "AP": 0.6503574446811197,
300
+ "AP75": 0.7936578273211936,
301
+ "AR100": 0.6925925925925925,
302
+ "save": false
303
+ },
304
+ {
305
+ "Epoch": 42,
306
+ "AP": 0.6618330967712155,
307
+ "AP75": 0.7956380253409957,
308
+ "AR100": 0.7,
309
+ "save": false
310
+ },
311
+ {
312
+ "Epoch": 43,
313
+ "AP": 0.6596535038119197,
314
+ "AP75": 0.7956380253409957,
315
+ "AR100": 0.7,
316
+ "save": false
317
+ },
318
+ {
319
+ "Epoch": 44,
320
+ "AP": 0.6618330967712155,
321
+ "AP75": 0.7956380253409957,
322
+ "AR100": 0.7,
323
+ "save": false
324
+ },
325
+ {
326
+ "Epoch": 45,
327
+ "AP": 0.6726293013916776,
328
+ "AP75": 0.7956380253409957,
329
+ "AR100": 0.7074074074074074,
330
+ "save": false
331
+ },
332
+ {
333
+ "Epoch": 46,
334
+ "AP": 0.6618330967712155,
335
+ "AP75": 0.7956380253409957,
336
+ "AR100": 0.7,
337
+ "save": false
338
+ },
339
+ {
340
+ "Epoch": 47,
341
+ "AP": 0.6649806919929226,
342
+ "AP75": 0.7936578273211936,
343
+ "AR100": 0.7037037037037037,
344
+ "save": false
345
+ },
346
+ {
347
+ "Epoch": 48,
348
+ "AP": 0.6710974609370013,
349
+ "AP75": 0.8519269796067042,
350
+ "AR100": 0.725925925925926,
351
+ "save": false
352
+ },
353
+ {
354
+ "Epoch": 49,
355
+ "AP": 0.6626837848620027,
356
+ "AP75": 0.8332607986073334,
357
+ "AR100": 0.7074074074074074,
358
+ "save": false
359
+ },
360
+ {
361
+ "Epoch": 50,
362
+ "AP": 0.666961702128449,
363
+ "AP75": 0.8341051974284863,
364
+ "AR100": 0.7074074074074074,
365
+ "save": false
366
+ },
367
+ {
368
+ "Epoch": 51,
369
+ "AP": 0.6697776948621761,
370
+ "AP75": 0.8341051974284863,
371
+ "AR100": 0.7148148148148148,
372
+ "save": false
373
+ },
374
+ {
375
+ "Epoch": 52,
376
+ "AP": 0.6616441917898263,
377
+ "AP75": 0.8341051974284863,
378
+ "AR100": 0.7074074074074075,
379
+ "save": false
380
+ },
381
+ {
382
+ "Epoch": 53,
383
+ "AP": 0.6635970889428956,
384
+ "AP75": 0.8355950979713357,
385
+ "AR100": 0.7074074074074075,
386
+ "save": false
387
+ },
388
+ {
389
+ "Epoch": 54,
390
+ "AP": 0.6636690961436157,
391
+ "AP75": 0.8355950979713357,
392
+ "AR100": 0.7074074074074075,
393
+ "save": false
394
+ },
395
+ {
396
+ "Epoch": 55,
397
+ "AP": 0.6766544737369103,
398
+ "AP75": 0.8519269796067042,
399
+ "AR100": 0.7333333333333334,
400
+ "save": false
401
+ },
402
+ {
403
+ "Epoch": 56,
404
+ "AP": 0.6660075375669435,
405
+ "AP75": 0.8351467014833351,
406
+ "AR100": 0.711111111111111,
407
+ "save": false
408
+ },
409
+ {
410
+ "Epoch": 57,
411
+ "AP": 0.6584544129913962,
412
+ "AP75": 0.8332607986073334,
413
+ "AR100": 0.7037037037037036,
414
+ "save": false
415
+ },
416
+ {
417
+ "Epoch": 58,
418
+ "AP": 0.6601448990034048,
419
+ "AP75": 0.8341051974284863,
420
+ "AR100": 0.7037037037037037,
421
+ "save": false
422
+ },
423
+ {
424
+ "Epoch": 59,
425
+ "AP": 0.6619633445842266,
426
+ "AP75": 0.8341051974284863,
427
+ "AR100": 0.7074074074074075,
428
+ "save": false
429
+ },
430
+ {
431
+ "Epoch": 60,
432
+ "AP": 0.6590436924267734,
433
+ "AP75": 0.8355950979713357,
434
+ "AR100": 0.7037037037037037,
435
+ "save": false
436
+ },
437
+ {
438
+ "Epoch": 61,
439
+ "AP": 0.6503574446811197,
440
+ "AP75": 0.7936578273211936,
441
+ "AR100": 0.6925925925925925,
442
+ "save": false
443
+ },
444
+ {
445
+ "Epoch": 62,
446
+ "AP": 0.6634361316706978,
447
+ "AP75": 0.8355950979713357,
448
+ "AR100": 0.7074074074074075,
449
+ "save": false
450
+ },
451
+ {
452
+ "Epoch": 63,
453
+ "AP": 0.6503574446811197,
454
+ "AP75": 0.7936578273211936,
455
+ "AR100": 0.6925925925925925,
456
+ "save": false
457
+ },
458
+ {
459
+ "Epoch": 64,
460
+ "AP": 0.6543836165290737,
461
+ "AP75": 0.7936578273211936,
462
+ "AR100": 0.6962962962962963,
463
+ "save": false
464
+ },
465
+ {
466
+ "Epoch": 65,
467
+ "AP": 0.6550724207036088,
468
+ "AP75": 0.7956380253409957,
469
+ "AR100": 0.6962962962962963,
470
+ "save": false
471
+ },
472
+ {
473
+ "Epoch": 66,
474
+ "AP": 0.6708426227238108,
475
+ "AP75": 0.7936578273211936,
476
+ "AR100": 0.7074074074074075,
477
+ "save": false
478
+ },
479
+ {
480
+ "Epoch": 67,
481
+ "AP": 0.657776955863007,
482
+ "AP75": 0.7936578273211936,
483
+ "AR100": 0.7,
484
+ "save": false
485
+ },
486
+ {
487
+ "Epoch": 68,
488
+ "AP": 0.6616067884260953,
489
+ "AP75": 0.7956380253409957,
490
+ "AR100": 0.7,
491
+ "save": false
492
+ },
493
+ {
494
+ "Epoch": 69,
495
+ "AP": 0.6628925420014529,
496
+ "AP75": 0.7956380253409957,
497
+ "AR100": 0.7037037037037037,
498
+ "save": false
499
+ },
500
+ {
501
+ "Epoch": 70,
502
+ "AP": 0.6609482225695097,
503
+ "AP75": 0.7936578273211936,
504
+ "AR100": 0.7,
505
+ "save": false
506
+ },
507
+ {
508
+ "Epoch": 71,
509
+ "AP": 0.6650242128285228,
510
+ "AP75": 0.7936578273211936,
511
+ "AR100": 0.7037037037037037,
512
+ "save": false
513
+ },
514
+ {
515
+ "Epoch": 72,
516
+ "AP": 0.6711212472249164,
517
+ "AP75": 0.7936578273211936,
518
+ "AR100": 0.7074074074074075,
519
+ "save": false
520
+ },
521
+ {
522
+ "Epoch": 73,
523
+ "AP": 0.6578714674958123,
524
+ "AP75": 0.7936578273211936,
525
+ "AR100": 0.6962962962962963,
526
+ "save": false
527
+ },
528
+ {
529
+ "Epoch": 74,
530
+ "AP": 0.6645709433257482,
531
+ "AP75": 0.7936578273211936,
532
+ "AR100": 0.7037037037037037,
533
+ "save": false
534
+ },
535
+ {
536
+ "Epoch": 75,
537
+ "AP": 0.6762222731646145,
538
+ "AP75": 0.7936578273211936,
539
+ "AR100": 0.7111111111111111,
540
+ "save": false
541
+ },
542
+ {
543
+ "Epoch": 76,
544
+ "AP": 0.6632500347643039,
545
+ "AP75": 0.7936578273211936,
546
+ "AR100": 0.7,
547
+ "save": false
548
+ },
549
+ {
550
+ "Epoch": 77,
551
+ "AP": 0.6731373076544888,
552
+ "AP75": 0.8355950979713357,
553
+ "AR100": 0.711111111111111,
554
+ "save": false
555
+ },
556
+ {
557
+ "Epoch": 78,
558
+ "AP": 0.6800077272041837,
559
+ "AP75": 0.8391954580073393,
560
+ "AR100": 0.711111111111111,
561
+ "save": false
562
+ },
563
+ {
564
+ "Epoch": 79,
565
+ "AP": 0.6723982059281693,
566
+ "AP75": 0.7976182233607976,
567
+ "AR100": 0.7074074074074075,
568
+ "save": false
569
+ }
570
+ ],
571
+ "best_score": 0.739569498264011,
572
+ "epochs": 79
573
+ }