nareshmlx/opencv-pr huggingface dataset:
**File:** modules/3d/src/rgbd/normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -225,24 +225,7 @@ class RgbdNormalsImpl : public RgbdNormals
     {
         return method;
     }
-    virtual void setMethod(RgbdNormalsMethod val) CV_OVERRIDE
-    {
-        method = val; cacheIsDirty = true;
-    }
-
-    // Helper functions for apply()
```

Review comment:
Most probably you can rid of "-" if swap v00 and v01 in previous line.
**File:** modules/3d/test/test_odometry.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -627,4 +627,31 @@ TEST(RGBD_Odometry_WarpFrame, bigScale)
     ASSERT_LE(lidiff, 0.99951172);
 }
 
+TEST(RGBD_DepthTo3D, mask)
+{
+    std::string dataPath = cvtest::TS::ptr()->get_data_path();
+    std::string srcDepthFilename = dataPath + "/cv/rgbd/depth.png";
+
+    Mat srcDepth = imread(srcDepthFilename, IMREAD_UNCHANGED);
```

Review comment:
It's very weak test. I propose to check values.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
Why not just use `compare`: https://docs.opencv.org/4.x/d2/de8/group__core__array.html#ga303cfb72acf8cbb36d884650c09a3a97 ?
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
I propose to add axes flip to 3 module itself as function. It's useful commodity not only for the tests.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
Looks like `cv::Mat::dot` Does what you what, if each matrix pixel has 3 channels of float of double type. You need just apply abs to the result matrix. Also it makes sense to add comment how the dot product is calculated to make the idea more obvious.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
ternary operator works here better, IMHO.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
Could it be just replaced with `cv::transform`: https://docs.opencv.org/4.x/d2/de8/group__core__array.html#ga393164aa54bb9169ce0a8cc44e08ff22 ?
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
The purpose of this piece of code is to do NaN check; not sure if `compare` can be used here
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
Can this be achieved by some MatExpr-like expression?
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
Makes sense, but it's better to add an ability to accept both depth and cloud to all normal computers, then call both and compare the result to ensure it's the same.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
Theoretically yes, but OpenCV has design issues in MatExpr resolution like this: https://github.com/opencv/opencv/issues/16538. Please pay attention.
**File:** modules/3d/test/test_odometry.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -627,4 +627,31 @@ TEST(RGBD_Odometry_WarpFrame, bigScale)
     ASSERT_LE(lidiff, 0.99951172);
 }
 
+TEST(RGBD_DepthTo3D, mask)
+{
+    std::string dataPath = cvtest::TS::ptr()->get_data_path();
+    std::string srcDepthFilename = dataPath + "/cv/rgbd/depth.png";
+
+    Mat srcDepth = imread(srcDepthFilename, IMREAD_UNCHANGED);
```

Review comment:
This is just a smoke test checking that `depthTo3d` won't fail when the mask argument is provided. Size check added to ensure that all depth values are processed
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
But what I see is that `cv::Mat::dot` returns one number instead of array. Also it does not support masks.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
Moreover, `compare` performs comparison per channel, not per pixel
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
Since making depth input for all normal computers is not trivial, made another thing: The only normal computer now that supports depth as input (not cloud) is LINEMOD, it's fed by `srcCloud` then `srcDepth` and the output is compared against a threshold.
**File:** modules/3d/src/rgbd/normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -225,24 +225,7 @@ class RgbdNormalsImpl : public RgbdNormals
     {
         return method;
     }
-    virtual void setMethod(RgbdNormalsMethod val) CV_OVERRIDE
-    {
-        method = val; cacheIsDirty = true;
-    }
-
-    // Helper functions for apply()
```

Review comment:
I propose to inline ptsAre4F and ptsAreDepth to the asset. It's code duplication, but the condition line will be printed to console in case of exception. Error message like "ptsAre4F is false" does not provide meaningful information.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
`testit ` returns non-void. Need to check EXPECT_ behavior.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
the average err check is week check, IMHO. I propose to check each one.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
IMHO average angle is too week check.
**File:** modules/3d/src/rgbd/normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -225,24 +225,7 @@ class RgbdNormalsImpl : public RgbdNormals
     {
         return method;
     }
-    virtual void setMethod(RgbdNormalsMethod val) CV_OVERRIDE
-    {
-        method = val; cacheIsDirty = true;
-    }
-
-    // Helper functions for apply()
```

Review comment:
Maybe it's better to change that bool's name to something more meaningful? Like `inputIs4floats`, `inputIs1channel` Because guessing what the exact condition failed across the bool expression in `CV_Assert` can be irritating. Or maybe replace it by `if(!condition) {CV_Error(..., "Meaningful explanation of what's expected ");}`
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
ternary operator make sense here.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
It makes sense to convert the test to test with parameterized fixture too.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals

**Code Changes:**
```diff
@@ -4,40 +4,10 @@
 
 #include "test_precomp.hpp"
 #include <opencv2/3d.hpp>
+#include <opencv2/core/quaternion.hpp>
 
 namespace opencv_test { namespace {
 
-#if 0
-Point3f
```

Review comment:
I do not see any reason for aggregation here. All methods of `RgbdNormalsTest` may be just methods of `NormalsRandomPlanes`. Right?
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals
**Review Line:** 334

**Code Changes:**
```diff
+        runCase(false, 3, true, meanErr, maxErr, threshold3d1d);
+    }
+    else
+    {
+        throw SkipTestException("Not implemented for anything except LINEMOD with scale");
+    }
+}
+
+INSTANTIATE_TEST_CASE_P(RGBD_Normals, NormalsRandomPlanes,
+::testing::Combine(::testing::Values(
+    // 3 normal computer params + 5 thresholds:
```

Review comment:
please throw Not Implemented exception to skip other tests.
**File:** modules/3d/test/test_normal.cpp
**Change Type:** modified
**Context:** PR #22241: More tests for normals
**Review Line:** 606

**Code Changes:**
```diff
+    Mat flipped = flipAxes(dstNormals, FLIP_Y | FLIP_Z);
+    dstNormals = flipped;
+
+    Mat absdot = normalsError(srcNormals, dstNormals);
+
+    Mat cmpMask = srcMask & dstMask;
+
+    EXPECT_GT(countNonZero(cmpMask), 0);
+
+    double nrml2 = cv::norm(absdot, NORM_L2, cmpMask);
+
```

Review comment:
It make sense to check if there are alive items in mask, e.g.: ``` EXPECT_GT(coutNonZero(cmpMask), 0); ```
**File:** modules/3d/src/levmarq.cpp
**Change Type:** modified
**Context:** PR #22413: LevMarq: log level lowered
**Review Line:** 346

**Code Changes:**
```diff
-    CV_LOG_INFO(NULL, "Finished: " << (found ? "" : "not ") << "found");
+    CV_LOG_DEBUG(NULL, "Finished: " << (found ? "" : "not ") << "found");
     std::string fr = "Finish reason: ";
     if (settings.checkMinGradient && smallGradient)
-        CV_LOG_INFO(NULL, fr + "gradient max val dropped below threshold");
+        CV_LOG_DEBUG(NULL, fr + "gradient max val dropped below threshold");
     if (settings.checkStepNorm && smallStep)
-        CV_LOG_INFO(NULL, fr + "step size dropped below threshold");
+        CV_LOG_DEBUG(NULL, fr + "step size dropped below threshold");
     if (settings.checkRelEnergyChange && smallEnergyDelta)
-        CV_LOG_INFO(NULL, fr + "relative energy change between iterations dropped below threshold");
```

Review comment:
In case if debug logs are disabled the macro is empty. You'll get something line if (settings.checkMinGradient && smallGradient); Please add {} for block to fix compiler warnings.
**File:** apps/interactive-calibration/main.cpp
**Change Type:** modified
**Context:** PR #22146: Add symmetric circles board support to interactive calibration app

**Code Changes:**
```diff
@@ -30,7 +30,7 @@ const std::string keys  =
         "{v        |         | Input from video file }"
         "{ci       | 0       | Default camera id }"
         "{flip     | false   | Vertical flip of input frames }"
-        "{t        | circles | Template for calibration (circles, chessboard, dualCircles, charuco) }"
+        "{t        | circles | Template for calibration (circles, chessboard, dualCircles, charuco, symcircles) }"
         "{sz       | 16.3    | Distance between two nearest centers of circles or squares on calibration board}"
         "{dst      | 295     | Distance between white and black parts of daulCircles template}"
         "{w        |         | Width of template (in corners or circles)}"
```

Review comment:
Do we really need to place this entry on the first place?
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -71,6 +71,8 @@ using namespace cv::dnn::ocl4dnn;
 using namespace cv::dnn::cuda4dnn;
 #endif
 
+#include "fast_convolution/fast_convolution.hpp"
+
 namespace cv
 {
 namespace dnn
@@ -253,11 +255,14 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
```

Review comment:
you can initialize convolution structure during the first call to forward()
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -71,6 +71,8 @@ using namespace cv::dnn::ocl4dnn;
 using namespace cv::dnn::cuda4dnn;
 #endif
 
+#include "fast_convolution/fast_convolution.hpp"
+
 namespace cv
 {
 namespace dnn
@@ -253,11 +255,14 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
```

Review comment:
this is bad. Padding should be handed inside convolution itself
**File:** modules/dnn/src/layers/fast_convolution/fast_convolution.hpp
**Change Type:** added
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -0,0 +1,89 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+#ifndef OPENCV_FAST_CONVOLUTION_HPP
+#define OPENCV_FAST_CONVOLUTION_HPP
+
+#include "opencv2/core/hal/intrin.hpp"
+
```

Review comment:
Perhaps we don't need this in this PR. The first 3 lines of the license header are enough.
**File:** modules/dnn/src/layers/fast_convolution/fast_convolution.hpp
**Change Type:** added
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -0,0 +1,89 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+#ifndef OPENCV_FAST_CONVOLUTION_HPP
+#define OPENCV_FAST_CONVOLUTION_HPP
+
+#include "opencv2/core/hal/intrin.hpp"
+
```

Review comment:
`precomp.hpp` should not be used in .hpp files. Use it from .cpp files only.
**File:** modules/dnn/test/test_caffe_importer.cpp
**Change Type:** modified
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -653,7 +653,7 @@ TEST_P(opencv_face_detector, Accuracy)
                                     0, 1, 0.98977017, 0.23901358, 0.09084064, 0.29902688, 0.1769477,
                                     0, 1, 0.97203469, 0.67965847, 0.06876482, 0.73999709, 0.1513494,
                                     0, 1, 0.95097077, 0.51901293, 0.45863652, 0.5777427, 0.5347801);
-    normAssertDetections(ref, out, "", 0.5, 1e-5, 2e-4);
+    normAssertDetections(ref, out, "", 0.5, 1e-4, 2e-4);
 }
 
 // False positives bug for large faces: https://github.com/opencv/opencv/issues/15106
@@ -695,7 +695,7 @@ TEST_P(Test_Caffe_nets, FasterRCNN_vgg16)
```

Review comment:
This is done because on the ARM platform we use Winograd to accelerate Conv, which introduces some uncertainty of FP32.
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -71,6 +71,8 @@ using namespace cv::dnn::ocl4dnn;
 using namespace cv::dnn::cuda4dnn;
 #endif
 
+#include "fast_convolution/fast_convolution.hpp"
+
 namespace cv
 {
 namespace dnn
@@ -253,11 +255,14 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
```

Review comment:
> `./` Relative prefix should not be used.
**File:** modules/dnn/src/layers/fast_convolution/fast_convolution.hpp
**Change Type:** added
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -0,0 +1,89 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+#ifndef OPENCV_FAST_CONVOLUTION_HPP
+#define OPENCV_FAST_CONVOLUTION_HPP
+
+#include "opencv2/core/hal/intrin.hpp"
+
```

Review comment:
in the original code it was a dedicated "free" function to deallocate FastConv2d structure and all its parts. This modification is not correct. AutoBuffer<> is intended to be used in functions. Each autobuffer takes several Kb of space in any case and is needed to minimize the memory allocation when the buffer is small most of the time. In the case of convolution the buffer for weights and especially for Winograd coefficients is usually much larger. Just use std::vector<> instead. But in this case use a regular C++ structure: ``` struct FastConv2d { }; ``` 1. do not use C-style structure: ```typedef struct FastConv2d { ... } FastConv2d;``` 2. do not use extra `float *weightsPtr, *weightsWino63Ptr;` Instead, extract those pointers from vectors inside functions: ```float* weightsPtr = &weightsBuf[0];``` etc.
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -71,6 +71,8 @@ using namespace cv::dnn::ocl4dnn;
 using namespace cv::dnn::cuda4dnn;
 #endif
 
+#include "fast_convolution/fast_convolution.hpp"
+
 namespace cv
 {
 namespace dnn
@@ -253,11 +255,14 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
```

Review comment:
fastConv2dImpl should be a proper C++ structure that will deallocate memory automatically. Please, remove this code from this destructor. The general principle in C++ - each structure should take care of itself. Do not deallocate parts of a structure from the parent structure/class.
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -71,6 +71,8 @@ using namespace cv::dnn::ocl4dnn;
 using namespace cv::dnn::cuda4dnn;
 #endif
 
+#include "fast_convolution/fast_convolution.hpp"
+
 namespace cv
 {
 namespace dnn
@@ -253,11 +255,14 @@ class ConvolutionLayerImpl CV_FINAL : public BaseConvolutionLayerImpl
```

Review comment:
Why do you need variableWeight check?
**File:** modules/dnn/src/layers/convolution_layer.cpp
**Change Type:** modified
**Context:** PR #21910: DNN: Accelerating convolution
**Review Line:** 2120

**Code Changes:**
```diff
+                runFastConv2d(inputs[0], outputs[0], fastConv2dImpl, nstripes, activ);
+                return;
+            }
+
+            // Use only for Conv1D and Conv3D.
             ParallelConv::run(inputs[0], outputs[0], weightsMat, biasvec, reluslope,
                             kernel_size, strides, pads_begin, pads_end, dilations, activ.get(), ngroups, nstripes);
+
         }
     }
 
```

Review comment:
Why do we need the old implementation of convolution? Why not remove it completely?
**File:** modules/dnn/src/layers/fast_convolution/depthwise_convolution.cpp
**Change Type:** added
**Context:** PR #21910: DNN: Accelerating convolution
**Review Line:** 380

**Code Changes:**
```diff
+            depthWiseBlock(inptr, outptr0, weights, biasval, ofstab, yxtab, minval, maxval, Hi, Wi, H0, W0, ksize,
+                           pad_top, pad_left, dilation_y, stride_x, stride_y, inner_xleft, inner_xright, inner_ytop,
+                           inner_ybottom, ifMinMaxAct, useSIMD, is3x3);
+
+            if (activ)
+                activ->forwardSlice(outptr0, outptr0, (int) out_planesize, out_planesize, c, c+1);
+        }
+    });
+}
+
+}} // namespace cv::dnn
```

Review comment:
can you please make sure that in the case of ReLU/ReLU6(Clip) a separate activation function is not called twice? I do not see where it's handled
**File:** modules/dnn/src/layers/fast_convolution/fast_convolution.cpp
**Change Type:** added
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -0,0 +1,694 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// This file is modified from the ficus (https://github.com/vpisarev/ficus/blob/master/lib/NN/OpConv.fx).
+// Here is the original license:
+/*
+    This file is a part of ficus language project.
+    See ficus/LICENSE for the licensing terms
```

Review comment:
please insert _ before NEON for consistency
**File:** modules/dnn/src/layers/fast_convolution/fast_convolution.simd.hpp
**Change Type:** added
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -0,0 +1,342 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+#ifndef OPENCV_FAST_CONVOLUTION_SIMD_HPP
+#define OPENCV_FAST_CONVOLUTION_SIMD_HPP
+
+#include "opencv2/core/hal/intrin.hpp"
+#include <opencv2/core/utils/logger.hpp>
```

Review comment:
Defualt => Default
**File:** modules/dnn/src/layers/fast_convolution/fast_convolution.simd.hpp
**Change Type:** added
**Context:** PR #21910: DNN: Accelerating convolution

**Code Changes:**
```diff
@@ -0,0 +1,342 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+#ifndef OPENCV_FAST_CONVOLUTION_SIMD_HPP
+#define OPENCV_FAST_CONVOLUTION_SIMD_HPP
+
+#include "opencv2/core/hal/intrin.hpp"
+#include <opencv2/core/utils/logger.hpp>
```

Review comment:
this will result in super-slow code. I suggest to allocate temporary buffer on stack: ``` float cbuf[FAST_CONV_MR*FAST_CONV_NR]; ``` accumulate the results there and then copy cbuf to c. According to my experience, the compilers will generate much, much better code if you do this.