From 8a56d64275e41060401133fba9dbf75a27e01fbf Mon Sep 17 00:00:00 2001 From: Elijah Harmon Date: Tue, 6 Sep 2022 14:37:12 -0400 Subject: [PATCH] Updating yolo libs --- models/common.py | 31 ++++++++++-------- utils/__pycache__/__init__.cpython-39.pyc | Bin 1014 -> 2093 bytes .../__pycache__/augmentations.cpython-39.pyc | Bin 9084 -> 13475 bytes utils/__pycache__/autoanchor.cpython-39.pyc | Bin 6497 -> 6505 bytes utils/__pycache__/dataloaders.cpython-39.pyc | Bin 37571 -> 39740 bytes utils/__pycache__/downloads.cpython-39.pyc | Bin 4939 -> 5405 bytes utils/__pycache__/general.cpython-39.pyc | Bin 35463 -> 37059 bytes utils/__pycache__/metrics.cpython-39.pyc | Bin 11375 -> 11601 bytes utils/__pycache__/plots.cpython-39.pyc | Bin 18464 -> 20099 bytes utils/__pycache__/torch_utils.cpython-39.pyc | Bin 13920 -> 16740 bytes utils/benchmarks.py | 8 +++-- utils/dataloaders.py | 15 +++++---- utils/general.py | 3 ++ utils/loggers/__init__.py | 4 ++- 14 files changed, 38 insertions(+), 23 deletions(-) diff --git a/models/common.py b/models/common.py index d308244..7ac3a4a 100644 --- a/models/common.py +++ b/models/common.py @@ -354,6 +354,7 @@ class DetectMultiBackend(nn.Module): import onnxruntime providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] if cuda else ['CPUExecutionProvider'] session = onnxruntime.InferenceSession(w, providers=providers) + output_names = [x.name for x in session.get_outputs()] meta = session.get_modelmeta().custom_metadata_map # metadata if 'stride' in meta: stride, names = int(meta['stride']), eval(meta['names']) @@ -372,9 +373,7 @@ class DetectMultiBackend(nn.Module): batch_size = batch_dim.get_length() executable_network = ie.compile_model(network, device_name="CPU") # device_name="MYRIAD" for Intel NCS2 output_layer = next(iter(executable_network.outputs)) - meta = Path(w).with_suffix('.yaml') - if meta.exists(): - stride, names = self._load_metadata(meta) # load metadata + stride, names = self._load_metadata(Path(w).with_suffix('.yaml')) # load metadata elif engine: # TensorRT LOGGER.info(f'Loading {w} for TensorRT inference...') import tensorrt as trt # https://developer.nvidia.com/nvidia-tensorrt-download @@ -458,7 +457,7 @@ class DetectMultiBackend(nn.Module): self.__dict__.update(locals()) # assign all variables to self - def forward(self, im, augment=False, visualize=False, val=False): + def forward(self, im, augment=False, visualize=False): # YOLOv5 MultiBackend inference b, ch, h, w = im.shape # batch, channel, height, width if self.fp16 and im.dtype != torch.float16: @@ -466,17 +465,15 @@ class DetectMultiBackend(nn.Module): if self.pt: # PyTorch y = self.model(im, augment=augment, visualize=visualize) if augment or visualize else self.model(im) - if isinstance(y, tuple): - y = y[0] elif self.jit: # TorchScript - y = self.model(im)[0] + y = self.model(im) elif self.dnn: # ONNX OpenCV DNN im = im.cpu().numpy() # torch to numpy self.net.setInput(im) y = self.net.forward() elif self.onnx: # ONNX Runtime im = im.cpu().numpy() # torch to numpy - y = self.session.run([self.session.get_outputs()[0].name], {self.session.get_inputs()[0].name: im})[0] + y = self.session.run(self.output_names, {self.session.get_inputs()[0].name: im}) elif self.xml: # OpenVINO im = im.cpu().numpy() # FP32 y = self.executable_network([im])[self.output_layer] @@ -523,9 +520,13 @@ class DetectMultiBackend(nn.Module): y = (y.astype(np.float32) - zero_point) * scale # re-scale y[..., :4] *= [w, h, w, h] # xywh normalized to pixels - if isinstance(y, np.ndarray): - y = torch.tensor(y, device=self.device) - return (y, []) if val else y + if isinstance(y, (list, tuple)): + return self.from_numpy(y[0]) if len(y) == 1 else [self.from_numpy(x) for x in y] + else: + return self.from_numpy(y) + + def from_numpy(self, x): + return torch.from_numpy(x).to(self.device) if isinstance(x, np.ndarray) else x def warmup(self, imgsz=(1, 3, 640, 640)): # Warmup model by running inference once @@ -548,10 +549,12 @@ class DetectMultiBackend(nn.Module): return pt, jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs @staticmethod - def _load_metadata(f='path/to/meta.yaml'): + def _load_metadata(f=Path('path/to/meta.yaml')): # Load metadata from meta.yaml if it exists - d = yaml_load(f) - return d['stride'], d['names'] # assign stride, names + if f.exists(): + d = yaml_load(f) + return d['stride'], d['names'] # assign stride, names + return None, None class AutoShape(nn.Module): diff --git a/utils/__pycache__/__init__.cpython-39.pyc b/utils/__pycache__/__init__.cpython-39.pyc index 5abac918578b3444b9e220237f8cee54eeead747..c224a7303bd0d219e28840a6287562b5ab8b4356 100644 GIT binary patch literal 2093 zcmZuyOK%%D5GJ{+)oLyIA?MYm5A}(vP35$Q76^f5}=ofFcpagV#aaYFkJXHQ6X zX?o2oR21hMQ5vZzh@)wsqAd0P0nKDPM7lUE*xZAee+onput@rhH#p-K=meX*23BnD z@Vc?)f(=hMcI46bhoP7#O+p4Y=L311TQGBcb4g3$!;_wnS9H5ewUy+fF4J}{;$2yT z1Fwh#M99UXtviFKxsdrl#L+nLZ{NN>c#wrfB2twP9!BcNVmNp#v#|)(*WV28Kl<{1 zlngU9Fs~i>KEBuYdy^yW&Nof;!njAL?Ms(?b8$#PJ|D>AG@fHT&}WH^@vlpzGw00* z>B3ewd>{N1()U+jJGZsIXzR5+L{;;FJR)z5y$wvs)OT@?TW+DS4R_}YX?DG2;ERJ2*of6_h%j=t}{0Q5pjs{wBb{Z4k=b?CyZg2 zd6sLLZ*Sm_htMp}d=<#AWY?tsiCfVUfw11pUOb2|c^@yl2SfpSzX67&x%R@YSjo=V zIYhO@%CG=OTRSR{BcZenORk;$=d+auBFWOO1sLv05%4G-X=lfeA_3vm1i?Vz>4wymZN z%4WHIgIw;HU_Y0wzHC%0sm<4_m9oy;eEkLZ2USz!SIU)H%@~gx5bdkm)3vQV5$;1I zJGoHBq}S_7EO1ByFGPvIo25#(XS@{8ibx96ZL|Z)FphHVM!6qmaWI6&)q;)%t;gr$ zAPNOkq%+B}_2~Me$46=pl85R#kMcw3GEq{9{_;U26*K}r0l4ImuBl7~vG&kczsQ4;=r_Yy1k%q6 zH7S&Cgp&gBEK=27)%61*hZ!{dFHrF&^nf&<1j8x8xG3=+A4p4de$IFulGqiMd- zdraN5(oBhAmhGEg1HLf-90*}9bE(U2&?c-7%qDZ_vSmX@^yn%S>m6n@54xlL7EX8R zPPeY>zR$A|8=(p8p^BrSybfZ$x`mNGR1ZX$$pEl3t<6-Yxxe7mWk=NR=B%6E#ja=m NleP^$S?y)l`xoBc>>>aF delta 632 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 delta 3175 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 diff --git a/utils/__pycache__/dataloaders.cpython-39.pyc b/utils/__pycache__/dataloaders.cpython-39.pyc index 9f95d28c80dc11949278612a0a6bb755ec36918c..af0308a8ea4527e1abb9bb3ef62f1cc3faa44ec3 100644 GIT binary patch delta 21395 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 NX@%mNzFqjA{||>-;fMeL delta 19451 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 KSzTjb!~X|fD&!FW diff --git a/utils/__pycache__/downloads.cpython-39.pyc b/utils/__pycache__/downloads.cpython-39.pyc index 3848d8fdf63969ba73759ecb4fd1c4eb8b99b6fe..6f887e43025a80da40bbd52594d5919b272e24aa 100644 GIT binary patch delta 2496 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 diff --git a/utils/__pycache__/general.cpython-39.pyc b/utils/__pycache__/general.cpython-39.pyc index c8f883c790ce0a357c3127c789786e4480948485..6371f70197d5dcf0692e31b92d0d03c9244af1ba 100644 GIT binary patch delta 18883 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 LqlJ=ql9GP|Fb&(d delta 4224 zcmZu!eQX@X6`z^i+uK{;ozLg<`5ZgR<=dBpV4F(N;Dme{ss=+E)4<8(vcB1~&%Q5a z*NJ2Ha;g$&)e;fdsx3uTZM9XEmKG$JKU?}iE0v;9S_#6crRAd^^t*o{@eh4(HaL!( zTg`9Zym|BH&D;0h%)Ofb_x*7*7BdL^_&cvn?78iUcprV~i5>e|Di56}`8K|dhq->9 z=A*oy$9Np57;onZ7>nOYcn43OCp>wM<=c6VckwigCwMo{z<3AW&U^S8;3WAD-pl)d z>f}55TD}gbl%?|Z=O}M0F`nfcfYSw>jmY7f_~t}OQ(zQWx62-2!)z=G!a;@wX3TM4X+Yhz& zGD2MHQV!1}jI$E!AugFFGincMQkPxjE687u-8LS?Nx&)(vV;vvk+M% z3kH}LUa5=20-&$qhTZVhIhr)MZBgpr;YVQI7VHuPoal6HSu7-%(Rt(osP7?x#PaA3 zl-xjv^cTNQN6m1e3vq71u3^Ps!@Q-;s7>7sFSNrR5)NIY<4QBqG@5NrhpU{Uhsc8` z##uAkjJXjvI>VZASBG7_=_K7a6qL{m!ydS^(^Xx=jib44ti(d_=Am1OLWW5#Bge^f zYW2uPdf=h2fSw%fb)C9XI!2ZzMRI+em(9s~&8!4vND1ceK_#F1e@#%n8ii8hS#Kh}W%rmL zEL4=GAB6FT1t|&*>y-U@_#zkS{3s*G9+PF~D6*5EWpX0F^Qd1eBr2a)00vJLw;uoPx4M!In{C_;y13syC!Kjfko2Le;fMUAN6_WLS&(x z_n?~NgcB8>a|$K3(-2YSRf$p+t4?HFDXH`bpkLCO3Yr<<>Lji<@iU=m6^046kzvqsGb-UDO+ zI8dvzqu0(J2=_gi{dCN0We&l4{$i$|>fV1dcdeJ-eHnapOw3yO$i2ei<)UM8Z@Oor z_t|uAIG4$XZOfdfi&_xt81;S_>id)lM*GlEdSvbMudC=*-)boj! zYR*BR8@A;X<|^idRSD=b0Ufr@Qx;4TQ1;<0ELI@J{K())(r`GD=zXSNsL$h}S5UNt0ZKZJ* zhuq1~EH&WKsK(R}8DlhfAg|unBJBOm24+~AMrp!(bt*ms)ol2R?Fi|*91C*kMkh8-`mOg^@3zc?sOSVhP8kyqV+Rk+T*UiT@0PnKus??& z>&`qSL{=svGOV~4g)SU8*@-+hNk!Himn;!#Q4&oz8BcKRpk*&X3l^wF*RG8 z5tH7A^$*Yk-oxw9W*RW!v*KxJQ_zO;s+g(|iA`QdwzFsTp*}HDpDRGUyW;K19;7dO zpUECREXyzI7Z!pHKDjsQD>M zP9l64;TeSQ0r)DEOfD`XNyp$)wS*%-KsbOrW)4Cd^4SEuCx*l?aOC>Uh!XHLv;h|+ z@m+MYqKMMclba@J>(?kRlOSA$YfN>vDvkroSBsT$BNtn>ocIxn{}|x~gr6Y%6yZgL zpCSAlAa6j>!#xvspO1hah9tSlFz`?|aI@Kq=Al!F9;I=mkM@12swqXh?s;44_u)WJ zS>c{nkfG+4(^G>8L(&&F+Pklvp2E*Ki28#IdV=aSNyQcK_|_dXjczmtWKFx`QDkMa69;IgfGNBg%P7GJ=z#{l3AejHxDZqH6M zDs{&W4)ZdOcOu-3AU~W;osVPpO9)@~UhB`czJlaa0J(@5LHbSvdDq^D)P97o13=)+ z1=sHkvQ|aSt-u>bx8Yw5!qQM-`oM9!Sd#6MH6{vGBo2>2$@yrtSSZelQ?p_O;-^5Up*IiazUkr8nzkhw%QO4;Qu^t%0Up}_0KLP2~V zr#|V~J8x=X*ohegtO!BAMUj$TIfm3N2;&GZBV0x(A-s-o1p&iBpnWSMN}ARNJYOHK r*7Z`WHZDFCIInKi=P3 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 delta 7860 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 floor for x in metrics if pd.notna(x)), f'HARD FAIL: mAP50-95 < floor {floor}' return py @@ -141,7 +145,7 @@ def parse_opt(): parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference') parser.add_argument('--test', action='store_true', help='test exports only') parser.add_argument('--pt-only', action='store_true', help='test PyTorch only') - parser.add_argument('--hard-fail', action='store_true', help='throw error on benchmark failure') + parser.add_argument('--hard-fail', nargs='?', const=True, default=False, help='Exception on error or < min metric') opt = parser.parse_args() opt.data = check_yaml(opt.data) # check YAML print_args(vars(opt)) diff --git a/utils/dataloaders.py b/utils/dataloaders.py index 38ae339..c1ad1f1 100644 --- a/utils/dataloaders.py +++ b/utils/dataloaders.py @@ -187,7 +187,7 @@ class _RepeatSampler: class LoadImages: # YOLOv5 image/video dataloader, i.e. `python detect.py --source image.jpg/vid.mp4` - def __init__(self, path, img_size=640, stride=32, auto=True, transforms=None): + def __init__(self, path, img_size=640, stride=32, auto=True, transforms=None, vid_stride=1): files = [] for p in sorted(path) if isinstance(path, (list, tuple)) else [path]: p = str(Path(p).resolve()) @@ -212,6 +212,7 @@ class LoadImages: self.mode = 'image' self.auto = auto self.transforms = transforms # optional + self.vid_stride = vid_stride # video frame-rate stride if any(videos): self._new_video(videos[0]) # new video else: @@ -232,6 +233,7 @@ class LoadImages: # Read video self.mode = 'video' ret_val, im0 = self.cap.read() + self.cap.set(cv2.CAP_PROP_POS_FRAMES, self.vid_stride * (self.frame + 1)) # read at vid_stride while not ret_val: self.count += 1 self.cap.release() @@ -242,7 +244,7 @@ class LoadImages: ret_val, im0 = self.cap.read() self.frame += 1 - # im0 = self._cv2_rotate(im0) # for use if cv2 auto rotation is False + # im0 = self._cv2_rotate(im0) # for use if cv2 autorotation is False s = f'video {self.count + 1}/{self.nf} ({self.frame}/{self.frames}) {path}: ' else: @@ -265,7 +267,7 @@ class LoadImages: # Create a new video capture object self.frame = 0 self.cap = cv2.VideoCapture(path) - self.frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT)) + self.frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT) / self.vid_stride) self.orientation = int(self.cap.get(cv2.CAP_PROP_ORIENTATION_META)) # rotation degrees # self.cap.set(cv2.CAP_PROP_ORIENTATION_AUTO, 0) # disable https://github.com/ultralytics/yolov5/issues/8493 @@ -285,11 +287,12 @@ class LoadImages: class LoadStreams: # YOLOv5 streamloader, i.e. `python detect.py --source 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP streams` - def __init__(self, sources='streams.txt', img_size=640, stride=32, auto=True, transforms=None): + def __init__(self, sources='streams.txt', img_size=640, stride=32, auto=True, transforms=None, vid_stride=1): torch.backends.cudnn.benchmark = True # faster for fixed-size inference self.mode = 'stream' self.img_size = img_size self.stride = stride + self.vid_stride = vid_stride # video frame-rate stride sources = Path(sources).read_text().rsplit() if Path(sources).is_file() else [sources] n = len(sources) self.sources = [clean_str(x) for x in sources] # clean source names for later @@ -329,11 +332,11 @@ class LoadStreams: def update(self, i, cap, stream): # Read stream `i` frames in daemon thread - n, f, read = 0, self.frames[i], 1 # frame number, frame array, inference every 'read' frame + n, f = 0, self.frames[i] # frame number, frame array while cap.isOpened() and n < f: n += 1 cap.grab() # .read() = .grab() followed by .retrieve() - if n % read == 0: + if n % self.vid_stride == 0: success, im = cap.retrieve() if success: self.imgs[i] = im diff --git a/utils/general.py b/utils/general.py index 25a1a14..cae63fd 100644 --- a/utils/general.py +++ b/utils/general.py @@ -813,6 +813,9 @@ def non_max_suppression(prediction, list of detections, on (n,6) tensor per image [xyxy, conf, cls] """ + if isinstance(prediction, (list, tuple)): # YOLOv5 model in validation model, output = (inference_out, loss_out) + prediction = prediction[0] # select only inference output + bs = prediction.shape[0] # batch size nc = prediction.shape[2] - 5 # number of classes xc = prediction[..., 4] > conf_thres # candidates diff --git a/utils/loggers/__init__.py b/utils/loggers/__init__.py index 1aa8427..3aee358 100644 --- a/utils/loggers/__init__.py +++ b/utils/loggers/__init__.py @@ -233,7 +233,9 @@ class Loggers(): self.wandb.finish_run() if self.clearml and not self.opt.evolve: - self.clearml.task.update_output_model(model_path=str(best if best.exists() else last), name='Best Model') + self.clearml.task.update_output_model(model_path=str(best if best.exists() else last), + name='Best Model', + auto_delete_file=False) def on_params_update(self, params: dict): # Update hyperparams or configs of the experiment