opencv/modules/dnn/test
Abduragim Shtanchaev a8d1373919
Merge pull request #25794 from Abdurrahheem:ash/yolov10-support
Add sample support of YOLOv9 and YOLOv10 in OpenCV #25794

This PR adds sample support of  [`YOLOv9`](https://github.com/WongKinYiu/yolov9) and [`YOLOv10`](https://github.com/THU-MIG/yolov10/tree/main)) in OpenCV. Models for this test are located in this [PR](https://github.com/opencv/opencv_extra/pull/1186). 

**Running YOLOv10 using OpenCV.** 
1. In oder to run `YOLOv10` one needs to cut off postporcessing with dynamic shapes from torch and then convert it to ONNX. If someone is looking for ready solution, there is [this forked branch](https://github.com/Abdurrahheem/yolov10/tree/ash/opencv-export) from official YOLOv10.  Particularty follow this proceduce. 

```bash
git clone git@github.com:Abdurrahheem/yolov10.git
conda create -n yolov10 python=3.9
conda activate yolov10
pip install -r requirements.txt
python export_opencv.py --model=<model-name> --imgsz=<input-img-size>
```
By default `model="yolov10s"` and `imgsz=(480,640)`. This will generate file `yolov10s.onnx`, which can be use for inference in OpenCV

2. For inference part on OpenCV.  one can use `yolo_detector.cpp` [sample](https://github.com/opencv/opencv/blob/4.x/samples/dnn/yolo_detector.cpp). If you have followed above exporting procedure, then you can use following command to run the model. 

``` bash
build opencv from source 
cd build 
./bin/example_dnn_yolo_detector --model=<path-to-yolov10s.onnx-file> --yolo=yolov10 --width=640 --height=480 --input=<path-to-image> --scale=0.003921568627 --padvalue=114
```
If you do not specify `--input` argument, OpenCV will grab first camera that is avaliable on your platform. 
For more deatils on how to run the `yolo_detector.cpp` file see this [guide](https://docs.opencv.org/4.x/da/d9d/tutorial_dnn_yolo.html#autotoc_md443) 


**Running YOLOv9 using OpenCV**

1. Export model following [official guide](https://github.com/WongKinYiu/yolov9)of the YOLOv9 repository. Particularly you can do following for converting.

```bash
git clone https://github.com/WongKinYiu/yolov9.git
cd yolov9
conda create -n yolov9 python=3.9
conda activate yolov9
pip install -r requirements.txt
wget https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-t-converted.pt
python export.py --weights=./yolov9-t-converted.pt --include=onnx --img-size=(480,640) 
```

This will generate <yolov9-t-converted.onnx> file.

2.  Inference on OpenCV.

```bash
build opencv from source 
cd build 
./bin/example_dnn_yolo_detector --model=<path-to-yolov9-t-converted.onnx> --yolo=yolov9 --width=640 --height=480 --scale=0.003921568627 --padvalue=114 --path=<path-to-image>
```

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2024-07-02 18:26:34 +03:00
..
cityscapes_semsegm_test_enet.py Misc. modules/ typos 2018-02-12 07:09:43 -05:00
imagenet_cls_test_alexnet.py change fcn8s-heavy-pascal tests from caffe to onnx 2024-05-03 00:15:09 +08:00
imagenet_cls_test_googlenet.py Misc. modules/ typos 2018-02-12 07:09:43 -05:00
imagenet_cls_test_inception.py fix 4.x links 2021-12-22 13:24:30 +00:00
npy_blob.cpp dnn: fix precomp.hpp usage 2018-02-28 17:06:26 +03:00
npy_blob.hpp dnn: fix precomp.hpp usage 2018-02-28 17:06:26 +03:00
pascal_semsegm_test_fcn.py change fcn8s-heavy-pascal tests from caffe to onnx 2024-05-03 00:15:09 +08:00
test_backends.cpp Merge pull request #24834 from fengyuentau:cuda_naryeltwise_broadcast 2024-01-11 10:04:46 +03:00
test_caffe_importer.cpp dnn(test): skip very long debug tests, reduce test time 2023-12-25 08:44:06 +00:00
test_common.cpp cmake: fix build of dnn tests with shared common code 2019-03-31 08:52:25 +00:00
test_common.hpp Merge pull request #25181 from dkurt:release_conv_weights 2024-03-25 09:03:28 +03:00
test_common.impl.hpp Merge pull request #25181 from dkurt:release_conv_weights 2024-03-25 09:03:28 +03:00
test_darknet_importer.cpp dnn(test): skip very long debug tests, reduce test time 2023-12-25 08:44:06 +00:00
test_googlenet.cpp Merge pull request #22275 from zihaomu:fp16_support_conv 2023-05-17 09:38:33 +03:00
test_graph_simplifier.cpp Merge pull request #25271 from fengyuentau:matmul_bias 2024-03-29 17:35:23 +03:00
test_ie_models.cpp Fix for OpenVINO 2024.0 2024-03-18 15:05:50 +04:00
test_int8_layers.cpp Merge pull request #25779 from fengyuentau:dnn/fix_onnx_depthtospace 2024-06-21 19:28:22 +03:00
test_layers.cpp Skip Test_Caffe_layers.Concat with Vulkan due to sporadic failures. 2024-05-17 11:54:25 +03:00
test_main.cpp Merge pull request #23109 from seanm:misc-warnings 2023-10-06 13:33:21 +03:00
test_misc.cpp Merge pull request #23736 from seanm:c++11-simplifications 2024-01-19 16:53:08 +03:00
test_model.cpp Made fcn-resnet50-12.onnx model optional. 2024-05-03 16:14:22 +03:00
test_nms.cpp batched nms impl 2022-11-29 15:32:34 +08:00
test_onnx_conformance_layer_filter__cuda_denylist.inl.hpp Merge pull request #24353 from alexlyulkov:al/fixed-cumsum-layer 2023-10-03 13:58:25 +03:00
test_onnx_conformance_layer_filter__halide_denylist.inl.hpp Merge pull request #24353 from alexlyulkov:al/fixed-cumsum-layer 2023-10-03 13:58:25 +03:00
test_onnx_conformance_layer_filter__openvino.inl.hpp Merge pull request #25779 from fengyuentau:dnn/fix_onnx_depthtospace 2024-06-21 19:28:22 +03:00
test_onnx_conformance_layer_filter__vulkan_denylist.inl.hpp Merge pull request #24092 from Aser-Abdelfatah:GSoC_Support_GatherElements_ONNX 2023-10-18 10:41:47 +03:00
test_onnx_conformance_layer_filter_opencv_all_denylist.inl.hpp Normalize axis parameter in DNN Concat to handle negative values. 2024-01-16 12:22:22 +03:00
test_onnx_conformance_layer_filter_opencv_cpu_denylist.inl.hpp Merge pull request #21865 from rogday:nary_eltwise_layers 2022-07-19 06:14:05 +03:00
test_onnx_conformance_layer_filter_opencv_denylist.inl.hpp move global skip out of if loop, and add opencv_deny_list 2023-03-13 22:16:51 +08:00
test_onnx_conformance_layer_filter_opencv_ocl_fp16_denylist.inl.hpp implementation of scatter and scatternd with conformance tests enabled 2022-10-17 11:30:32 +08:00
test_onnx_conformance_layer_filter_opencv_ocl_fp32_denylist.inl.hpp implementation of scatter and scatternd with conformance tests enabled 2022-10-17 11:30:32 +08:00
test_onnx_conformance_layer_parser_denylist.inl.hpp Merge pull request #25518 from alexlyulkov:al/fixed-gemm-openvino 2024-05-14 17:41:19 +03:00
test_onnx_conformance.cpp Merge pull request #24610 from jimmylaw21:dnn-onnx-add-group-norm-layer 2024-01-12 15:13:26 +03:00
test_onnx_importer.cpp Merge pull request #25794 from Abdurrahheem:ash/yolov10-support 2024-07-02 18:26:34 +03:00
test_precomp.hpp dnn: reduce set of ignored warnings 2018-11-15 13:15:59 +03:00
test_tf_importer.cpp dnn(test): skip very long debug tests, reduce test time 2023-12-25 08:44:06 +00:00
test_tflite_importer.cpp Merge pull request #25613 from CNOCycle:tflite/ops 2024-05-31 19:31:21 +03:00
test_torch_importer.cpp DNN: add the Winograd fp16 support (#23654) 2023-11-20 13:45:37 +03:00