1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-29 23:33:05 +04:00

Merge pull request #29107 from varun-jaiswal17:yunet-dynamic-input

Update default YuNet model to new dynamic inputs #29107

Update the default model in `face_detect.py` and `face_detect.cpp` to
`face_detection_yunet_2026may.onnx`, which has symbolic `height`/`width` input dims.

## Changes
- `samples/dnn/face_detect.py`: update default `--face_detection_model` to `face_detection_yunet_2026may.onnx`
- `samples/dnn/face_detect.cpp`: update default `fd_model` to `face_detection_yunet_2026may.onnx`

Companion PR : 
- https://github.com/opencv/opencv_zoo/pull/310
- https://github.com/opencv/opencv_extra/pull/1373

 Closes : https://github.com/opencv/opencv/issues/28769
 
### 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
This commit is contained in:
Varun Jaiswal
2026-05-29 23:07:05 +05:30
committed by GitHub
parent a3ced1a94b
commit 75bb662258
5 changed files with 20 additions and 9 deletions
+1 -1
View File
@@ -286,7 +286,7 @@ class dnn_test(NewOpenCVTests):
def test_face_detection(self):
model = self.find_dnn_file('dnn/onnx/models/yunet-202303.onnx', required=False)
model = self.find_dnn_file('dnn/onnx/models/yunet-202605.onnx', required=False)
img = self.get_sample('gpu/lbpcascade/er.png')
ref = [[1, 339.62445, 35.32416, 30.754604, 40.202126, 0.9302596],
+10 -2
View File
@@ -332,8 +332,16 @@ PERF_TEST_P_(DNNTestNetwork, EfficientNet)
processNet("dnn/efficientnet-lite4.onnx", "", inp);
}
PERF_TEST_P_(DNNTestNetwork, YuNet) {
processNet("dnn/onnx/models/yunet-202303.onnx", "", cv::Size(640, 640));
PERF_TEST_P_(DNNTestNetwork, YuNet_320) {
processNet("dnn/onnx/models/yunet-202605.onnx", "", cv::Size(320, 320));
}
PERF_TEST_P_(DNNTestNetwork, YuNet_640) {
processNet("dnn/onnx/models/yunet-202605.onnx", "", cv::Size(640, 640));
}
PERF_TEST_P_(DNNTestNetwork, YuNet_1280) {
processNet("dnn/onnx/models/yunet-202605.onnx", "", cv::Size(1280, 736));
}
PERF_TEST_P_(DNNTestNetwork, SFace) {
+7 -4
View File
@@ -394,10 +394,13 @@ TEST_P(DNNTestNetwork, OpenPose_pose_mpi_faster_4_stages)
TEST_P(DNNTestNetwork, YuNet)
{
Mat img = imread(findDataFile("gpu/lbpcascade/er.png"));
resize(img, img, Size(320, 320));
Mat inp = blobFromImage(img);
processNet("dnn/onnx/models/yunet-202303.onnx", "", inp);
double l1 = 0.0, lInf = 0.0;
if (target == DNN_TARGET_CUDA_FP16 || target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_CPU_FP16)
{
l1 = 0.01;
lInf = 0.05;
}
processNet("dnn/onnx/models/yunet-202605.onnx", "", Size(320, 320), "", l1, lInf);
expectNoFallbacksFromIE(net);
}
+1 -1
View File
@@ -44,7 +44,7 @@ int main(int argc, char** argv)
"{image2 i2 | | Path to the input image2. When image1 and image2 parameters given then the program try to find a face on both images and runs face recognition algorithm}"
"{video v | 0 | Path to the input video}"
"{scale sc | 1.0 | Scale factor used to resize input video frames}"
"{fd_model fd | face_detection_yunet_2023mar.onnx| Path to the model. Download yunet.onnx in https://github.com/opencv/opencv_zoo/tree/master/models/face_detection_yunet}"
"{fd_model fd | face_detection_yunet_2026may.onnx| Path to the model. Download yunet.onnx in https://github.com/opencv/opencv_zoo/tree/master/models/face_detection_yunet}"
"{fr_model fr | face_recognition_sface_2021dec.onnx | Path to the face recognition model. Download the model at https://github.com/opencv/opencv_zoo/tree/master/models/face_recognition_sface}"
"{score_threshold | 0.85 | Filter out faces of score < score_threshold}"
"{nms_threshold | 0.3 | Suppress bounding boxes of iou >= nms_threshold}"
+1 -1
View File
@@ -16,7 +16,7 @@ parser.add_argument('--image1', '-i1', type=str, help='Path to the input image1.
parser.add_argument('--image2', '-i2', type=str, help='Path to the input image2. When image1 and image2 parameters given then the program try to find a face on both images and runs face recognition algorithm.')
parser.add_argument('--video', '-v', type=str, help='Path to the input video.')
parser.add_argument('--scale', '-sc', type=float, default=1.0, help='Scale factor used to resize input video frames.')
parser.add_argument('--face_detection_model', '-fd', type=str, default='face_detection_yunet_2023mar.onnx', help='Path to the face detection model. Download the model at https://github.com/opencv/opencv_zoo/tree/master/models/face_detection_yunet')
parser.add_argument('--face_detection_model', '-fd', type=str, default='face_detection_yunet_2026may.onnx', help='Path to the face detection model. Download the model at https://github.com/opencv/opencv_zoo/tree/master/models/face_detection_yunet')
parser.add_argument('--face_recognition_model', '-fr', type=str, default='face_recognition_sface_2021dec.onnx', help='Path to the face recognition model. Download the model at https://github.com/opencv/opencv_zoo/tree/master/models/face_recognition_sface')
parser.add_argument('--score_threshold', type=float, default=0.85, help='Filtering out faces of score < score_threshold.')
parser.add_argument('--nms_threshold', type=float, default=0.3, help='Suppress bounding boxes of iou >= nms_threshold.')