mirror of
https://github.com/opencv/opencv.git
synced 2025-08-06 14:36:36 +08:00
Merge pull request #15572 from l-bat:deconv3d
Fix computation of internal shapes in Deconvolution layer * Fix computation of internal shapes * Refactoring
This commit is contained in:
parent
e3daf489c8
commit
e923712d81
@ -2452,6 +2452,12 @@ struct Net::Impl
|
|||||||
int requiredOutputs = layers[id].requiredOutputs.size();
|
int requiredOutputs = layers[id].requiredOutputs.size();
|
||||||
inOutShapes[id].supportInPlace =
|
inOutShapes[id].supportInPlace =
|
||||||
layers[id].getLayerInstance()->getMemoryShapes(is, requiredOutputs, os, ints);
|
layers[id].getLayerInstance()->getMemoryShapes(is, requiredOutputs, os, ints);
|
||||||
|
|
||||||
|
for (int i = 0; i < ints.size(); i++)
|
||||||
|
CV_Assert(total(ints[i]) > 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < os.size(); i++)
|
||||||
|
CV_Assert(total(os[i]) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void getLayersShapes(const ShapesVec& netInputShapes,
|
void getLayersShapes(const ShapesVec& netInputShapes,
|
||||||
|
@ -240,10 +240,14 @@ public:
|
|||||||
|
|
||||||
MatShape computeColRowShape(const MatShape &inpShape, const MatShape &outShape) const CV_OVERRIDE
|
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 inpGroupCn = blobs[0].size[1];
|
||||||
int ksize = inpGroupCn * kernel.height * kernel.width;
|
int ksize = inpGroupCn * std::accumulate(kernel_size.begin(), kernel_size.end(),
|
||||||
return shape(out.area(), ksize);
|
1, std::multiplies<size_t>());
|
||||||
|
return shape(inpD * inpH * inpW, ksize);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
||||||
@ -1228,14 +1232,17 @@ public:
|
|||||||
|
|
||||||
MatShape computeColRowShape(const MatShape &inpShape, const MatShape &outShape) const CV_OVERRIDE
|
MatShape computeColRowShape(const MatShape &inpShape, const MatShape &outShape) const CV_OVERRIDE
|
||||||
{
|
{
|
||||||
|
int dims = inpShape.size();
|
||||||
int inpCn = inpShape[1];
|
int inpCn = inpShape[1];
|
||||||
int inpH = inpShape[2];
|
int inpD = dims == 5 ? inpShape[2] : 1;
|
||||||
int inpW = inpShape[3];
|
int inpH = inpShape[dims - 2];
|
||||||
|
int inpW = inpShape.back();
|
||||||
int outCn = outShape[1];
|
int outCn = outShape[1];
|
||||||
int ngroups = inpCn / blobs[0].size[0];
|
int ngroups = inpCn / blobs[0].size[0];
|
||||||
int outGroupCn = outCn / ngroups;
|
int outGroupCn = outCn / ngroups;
|
||||||
int ksize = outGroupCn * kernel.height * kernel.width;
|
int ksize = outGroupCn * std::accumulate(kernel_size.begin(), kernel_size.end(),
|
||||||
return shape(ksize, inpH * inpW);
|
1, std::multiplies<size_t>());
|
||||||
|
return shape(ksize, inpD * inpH * inpW);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
||||||
|
Loading…
Reference in New Issue
Block a user