nareshmlx/opencv-pr huggingface dataset:
**File:** modules/features2d/misc/java/test/FASTFeatureDetectorTest.java
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -8,7 +8,6 @@
 import org.opencv.core.MatOfKeyPoint;
 import org.opencv.core.Point;
 import org.opencv.core.Scalar;
-import org.opencv.features2d.Feature2D;
 import org.opencv.features2d.FastFeatureDetector;
 import org.opencv.core.KeyPoint;
 import org.opencv.test.OpenCVTestCase;
@@ -17,7 +16,7 @@
 
```

Review comment:
Ok, I'll remove theses dead lines
**File:** modules/features2d/misc/java/test/SURFDescriptorExtractorTest.java
**Change Type:** removed
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -1,119 +0,0 @@
-package org.opencv.test.features2d;
-
-import org.opencv.core.CvType;
-import org.opencv.core.Mat;
-import org.opencv.core.MatOfKeyPoint;
-import org.opencv.core.Point;
-import org.opencv.core.Scalar;
-import org.opencv.core.KeyPoint;
-import org.opencv.test.OpenCVTestCase;
```

Review comment:
It's good idea. Please go ahead.
**File:** modules/features2d/misc/java/test/AKAZEDescriptorExtractorTest.java
**Change Type:** added
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -0,0 +1,67 @@
+package org.opencv.test.features2d;
+
+import org.opencv.test.OpenCVTestCase;
+import org.opencv.test.OpenCVTestRunner;
+import org.opencv.features2d.AKAZE;
+
+public class AKAZEDescriptorExtractorTest extends OpenCVTestCase {
+
+    AKAZE extractor;
```

Review comment:
Looks very suspicious. Please use assertEquals overload for floating point values with epsilon.
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -316,6 +316,21 @@ class CV_EXPORTS_W SIFT : public Feature2D
         double sigma, int descriptorType);
 
     CV_WRAP virtual String getDefaultName() const CV_OVERRIDE;
+
+    CV_WRAP virtual void setNFeatures(int maxFeatures) = 0;
+    CV_WRAP virtual int getNFeatures() const = 0;
+
+    CV_WRAP virtual void setNOctaveLayers(int nOctaveLayers) = 0;
+    CV_WRAP virtual int getNOctaveLayers() const = 0;
```

Review comment:
OpenCV uses signed types for wrappers. Please remove TODO note.
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -316,6 +316,21 @@ class CV_EXPORTS_W SIFT : public Feature2D
         double sigma, int descriptorType);
 
     CV_WRAP virtual String getDefaultName() const CV_OVERRIDE;
+
+    CV_WRAP virtual void setNFeatures(int maxFeatures) = 0;
+    CV_WRAP virtual int getNFeatures() const = 0;
+
+    CV_WRAP virtual void setNOctaveLayers(int nOctaveLayers) = 0;
+    CV_WRAP virtual int getNOctaveLayers() const = 0;
```

Review comment:
The methods look confusing. Please remove them if they cannot implement parameters management.
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -316,6 +316,21 @@ class CV_EXPORTS_W SIFT : public Feature2D
         double sigma, int descriptorType);
 
     CV_WRAP virtual String getDefaultName() const CV_OVERRIDE;
+
+    CV_WRAP virtual void setNFeatures(int maxFeatures) = 0;
+    CV_WRAP virtual int getNFeatures() const = 0;
+
+    CV_WRAP virtual void setNOctaveLayers(int nOctaveLayers) = 0;
+    CV_WRAP virtual int getNOctaveLayers() const = 0;
```

Review comment:
OK, I can remove the comment. But is there a better way (than creating specific getter/setter for unsigned property) to have access to blobColor property into JAVA API without polluting python API (for which access to property works well)?
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -316,6 +316,21 @@ class CV_EXPORTS_W SIFT : public Feature2D
         double sigma, int descriptorType);
 
     CV_WRAP virtual String getDefaultName() const CV_OVERRIDE;
+
+    CV_WRAP virtual void setNFeatures(int maxFeatures) = 0;
+    CV_WRAP virtual int getNFeatures() const = 0;
+
+    CV_WRAP virtual void setNOctaveLayers(int nOctaveLayers) = 0;
+    CV_WRAP virtual int getNOctaveLayers() const = 0;
```

Review comment:
Ok, just removed comment, and add a valid() method to check validity of parameters in read() and setParams() methods.
**File:** modules/features2d/misc/java/test/FASTFeatureDetectorTest.java
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention
**Review Line:** 86

**Code Changes:**
```diff
     public void testRead() {
-        String filename = OpenCVTestRunner.getTempFileName("yml");
+        String filename = OpenCVTestRunner.getTempFileName("xml");
 
-        writeFile(filename, "%YAML:1.0\n---\nthreshold: 130\nnonmaxSuppression: 1\n");
+        writeFile(filename, "<?xml version=\"1.0\"?>\n<opencv_storage>\n<name>Feature2D.FastFeatureDetector</name>\n<threshold>10</threshold>\n<nonmaxSuppression>1</nonmaxSuppression>\n<type>2</type>\n</opencv_storage>\n");
         detector.read(filename);
 
+        assertEquals(10, detector.getThreshold());
+        assertEquals(true, detector.getNonmaxSuppression());
+        assertEquals(2, detector.getType());
```

Review comment:
Why is test code changed? Are old configurations become broken?
**File:** modules/features2d/misc/java/test/ORBDescriptorExtractorTest.java
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -75,16 +75,25 @@ public void testEmpty() {
         fail("Not yet implemented"); // ORB does not override empty() method
     }
 
-    public void testRead() {
+    public void testReadYml() {
         KeyPoint point = new KeyPoint(55.775577545166016f, 44.224422454833984f, 16, 9.754629f, 8617.863f, 1, -1);
         MatOfKeyPoint keypoints = new MatOfKeyPoint(point);
         Mat img = getTestImg();
         Mat descriptors = new Mat();
```

Review comment:
unnecessary change. Also the first two values a data location which is highlighted by formatting.
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -316,6 +316,21 @@ class CV_EXPORTS_W SIFT : public Feature2D
         double sigma, int descriptorType);
 
     CV_WRAP virtual String getDefaultName() const CV_OVERRIDE;
+
+    CV_WRAP virtual void setNFeatures(int maxFeatures) = 0;
+    CV_WRAP virtual int getNFeatures() const = 0;
+
+    CV_WRAP virtual void setNOctaveLayers(int nOctaveLayers) = 0;
+    CV_WRAP virtual int getNOctaveLayers() const = 0;
```

Review comment:
unnecessary change
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention
**Review Line:** 778

**Code Changes:**
```diff
@@ -731,6 +774,10 @@ class CV_EXPORTS_W SimpleBlobDetector : public Feature2D
 
   CV_WRAP static Ptr<SimpleBlobDetector>
     create(const SimpleBlobDetector::Params &parameters = SimpleBlobDetector::Params());
+
+  CV_WRAP virtual void setParams(const SimpleBlobDetector::Params& params ) = 0;
+  CV_WRAP virtual SimpleBlobDetector::Params getParams() const = 0;
+
   CV_WRAP virtual String getDefaultName() const CV_OVERRIDE;
   CV_WRAP virtual const std::vector<std::vector<cv::Point> >& getBlobContours() const;
 };
```

Review comment:
Do we really need `setParams()` if we already have ctor/create? Especially "virtual".
**File:** modules/features2d/src/agast.cpp
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention

**Code Changes:**
```diff
@@ -7948,6 +7948,27 @@ class AgastFeatureDetector_Impl CV_FINAL : public AgastFeatureDetector
     : threshold(_threshold), nonmaxSuppression(_nonmaxSuppression), type(_type)
     {}
 
+    void read( const FileNode& fn) CV_OVERRIDE
+    {
+        // if node is empty, keep previous value
+        if (!fn["threshold"].empty())
+            fn["threshold"] >> threshold;
+        if (!fn["nonmaxSuppression"].empty())
```

Review comment:
Indentation is 4 spaces in this file. The same is below.
**File:** modules/features2d/misc/objc/gen_dict.json
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention
**Review Line:** 7

**Code Changes:**
```diff
+    "ManualFuncs" : {
+        "SimpleBlobDetector": {
+            "setParams": { "declaration" : [""], "implementation" : [""] },
+            "getParams": { "declaration" : [""], "implementation" : [""] }
+        }
+    },
     "enum_fix" : {
         "FastFeatureDetector" : { "DetectorType": "FastDetectorType" },
         "AgastFeatureDetector" : { "DetectorType": "AgastDetectorType" }
```

Review comment:
Does it really work?
**File:** modules/features2d/misc/objc/gen_dict.json
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention
**Review Line:** 7

**Code Changes:**
```diff
+    "ManualFuncs" : {
+        "SimpleBlobDetector": {
+            "setParams": { "declaration" : [""], "implementation" : [""] },
+            "getParams": { "declaration" : [""], "implementation" : [""] }
+        }
+    },
     "enum_fix" : {
         "FastFeatureDetector" : { "DetectorType": "FastDetectorType" },
         "AgastFeatureDetector" : { "DetectorType": "AgastDetectorType" }
```

Review comment:
Yes. I checked objc code generation and this block just disables broken bindings.
**File:** modules/features2d/misc/objc/gen_dict.json
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention
**Review Line:** 7

**Code Changes:**
```diff
+    "ManualFuncs" : {
+        "SimpleBlobDetector": {
+            "setParams": { "declaration" : [""], "implementation" : [""] },
+            "getParams": { "declaration" : [""], "implementation" : [""] }
+        }
+    },
     "enum_fix" : {
         "FastFeatureDetector" : { "DetectorType": "FastDetectorType" },
         "AgastFeatureDetector" : { "DetectorType": "AgastDetectorType" }
```

Review comment:
Perhaps disabling/ignoring should be done more obviously, e.g. through `class_ignore_list` approach (but for methods).
**File:** modules/features2d/misc/java/test/FASTFeatureDetectorTest.java
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention
**Review Line:** 86

**Code Changes:**
```diff
     public void testRead() {
-        String filename = OpenCVTestRunner.getTempFileName("yml");
+        String filename = OpenCVTestRunner.getTempFileName("xml");
 
-        writeFile(filename, "%YAML:1.0\n---\nthreshold: 130\nnonmaxSuppression: 1\n");
+        writeFile(filename, "<?xml version=\"1.0\"?>\n<opencv_storage>\n<name>Feature2D.FastFeatureDetector</name>\n<threshold>10</threshold>\n<nonmaxSuppression>1</nonmaxSuppression>\n<type>2</type>\n</opencv_storage>\n");
         detector.read(filename);
 
+        assertEquals(10, detector.getThreshold());
+        assertEquals(true, detector.getNonmaxSuppression());
+        assertEquals(2, detector.getType());
```

Review comment:
The PR adds adds more parameters to saved configuration. The YAML->XML replacement looks strange, but the line changes anyway. I decided not to rework original solution.
**File:** modules/features2d/misc/objc/gen_dict.json
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention
**Review Line:** 7

**Code Changes:**
```diff
+    "ManualFuncs" : {
+        "SimpleBlobDetector": {
+            "setParams": { "declaration" : [""], "implementation" : [""] },
+            "getParams": { "declaration" : [""], "implementation" : [""] }
+        }
+    },
     "enum_fix" : {
         "FastFeatureDetector" : { "DetectorType": "FastDetectorType" },
         "AgastFeatureDetector" : { "DetectorType": "AgastDetectorType" }
```

Review comment:
It'll be replaced with appropriate solution with another PR.
**File:** modules/features2d/src/blobdetector.cpp
**Change Type:** modified
**Context:** PR #20367: Add read/write functions for features2d and normalize naming convention
**Review Line:** 86

**Code Changes:**
```diff
+  static void validateParameters(const SimpleBlobDetector::Params& p)
+  {
+      if (p.thresholdStep <= 0)
+          CV_Error(Error::StsBadArg, "thresholdStep>0");
+
+      if (p.minThreshold > p.maxThreshold || p.minThreshold <= 0)
+          CV_Error(Error::StsBadArg, "0<minThreshold<=maxThreshold");
+
+      if (p.minDistBetweenBlobs <=0 )
+          CV_Error(Error::StsBadArg, "minDistBetweenBlobs>0");
+
```

Review comment:
https://github.com/opencv/opencv/pull/23036
**File:** modules/features2d/src/blobdetector.cpp
**Change Type:** modified
**Context:** PR #23036: Fixed blob detector parameters range.

**Code Changes:**
```diff
@@ -83,8 +83,8 @@ class CV_EXPORTS_W SimpleBlobDetectorImpl : public SimpleBlobDetector
       if (p.thresholdStep <= 0)
           CV_Error(Error::StsBadArg, "thresholdStep>0");
 
-      if (p.minThreshold > p.maxThreshold || p.minThreshold <= 0)
-          CV_Error(Error::StsBadArg, "0<minThreshold<=maxThreshold");
+      if (p.minThreshold > p.maxThreshold || p.minThreshold < 0)
+          CV_Error(Error::StsBadArg, "0<=minThreshold<=maxThreshold");
 
       if (p.minDistBetweenBlobs <=0 )
```

Review comment:
message is not updated.
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #22905: DNN: clean old convolution and optimize depth-wise Conv, Conv1D and Conv3D
**Review Line:** 1267

**Code Changes:**
```diff
@@ -259,7 +259,7 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
     std::vector<float> reluslope;
     Ptr<ActivationLayer> activ;
 
-    Ptr<FastConv2d> fastConv2dImpl;
+    Ptr<FastConv> fastConvImpl;
 
 #ifdef HAVE_OPENCL
     Ptr<OCL4DNNConvSpatial<float> > convolutionOp;
@@ -967,808 +967,6 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
     }
 #endif // HAVE_WEBNN
 
-    class ParallelConv : public cv::ParallelLoopBody
-    {
```

Review comment:
We need performance comparison report in PR's description for that massive changes. Also it makes sense to compare memory consumption too (to avoid 3x regressions like recent case).
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #22905: DNN: clean old convolution and optimize depth-wise Conv, Conv1D and Conv3D
**Review Line:** 1267

**Code Changes:**
```diff
@@ -259,7 +259,7 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
     std::vector<float> reluslope;
     Ptr<ActivationLayer> activ;
 
-    Ptr<FastConv2d> fastConv2dImpl;
+    Ptr<FastConv> fastConvImpl;
 
 #ifdef HAVE_OPENCL
     Ptr<OCL4DNNConvSpatial<float> > convolutionOp;
@@ -967,808 +967,6 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
     }
 #endif // HAVE_WEBNN
 
-    class ParallelConv : public cv::ParallelLoopBody
-    {
```

Review comment:
Please use OpenCV performance testing infrastructure instead of some kind of manual testing: - Single result is not enough. We must ensure that there are no regression in other cases. - `Resnet34_kinetics` - no such test in opencv_perf_dnn - CPU/SIMD code optimization validation should be done with `--perf_threads=1` - i7-12700k has P and E cores. Need to bind test process to selected CPUs. --- Finally, we have regressions, in conv1d case: |Name of Test|base|patch|x-factor| |---|:-:|:-:|:-:| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 2, 19}, OCN=2, G=2, S=2, P=(1, 1), BIAS, OCV/CPU)|0.001|0.001|0.74| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 2, 25}, OCN=2, G=2, P=(2, 2), PM=SAME, OCV/CPU)|0.001|0.001|0.72| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 6, 10}, OCN=6, PM=VALID, BIAS, OCV/CPU)|0.001|0.001|0.74| (CPU: i7-12700k, Linux) Test launch cmd: ``` taskset -c 0 ./bin/opencv_perf_dnn '--gtest_filter=*' --gtest_output=xml:../perf/pr22905/0-1th.xml --perf_threads=1 ``` Report cmd: ``` python3 ${OPENCV_SRC}/modules/ts/misc/summary.py -m min -f conv1d ../perf/pr22905/{0,1}-1th.xml ``` (use `-o markdown` for GitHub report)
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #22905: DNN: clean old convolution and optimize depth-wise Conv, Conv1D and Conv3D
**Review Line:** 1267

**Code Changes:**
```diff
@@ -259,7 +259,7 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
     std::vector<float> reluslope;
     Ptr<ActivationLayer> activ;
 
-    Ptr<FastConv2d> fastConv2dImpl;
+    Ptr<FastConv> fastConvImpl;
 
 #ifdef HAVE_OPENCL
     Ptr<OCL4DNNConvSpatial<float> > convolutionOp;
@@ -967,808 +967,6 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
     }
 #endif // HAVE_WEBNN
 
-    class ParallelConv : public cv::ParallelLoopBody
-    {
```

Review comment:
I will try to update the performance test resulting from performance testing infrastructure. Because the calculation amount of Conv1D in the performance test is too small, I am worried that the test results cannot reflect the model in the real application scenario.
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #22905: DNN: clean old convolution and optimize depth-wise Conv, Conv1D and Conv3D
**Review Line:** 1301

**Code Changes:**
```diff
             int nstripes = std::max(getNumThreads(), 1);
+            int conv_dim = CONV_2D;
+            if (inputs[0].dims == 3)
+                conv_dim = CONV_1D;
+            if (inputs[0].dims == 5)
+                conv_dim = CONV_3D;
 
             // Initialization of FastCovn2d, pack weight.
-            if ((!fastConv2dImpl || variableWeight) && inputs[0].dims == 4)
+            if (!fastConvImpl || variableWeight)
             {
```

Review comment:
List of regressions for non-SIMD (fully scalar) mode: - `cmake ... -DCMAKE_BUILD_TYPE=Release -DCV_DISABLE_OPTIMIZATION=ON` ``` $ python3 ../../dev/modules/ts/misc/summary.py -m mean --regressions-only=0.97 ../perf/pr22905/nosimd-{0,1}-1th.xml -o markdown ``` |Name of Test|nosimd-0-1th|nosimd-1-1th|nosimd-1-1th vs nosimd-0-1th (x-factor)| |---|:-:|:-:|:-:| |YOLOv4_tiny_2::Layer_Slice::OCV/CPU|0.016|0.017|0.97| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 2, 19}, OCN=2, G=2, S=2, P=(1, 1), BIAS, OCV/CPU)|0.001|0.001|0.78| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 2, 25}, OCN=2, G=2, P=(2, 2), PM=SAME, OCV/CPU)|0.001|0.001|0.77| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 6, 10}, OCN=6, PM=VALID, BIAS, OCV/CPU)|0.001|0.001|0.91| |conv3d::Conv3D::(GFLOPS=0.000, K=[3 x 3 x 3], IN={1, 2, 19, 19, 19}, OCN=2, G=2, S=[2 x 2 x 2], P=(1, 1) x (1, 1) x (1, 1), BIAS, OCV/CPU)|0.062|0.080|0.78| |conv3d::Conv3D::(GFLOPS=0.001, K=[3 x 3 x 3], IN={1, 2, 25, 19, 19}, OCN=2, G=2, S=[1 x 2 x 2], P=(2, 2) x (2, 2) x (2, 2), PM=SAME, OCV/CPU)|0.169|0.197|0.86| (CPU: i7-12700k)
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #22905: DNN: clean old convolution and optimize depth-wise Conv, Conv1D and Conv3D
**Review Line:** 1301

**Code Changes:**
```diff
             int nstripes = std::max(getNumThreads(), 1);
+            int conv_dim = CONV_2D;
+            if (inputs[0].dims == 3)
+                conv_dim = CONV_1D;
+            if (inputs[0].dims == 5)
+                conv_dim = CONV_3D;
 
             // Initialization of FastCovn2d, pack weight.
-            if ((!fastConv2dImpl || variableWeight) && inputs[0].dims == 4)
+            if (!fastConvImpl || variableWeight)
             {
```

Review comment:
There are regressions since 4.6.0 release: |Name of Test|nosimd-4.6.0-1th|nosimd-1-1th|nosimd-1-1th vs nosimd-4.6.0-1th (x-factor)| |---|:-:|:-:|:-:| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 2, 19}, OCN=2, G=2, S=2, P=(1, 1), BIAS, OCV/CPU)|0.001|0.001|0.75| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 2, 25}, OCN=2, G=2, P=(2, 2), PM=SAME, OCV/CPU)|0.001|0.001|0.74| |conv1d::Conv1D::(GFLOPS=0.000, K=[3], IN={1, 6, 10}, OCN=6, PM=VALID, BIAS, OCV/CPU)|0.001|0.001|0.88| |conv3d::Conv3D::(GFLOPS=0.000, K=[3 x 3 x 3], IN={1, 2, 19, 19, 19}, OCN=2, G=2, S=[2 x 2 x 2], P=(1, 1) x (1, 1) x (1, 1), BIAS, OCV/CPU)|0.063|0.080|0.79| |conv3d::Conv3D::(GFLOPS=0.001, K=[3 x 3 x 3], IN={1, 2, 25, 19, 19}, OCN=2, G=2, S=[1 x 2 x 2], P=(2, 2) x (2, 2) x (2, 2), PM=SAME, OCV/CPU)|0.161|0.197|0.82| |conv::Conv::(GFLOPS=1.660, K=[3 x 3], IN={1, 128, 75, 75}, OCN=128, G=128, P=[1 x 1], BIAS, OCV/CPU)|1.066|2.823|0.38| |conv::Conv::(GFLOPS=1.704, K=[3 x 3], IN={1, 256, 38, 38}, OCN=256, G=256, P=[1 x 1], BIAS, OCV/CPU)|0.585|1.609|0.36| |conv::Conv::(GFLOPS=1.704, K=[3 x 3], IN={1, 512, 19, 19}, OCN=512, G=512, P=[1 x 1], BIAS, OCV/CPU)|0.281|0.975|0.29|
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #22905: DNN: clean old convolution and optimize depth-wise Conv, Conv1D and Conv3D
**Review Line:** 1301

**Code Changes:**
```diff
             int nstripes = std::max(getNumThreads(), 1);
+            int conv_dim = CONV_2D;
+            if (inputs[0].dims == 3)
+                conv_dim = CONV_1D;
+            if (inputs[0].dims == 5)
+                conv_dim = CONV_3D;
 
             // Initialization of FastCovn2d, pack weight.
-            if ((!fastConv2dImpl || variableWeight) && inputs[0].dims == 4)
+            if (!fastConvImpl || variableWeight)
             {
```

Review comment:
Thank for your test. I will try to optimize the performance of the new engine on x86 and will be delivered in a day or two.
**File:** modules/core/include/opencv2/core/cuda/common.hpp
**Change Type:** modified
**Context:** PR #22963: Replace all instances of CUDA texture references with texture objects

**Code Changes:**
```diff
@@ -98,6 +98,12 @@ namespace cv { namespace cuda
             return (total + grain - 1) / grain;
         }
 
+#if (CUDART_VERSION >= 12000)
+        template<class T> inline void bindTexture(const textureReference* tex, const PtrStepSz<T>& img) { CV_Error(cv::Error::GpuNotSupported, "Function removed in CUDA SDK 12"); }
+        template<class T> inline void createTextureObjectPitch2D(cudaTextureObject_t* tex, PtrStepSz<T>& img, const cudaTextureDesc& texDesc) {
+            CV_Error(cv::Error::GpuNotSupported, "Function removed in CUDA SDK 12"); }
+#else
+        //TODO: remove from OpenCV 5.x
```

Review comment:
It's public API and some custom modules may relay on it. Let's presume the functions. Please Add macro to check version and throw exception for CUDA 12 and above. For older CUDA versions the implementation should stay the same. Also please add "todo" to remove deprecated branch in OpenCv 5.x.
**File:** modules/calib3d/test/test_usac.cpp
**Change Type:** modified
**Context:** PR #22967: Fix maxIter parameter in usac findEssentialMat

**Code Changes:**
```diff
@@ -299,8 +299,11 @@ TEST(usac_Fundamental, regression_19639)
     EXPECT_TRUE(m.empty());
 }
 
+CV_ENUM(UsacMethod, USAC_DEFAULT, USAC_ACCURATE, USAC_PROSAC, USAC_FAST, USAC_MAGSAC)
+typedef TestWithParam<UsacMethod> usac_Essential;
 
-TEST(usac_Essential, accuracy) {
+TEST_P(usac_Essential, accuracy) {
+    int method = GetParam();
```

Review comment:
It's make sense to implement it as parameterized test with flags as parameter. In case if failure the regression is more obvious as with loop. See example here: https://github.com/opencv/opencv/blob/4.x/modules/calib3d/test/test_affine2d_estimator.cpp#L46