dnn: don't use aligned load without alignment checks

- weights are unaligned in dasiamprn sample (comes from numpy)

original commit: 80d9f624d0
This commit is contained in:
Alexander Alekhin
2022-01-12 04:14:48 +00:00
committed by Alexander Alekhin
parent b1d3edad73
commit fb570b0172
2 changed files with 5 additions and 2 deletions

View File

@@ -421,7 +421,9 @@ public:
if (!blobs.empty())
{
Mat wm = blobs[0].reshape(1, numOutput);
if( wm.step1() % VEC_ALIGN != 0 )
if ((wm.step1() % VEC_ALIGN != 0) ||
!isAligned<VEC_ALIGN * sizeof(float)>(wm.data)
)
{
int newcols = (int)alignSize(wm.step1(), VEC_ALIGN);
Mat wm_buffer = Mat(numOutput, newcols, wm.type());
@@ -1660,7 +1662,6 @@ public:
}
}
}
// now compute dot product of the weights
// and im2row-transformed part of the tensor
#if CV_TRY_AVX512_SKX

View File

@@ -81,6 +81,8 @@ void fastConv( const float* weights, size_t wstep, const float* bias,
int blockSize, int vecsize, int vecsize_aligned,
const float* relu, bool initOutput )
{
CV_Assert(isAligned<32>(weights));
int outCn = outShape[1];
size_t outPlaneSize = outShape[2]*outShape[3];
float r0 = 1.f, r1 = 1.f, r2 = 1.f;