-
Notifications
You must be signed in to change notification settings - Fork 284
Object_Detection: NanoDet (GSOC) #87
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 122 commits
Commits
Show all changes
128 commits
Select commit
Hold shift + click to select a range
f795b61
onnx model
Sidd1609 699f796
Delete nanodet-plus-m-1.5x_416.onnx
Sidd1609 6900625
Create README.md
Sidd1609 1ef7375
Update README.md
Sidd1609 3ac0a0d
Update README.md
Sidd1609 1b234bc
Create LICENSE
Sidd1609 b73008e
Add files via upload
Sidd1609 4a0d6a2
Update README.md
Sidd1609 b3a5651
Create a
Sidd1609 3e6f5e4
Add files via upload
Sidd1609 92714d6
Delete a
Sidd1609 7d35748
Create a
Sidd1609 b894679
Add files via upload
Sidd1609 b10caaa
Delete a
Sidd1609 fa141ca
Update README.md
Sidd1609 3fbcb86
Update README.md
Sidd1609 143ca86
Update README.md
Sidd1609 e1919e8
Onnx model upload
Sidd1609 aed84f9
Update Nanodet_m_plus.py
Sidd1609 c48f69b
Updated Onnx model filename
Sidd1609 3fe9f4c
Updated onnx filename
Sidd1609 62307e0
Delete nanodet-plus-m-1.5x_416.onnx
Sidd1609 ff64e89
Update Nanodet_m_plus.py
Sidd1609 e1337cd
Update demo.py
Sidd1609 7b4f40d
Update Nanodet_m_plus.py
Sidd1609 cac8ffe
Update README.md
Sidd1609 358d2b9
Update demo.py
Sidd1609 aec81f5
Add files via upload
Sidd1609 11d50fe
Delete Nanodet_m_plus.py
Sidd1609 9270b75
Update README.md
Sidd1609 412c3d4
Add files via upload
Sidd1609 b0a71f1
Update README.md
Sidd1609 84b6d8c
Update README.md
Sidd1609 222e2fb
Update README.md
Sidd1609 c5ad1a2
Update README.md
Sidd1609 be8b038
Update README.md
Sidd1609 ac14b0f
Delete models/object_detection_nanodet/examples/results directory
Sidd1609 91fc7e0
Update NanodetPlus.py
Sidd1609 a751e1b
Update demo.py
Sidd1609 2a1fa09
Delete models/object_detection_nanodet/examples/images directory
Sidd1609 7497883
Create a
Sidd1609 2935d10
Add files via upload
Sidd1609 353e69e
Update demo.py
Sidd1609 b53d5de
Update README.md
Sidd1609 6310a63
Delete a
Sidd1609 b181441
Create a
Sidd1609 4dbea06
Update README.md
Sidd1609 b85d49a
Add files via upload
Sidd1609 1295da4
Delete a
Sidd1609 4b73a82
Add files via upload
Sidd1609 1a6978d
Update README.md
Sidd1609 db64edd
Update README.md
Sidd1609 9200cf9
Update README.md
Sidd1609 17f9b60
Update README.md
Sidd1609 4f63b3c
Update README.md
Sidd1609 faa278d
Update README.md
Sidd1609 9f6c7ef
Update README.md
Sidd1609 6639220
Update README.md
Sidd1609 d232f7a
Update README.md
Sidd1609 420136c
Update README.md
Sidd1609 222062f
Update README.md
Sidd1609 3321788
Update README.md
Sidd1609 aaaaa69
Update README.md
Sidd1609 187d312
Update README.md
Sidd1609 e9004d0
Update README.md
Sidd1609 1b7cbed
Update README.md
Sidd1609 e790d83
Update README.md
Sidd1609 10b8cbb
Update README.md
Sidd1609 d855618
Update README.md
Sidd1609 892caa7
Update README.md
Sidd1609 0a50e2f
Delete models/object_detection_nanodet/results directory
Sidd1609 47b5e87
Delete models/object_detection_nanodet/test_data directory
Sidd1609 b45156c
Create a
Sidd1609 5039a41
Update README.md
Sidd1609 80ca97b
Add files via upload
Sidd1609 e7683ff
Create a
Sidd1609 3cb09c7
Delete a
Sidd1609 bb892a9
Add files via upload
Sidd1609 c1a5a13
Delete a
Sidd1609 2f927ba
Update NanodetPlus.py
Sidd1609 fe09fb3
Update NanodetPlus.py
Sidd1609 8dcad48
Update demo.py
Sidd1609 f85d9de
Update README.md
Sidd1609 6b0aeed
Add files via upload
Sidd1609 cc9205a
Update README.md
Sidd1609 ad2eb61
Update README.md
Sidd1609 863db7c
Update README.md
Sidd1609 c972386
Update README.md
Sidd1609 a9a0e53
Update README.md
Sidd1609 ddc5bac
Update README.md
Sidd1609 49df0b2
updated model file
Sidd1609 1e6c7ed
Delete object_detection_nanodet-plus-m-1.5x-416.onnx
Sidd1609 62996b1
changed filename
Sidd1609 85a0c67
Create README.md
Sidd1609 3026875
Delete models/object_detection_YoloX directory
Sidd1609 2de5516
Merge branch 'opencv:master' into master
Sidd1609 7303584
Create README.md
Sidd1609 e711ba5
Delete models/object_detection_YoloX directory
Sidd1609 0f29c18
Create README.md
Sidd1609 e7591de
Create LICENSE
Sidd1609 e341cb4
Add files via upload
Sidd1609 a774c96
Update README.md
Sidd1609 79edc68
Add files via upload
Sidd1609 371cb24
adding model files
73efc6d
Create a
Sidd1609 044780e
Create a
Sidd1609 1f156b3
Update demo.py
Sidd1609 1384b60
Add files via upload
Sidd1609 1e26f81
Add files via upload
Sidd1609 1913fea
Delete a
Sidd1609 8e57a5a
Delete a
Sidd1609 f15ba57
Update README.md
Sidd1609 abb0486
Update README.md
Sidd1609 ec91188
Delete test1.jpg
Sidd1609 b97ccad
Delete test2.jpg
Sidd1609 f746a94
Create a
Sidd1609 747105e
Add files via upload
Sidd1609 b26c1e6
Delete a
Sidd1609 ede0f69
Update README.md
Sidd1609 de506f6
Update README.md
Sidd1609 349a43d
Update demo.py
Sidd1609 7c25d16
Delete models/object_detection_yolox directory
Sidd1609 82c5161
Update NanodetPlus.py
Sidd1609 22db1c9
Delete coco.names
Sidd1609 078c4eb
Update demo.py
Sidd1609 7120a8b
Update demo.py
Sidd1609 bddffc7
adding quantised model
Sidd1609 cc5f1db
Merge branch 'opencv:master' into gsoc_nanodet
Sidd1609 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,202 @@ | ||
|
|
||
| Apache License | ||
| Version 2.0, January 2004 | ||
| http://www.apache.org/licenses/ | ||
|
|
||
| TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||
|
|
||
| 1. Definitions. | ||
|
|
||
| "License" shall mean the terms and conditions for use, reproduction, | ||
| and distribution as defined by Sections 1 through 9 of this document. | ||
|
|
||
| "Licensor" shall mean the copyright owner or entity authorized by | ||
| the copyright owner that is granting the License. | ||
|
|
||
| "Legal Entity" shall mean the union of the acting entity and all | ||
| other entities that control, are controlled by, or are under common | ||
| control with that entity. For the purposes of this definition, | ||
| "control" means (i) the power, direct or indirect, to cause the | ||
| direction or management of such entity, whether by contract or | ||
| otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||
| outstanding shares, or (iii) beneficial ownership of such entity. | ||
|
|
||
| "You" (or "Your") shall mean an individual or Legal Entity | ||
| exercising permissions granted by this License. | ||
|
|
||
| "Source" form shall mean the preferred form for making modifications, | ||
| including but not limited to software source code, documentation | ||
| source, and configuration files. | ||
|
|
||
| "Object" form shall mean any form resulting from mechanical | ||
| transformation or translation of a Source form, including but | ||
| not limited to compiled object code, generated documentation, | ||
| and conversions to other media types. | ||
|
|
||
| "Work" shall mean the work of authorship, whether in Source or | ||
| Object form, made available under the License, as indicated by a | ||
| copyright notice that is included in or attached to the work | ||
| (an example is provided in the Appendix below). | ||
|
|
||
| "Derivative Works" shall mean any work, whether in Source or Object | ||
| form, that is based on (or derived from) the Work and for which the | ||
| editorial revisions, annotations, elaborations, or other modifications | ||
| represent, as a whole, an original work of authorship. For the purposes | ||
| of this License, Derivative Works shall not include works that remain | ||
| separable from, or merely link (or bind by name) to the interfaces of, | ||
| the Work and Derivative Works thereof. | ||
|
|
||
| "Contribution" shall mean any work of authorship, including | ||
| the original version of the Work and any modifications or additions | ||
| to that Work or Derivative Works thereof, that is intentionally | ||
| submitted to Licensor for inclusion in the Work by the copyright owner | ||
| or by an individual or Legal Entity authorized to submit on behalf of | ||
| the copyright owner. For the purposes of this definition, "submitted" | ||
| means any form of electronic, verbal, or written communication sent | ||
| to the Licensor or its representatives, including but not limited to | ||
| communication on electronic mailing lists, source code control systems, | ||
| and issue tracking systems that are managed by, or on behalf of, the | ||
| Licensor for the purpose of discussing and improving the Work, but | ||
| excluding communication that is conspicuously marked or otherwise | ||
| designated in writing by the copyright owner as "Not a Contribution." | ||
|
|
||
| "Contributor" shall mean Licensor and any individual or Legal Entity | ||
| on behalf of whom a Contribution has been received by Licensor and | ||
| subsequently incorporated within the Work. | ||
|
|
||
| 2. Grant of Copyright License. Subject to the terms and conditions of | ||
| this License, each Contributor hereby grants to You a perpetual, | ||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
| copyright license to reproduce, prepare Derivative Works of, | ||
| publicly display, publicly perform, sublicense, and distribute the | ||
| Work and such Derivative Works in Source or Object form. | ||
|
|
||
| 3. Grant of Patent License. Subject to the terms and conditions of | ||
| this License, each Contributor hereby grants to You a perpetual, | ||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
| (except as stated in this section) patent license to make, have made, | ||
| use, offer to sell, sell, import, and otherwise transfer the Work, | ||
| where such license applies only to those patent claims licensable | ||
| by such Contributor that are necessarily infringed by their | ||
| Contribution(s) alone or by combination of their Contribution(s) | ||
| with the Work to which such Contribution(s) was submitted. If You | ||
| institute patent litigation against any entity (including a | ||
| cross-claim or counterclaim in a lawsuit) alleging that the Work | ||
| or a Contribution incorporated within the Work constitutes direct | ||
| or contributory patent infringement, then any patent licenses | ||
| granted to You under this License for that Work shall terminate | ||
| as of the date such litigation is filed. | ||
|
|
||
| 4. Redistribution. You may reproduce and distribute copies of the | ||
| Work or Derivative Works thereof in any medium, with or without | ||
| modifications, and in Source or Object form, provided that You | ||
| meet the following conditions: | ||
|
|
||
| (a) You must give any other recipients of the Work or | ||
| Derivative Works a copy of this License; and | ||
|
|
||
| (b) You must cause any modified files to carry prominent notices | ||
| stating that You changed the files; and | ||
|
|
||
| (c) You must retain, in the Source form of any Derivative Works | ||
| that You distribute, all copyright, patent, trademark, and | ||
| attribution notices from the Source form of the Work, | ||
| excluding those notices that do not pertain to any part of | ||
| the Derivative Works; and | ||
|
|
||
| (d) If the Work includes a "NOTICE" text file as part of its | ||
| distribution, then any Derivative Works that You distribute must | ||
| include a readable copy of the attribution notices contained | ||
| within such NOTICE file, excluding those notices that do not | ||
| pertain to any part of the Derivative Works, in at least one | ||
| of the following places: within a NOTICE text file distributed | ||
| as part of the Derivative Works; within the Source form or | ||
| documentation, if provided along with the Derivative Works; or, | ||
| within a display generated by the Derivative Works, if and | ||
| wherever such third-party notices normally appear. The contents | ||
| of the NOTICE file are for informational purposes only and | ||
| do not modify the License. You may add Your own attribution | ||
| notices within Derivative Works that You distribute, alongside | ||
| or as an addendum to the NOTICE text from the Work, provided | ||
| that such additional attribution notices cannot be construed | ||
| as modifying the License. | ||
|
|
||
| You may add Your own copyright statement to Your modifications and | ||
| may provide additional or different license terms and conditions | ||
| for use, reproduction, or distribution of Your modifications, or | ||
| for any such Derivative Works as a whole, provided Your use, | ||
| reproduction, and distribution of the Work otherwise complies with | ||
| the conditions stated in this License. | ||
|
|
||
| 5. Submission of Contributions. Unless You explicitly state otherwise, | ||
| any Contribution intentionally submitted for inclusion in the Work | ||
| by You to the Licensor shall be under the terms and conditions of | ||
| this License, without any additional terms or conditions. | ||
| Notwithstanding the above, nothing herein shall supersede or modify | ||
| the terms of any separate license agreement you may have executed | ||
| with Licensor regarding such Contributions. | ||
|
|
||
| 6. Trademarks. This License does not grant permission to use the trade | ||
| names, trademarks, service marks, or product names of the Licensor, | ||
| except as required for reasonable and customary use in describing the | ||
| origin of the Work and reproducing the content of the NOTICE file. | ||
|
|
||
| 7. Disclaimer of Warranty. Unless required by applicable law or | ||
| agreed to in writing, Licensor provides the Work (and each | ||
| Contributor provides its Contributions) on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||
| implied, including, without limitation, any warranties or conditions | ||
| of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||
| PARTICULAR PURPOSE. You are solely responsible for determining the | ||
| appropriateness of using or redistributing the Work and assume any | ||
| risks associated with Your exercise of permissions under this License. | ||
|
|
||
| 8. Limitation of Liability. In no event and under no legal theory, | ||
| whether in tort (including negligence), contract, or otherwise, | ||
| unless required by applicable law (such as deliberate and grossly | ||
| negligent acts) or agreed to in writing, shall any Contributor be | ||
| liable to You for damages, including any direct, indirect, special, | ||
| incidental, or consequential damages of any character arising as a | ||
| result of this License or out of the use or inability to use the | ||
| Work (including but not limited to damages for loss of goodwill, | ||
| work stoppage, computer failure or malfunction, or any and all | ||
| other commercial damages or losses), even if such Contributor | ||
| has been advised of the possibility of such damages. | ||
|
|
||
| 9. Accepting Warranty or Additional Liability. While redistributing | ||
| the Work or Derivative Works thereof, You may choose to offer, | ||
| and charge a fee for, acceptance of support, warranty, indemnity, | ||
| or other liability obligations and/or rights consistent with this | ||
| License. However, in accepting such obligations, You may act only | ||
| on Your own behalf and on Your sole responsibility, not on behalf | ||
| of any other Contributor, and only if You agree to indemnify, | ||
| defend, and hold each Contributor harmless for any liability | ||
| incurred by, or claims asserted against, such Contributor by reason | ||
| of your accepting any such warranty or additional liability. | ||
|
|
||
| END OF TERMS AND CONDITIONS | ||
|
|
||
| APPENDIX: How to apply the Apache License to your work. | ||
|
|
||
| To apply the Apache License to your work, attach the following | ||
| boilerplate notice, with the fields enclosed by brackets "[]" | ||
| replaced with your own identifying information. (Don't include | ||
| the brackets!) The text should be enclosed in the appropriate | ||
| comment syntax for the file format. We also recommend that a | ||
| file or class name and description of purpose be included on the | ||
| same "printed page" as the copyright notice for easier | ||
| identification within third-party archives. | ||
|
|
||
| Copyright [yyyy] [name of copyright owner] | ||
|
|
||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||
| you may not use this file except in compliance with the License. | ||
| You may obtain a copy of the License at | ||
|
|
||
| http://www.apache.org/licenses/LICENSE-2.0 | ||
|
|
||
| Unless required by applicable law or agreed to in writing, software | ||
| distributed under the License is distributed on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| See the License for the specific language governing permissions and | ||
| limitations under the License. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,138 @@ | ||
| import cv2 | ||
| import numpy as np | ||
|
|
||
| class NanoDet(): | ||
| def __init__(self, modelPath, prob_threshold=0.35, iou_threshold=0.6): | ||
| with open('coco.names', 'rt') as f: | ||
| self.classes = f.read().rstrip('\n').split('\n') | ||
|
|
||
| self.num_classes = len(self.classes) | ||
| self.strides = (8, 16, 32, 64) | ||
| self.image_shape = (416, 416) | ||
| self.reg_max = 7 | ||
| self.prob_threshold = prob_threshold | ||
| self.iou_threshold = iou_threshold | ||
| self.project = np.arange(self.reg_max + 1) | ||
| self.mean = np.array([103.53, 116.28, 123.675], dtype=np.float32).reshape(1, 1, 3) | ||
| self.std = np.array([57.375, 57.12, 58.395], dtype=np.float32).reshape(1, 1, 3) | ||
| self.net = cv2.dnn.readNet(modelPath) | ||
|
|
||
| self.anchors_mlvl = [] | ||
| for i in range(len(self.strides)): | ||
| featmap_size = (int(self.image_shape[0] / self.strides[i]), int(self.image_shape[1] / self.strides[i])) | ||
| stride = self.strides[i] | ||
| feat_h, feat_w = featmap_size | ||
| shift_x = np.arange(0, feat_w) * stride | ||
| shift_y = np.arange(0, feat_h) * stride | ||
| xv, yv = np.meshgrid(shift_x, shift_y) | ||
| xv = xv.flatten() | ||
| yv = yv.flatten() | ||
| cx = xv + 0.5 * (stride-1) | ||
| cy = yv + 0.5 * (stride - 1) | ||
| #anchors = np.stack((cx, cy), axis=-1) | ||
| anchors = np.column_stack((cx, cy)) | ||
| self.anchors_mlvl.append(anchors) | ||
|
|
||
| def softmax_func(self,x, axis=0): | ||
| x_exp = np.exp(x) | ||
| x_sum = np.sum(x_exp, axis=axis, keepdims=True) | ||
| s = x_exp / x_sum | ||
| return s | ||
|
|
||
| def pre_process(self, img): | ||
| img = img.astype(np.float32) | ||
| img = (img - self.mean) / self.std | ||
| blob = cv2.dnn.blobFromImage(img) | ||
| return blob | ||
|
|
||
| def infer(self, srcimg, keep_ratio=True): | ||
| top, left, newh, neww = 0, 0, self.image_shape[0], self.image_shape[1] | ||
| if keep_ratio and srcimg.shape[0] != srcimg.shape[1]: | ||
| hw_scale = srcimg.shape[0] / srcimg.shape[1] | ||
| if hw_scale > 1: | ||
| newh, neww = self.image_shape[0], int(self.image_shape[1] / hw_scale) | ||
| img = cv2.resize(srcimg, (neww, newh), interpolation=cv2.INTER_AREA) | ||
| left = int((self.image_shape[1] - neww) * 0.5) | ||
| img = cv2.copyMakeBorder(img, 0, 0, left, self.image_shape[1] - neww - left, cv2.BORDER_CONSTANT, | ||
| value=0) # add border | ||
| else: | ||
| newh, neww = int(self.image_shape[0] * hw_scale), self.image_shape[1] | ||
| img = cv2.resize(srcimg, (neww, newh), interpolation=cv2.INTER_AREA) | ||
| top = int((self.image_shape[0] - newh) * 0.5) | ||
| img = cv2.copyMakeBorder(img, top, self.image_shape[0] - newh - top, 0, 0, cv2.BORDER_CONSTANT, value=0) | ||
| else: | ||
| img = cv2.resize(srcimg, self.image_shape, interpolation=cv2.INTER_AREA) | ||
|
|
||
| blob = self.pre_process(img) | ||
|
Sidd1609 marked this conversation as resolved.
Outdated
|
||
| self.net.setInput(blob) | ||
| outs = self.net.forward(self.net.getUnconnectedOutLayersNames()) | ||
| det_bboxes, det_conf, det_classid = self.post_process(outs) | ||
| ratioh,ratiow = srcimg.shape[0]/newh,srcimg.shape[1]/neww | ||
|
|
||
| return left, top, ratioh, ratiow, det_bboxes, det_conf, det_classid | ||
|
Sidd1609 marked this conversation as resolved.
Outdated
|
||
|
|
||
|
|
||
| def post_process(self, preds): | ||
| cls_scores, bbox_preds = preds[::2], preds[1::2] | ||
| rescale = False | ||
| scale_factor = 1 | ||
| bboxes_mlvl = [] | ||
| scores_mlvl = [] | ||
| for stride, cls_score, bbox_pred, anchors in zip(self.strides, cls_scores, bbox_preds, self.anchors_mlvl): | ||
| if cls_score.ndim==3: | ||
| cls_score = cls_score.squeeze(axis=0) | ||
| if bbox_pred.ndim==3: | ||
| bbox_pred = bbox_pred.squeeze(axis=0) | ||
| bbox_pred = self.softmax_func(bbox_pred.reshape(-1, self.reg_max + 1), axis=1) | ||
| bbox_pred = np.dot(bbox_pred, self.project).reshape(-1,4) | ||
| bbox_pred *= stride | ||
|
|
||
| nms_pre = 1000 | ||
| if nms_pre > 0 and cls_score.shape[0] > nms_pre: | ||
| max_scores = cls_score.max(axis=1) | ||
| topk_inds = max_scores.argsort()[::-1][0:nms_pre] | ||
| anchors = anchors[topk_inds, :] | ||
| bbox_pred = bbox_pred[topk_inds, :] | ||
| cls_score = cls_score[topk_inds, :] | ||
|
|
||
| points = anchors | ||
| distance = bbox_pred | ||
| max_shape=self.image_shape | ||
| x1 = points[:, 0] - distance[:, 0] | ||
| y1 = points[:, 1] - distance[:, 1] | ||
| x2 = points[:, 0] + distance[:, 2] | ||
| y2 = points[:, 1] + distance[:, 3] | ||
|
|
||
| if max_shape is not None: | ||
| x1 = np.clip(x1, 0, max_shape[1]) | ||
| y1 = np.clip(y1, 0, max_shape[0]) | ||
| x2 = np.clip(x2, 0, max_shape[1]) | ||
| y2 = np.clip(y2, 0, max_shape[0]) | ||
|
|
||
| #bboxes = np.stack([x1, y1, x2, y2], axis=-1) | ||
| bboxes = np.column_stack([x1, y1, x2, y2]) | ||
| bboxes_mlvl.append(bboxes) | ||
| scores_mlvl.append(cls_score) | ||
|
|
||
| bboxes_mlvl = np.concatenate(bboxes_mlvl, axis=0) | ||
| if rescale: | ||
| bboxes_mlvl /= scale_factor | ||
| scores_mlvl = np.concatenate(scores_mlvl, axis=0) | ||
| bboxes_wh = bboxes_mlvl.copy() | ||
| bboxes_wh[:, 2:4] = bboxes_wh[:, 2:4] - bboxes_wh[:, 0:2] | ||
| classIds = np.argmax(scores_mlvl, axis=1) | ||
| confidences = np.max(scores_mlvl, axis=1) | ||
|
|
||
| indices = cv2.dnn.NMSBoxes(bboxes_wh.tolist(), confidences.tolist(), self.prob_threshold, self.iou_threshold) | ||
|
|
||
| if len(indices)>0: | ||
| det_bboxes = bboxes_mlvl[indices[:]] | ||
| det_conf = confidences[indices[:]] | ||
| det_classid = classIds[indices[:]] | ||
|
|
||
| else: | ||
| det_bboxes = np.array([]) | ||
| det_conf = np.array([]) | ||
| det_classid = np.array([]) | ||
|
|
||
| return det_bboxes.astype(np.float32), det_conf, det_classid | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.