|
|
|
@ -240,10 +240,14 @@ public: |
|
|
|
|
|
|
|
|
|
MatShape computeColRowShape(const MatShape &inpShape, const MatShape &outShape) const CV_OVERRIDE |
|
|
|
|
{ |
|
|
|
|
Size out(outShape[3], outShape[2]); |
|
|
|
|
int dims = inpShape.size(); |
|
|
|
|
int inpD = dims == 5 ? inpShape[2] : 1; |
|
|
|
|
int inpH = inpShape[dims - 2]; |
|
|
|
|
int inpW = inpShape.back(); |
|
|
|
|
int inpGroupCn = blobs[0].size[1]; |
|
|
|
|
int ksize = inpGroupCn * kernel.height * kernel.width; |
|
|
|
|
return shape(out.area(), ksize); |
|
|
|
|
int ksize = inpGroupCn * std::accumulate(kernel_size.begin(), kernel_size.end(), |
|
|
|
|
1, std::multiplies<size_t>()); |
|
|
|
|
return shape(inpD * inpH * inpW, ksize); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
virtual bool supportBackend(int backendId) CV_OVERRIDE |
|
|
|
@ -1228,14 +1232,17 @@ public: |
|
|
|
|
|
|
|
|
|
MatShape computeColRowShape(const MatShape &inpShape, const MatShape &outShape) const CV_OVERRIDE |
|
|
|
|
{ |
|
|
|
|
int dims = inpShape.size(); |
|
|
|
|
int inpCn = inpShape[1]; |
|
|
|
|
int inpH = inpShape[2]; |
|
|
|
|
int inpW = inpShape[3]; |
|
|
|
|
int inpD = dims == 5 ? inpShape[2] : 1; |
|
|
|
|
int inpH = inpShape[dims - 2]; |
|
|
|
|
int inpW = inpShape.back(); |
|
|
|
|
int outCn = outShape[1]; |
|
|
|
|
int ngroups = inpCn / blobs[0].size[0]; |
|
|
|
|
int outGroupCn = outCn / ngroups; |
|
|
|
|
int ksize = outGroupCn * kernel.height * kernel.width; |
|
|
|
|
return shape(ksize, inpH * inpW); |
|
|
|
|
int ksize = outGroupCn * std::accumulate(kernel_size.begin(), kernel_size.end(), |
|
|
|
|
1, std::multiplies<size_t>()); |
|
|
|
|
return shape(ksize, inpD * inpH * inpW); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
virtual bool supportBackend(int backendId) CV_OVERRIDE |
|
|
|
|