Grayscale colorization model (https://github.com/richzhang/colorization) test.
This commit is contained in:
@@ -293,14 +293,13 @@ public:
|
||||
addedBlobs.reserve(layersSize + 1);
|
||||
|
||||
//setup input layer names
|
||||
std::vector<String> netInputs(net.input_size());
|
||||
{
|
||||
std::vector<String> netInputs(net.input_size());
|
||||
for (int inNum = 0; inNum < net.input_size(); inNum++)
|
||||
{
|
||||
addedBlobs.push_back(BlobNote(net.input(inNum), 0, inNum));
|
||||
netInputs[inNum] = net.input(inNum);
|
||||
}
|
||||
dstNet.setInputsNames(netInputs);
|
||||
}
|
||||
|
||||
for (int li = 0; li < layersSize; li++)
|
||||
@@ -317,6 +316,13 @@ public:
|
||||
if (repetitions)
|
||||
name += String("_") + toString(repetitions);
|
||||
|
||||
if (type == "Input")
|
||||
{
|
||||
addedBlobs.push_back(BlobNote(name, 0, netInputs.size()));
|
||||
netInputs.push_back(name);
|
||||
continue;
|
||||
}
|
||||
|
||||
int id = dstNet.addLayer(name, type, layerParams);
|
||||
|
||||
for (int inNum = 0; inNum < layer.bottom_size(); inNum++)
|
||||
@@ -325,6 +331,7 @@ public:
|
||||
for (int outNum = 0; outNum < layer.top_size(); outNum++)
|
||||
addOutput(layer, id, outNum);
|
||||
}
|
||||
dstNet.setInputsNames(netInputs);
|
||||
|
||||
addedBlobs.clear();
|
||||
}
|
||||
|
||||
@@ -106,6 +106,7 @@ void initializeLayerFactory()
|
||||
CV_DNN_REGISTER_LAYER_CLASS(MaxUnpool, MaxUnpoolLayer);
|
||||
CV_DNN_REGISTER_LAYER_CLASS(Dropout, BlankLayer);
|
||||
CV_DNN_REGISTER_LAYER_CLASS(Identity, BlankLayer);
|
||||
CV_DNN_REGISTER_LAYER_CLASS(Silence, BlankLayer);
|
||||
|
||||
CV_DNN_REGISTER_LAYER_CLASS(Crop, CropLayer);
|
||||
CV_DNN_REGISTER_LAYER_CLASS(Eltwise, EltwiseLayer);
|
||||
|
||||
@@ -311,15 +311,15 @@ public:
|
||||
Size kernel, Size pad, Size stride, Size dilation,
|
||||
const ActivationLayer* activ, int ngroups, int nstripes )
|
||||
{
|
||||
CV_Assert( input.dims == 4 && output.dims == 4 &&
|
||||
input.size[0] == output.size[0] &&
|
||||
weights.rows == output.size[1] &&
|
||||
weights.cols == (input.size[1]/ngroups)*kernel.width*kernel.height &&
|
||||
input.type() == output.type() &&
|
||||
input.type() == weights.type() &&
|
||||
input.type() == CV_32F &&
|
||||
input.isContinuous() &&
|
||||
output.isContinuous() &&
|
||||
CV_Assert( input.dims == 4 && output.dims == 4,
|
||||
input.size[0] == output.size[0],
|
||||
weights.rows == output.size[1],
|
||||
weights.cols == (input.size[1]/ngroups)*kernel.width*kernel.height,
|
||||
input.type() == output.type(),
|
||||
input.type() == weights.type(),
|
||||
input.type() == CV_32F,
|
||||
input.isContinuous(),
|
||||
output.isContinuous(),
|
||||
biasvec.size() == (size_t)output.size[1]+2);
|
||||
ParallelConv p;
|
||||
|
||||
@@ -1237,7 +1237,6 @@ static void initConvDeconvLayerFromCaffe(Ptr<BaseConvolutionLayer> l, const Laye
|
||||
l->pad.width, l->stride.height, l->stride.width, l->dilation.height,
|
||||
l->dilation.width, l->padMode);
|
||||
|
||||
bool bias = params.get<bool>("bias_term", true);
|
||||
l->numOutput = params.get<int>("num_output");
|
||||
int ngroups = params.get<int>("group", 1);
|
||||
|
||||
@@ -1245,7 +1244,6 @@ static void initConvDeconvLayerFromCaffe(Ptr<BaseConvolutionLayer> l, const Laye
|
||||
l->adjustPad.width = params.get<int>("adj_w", 0);
|
||||
|
||||
CV_Assert(l->numOutput % ngroups == 0);
|
||||
CV_Assert((bias && l->blobs.size() == 2) || (!bias && l->blobs.size() == 1));
|
||||
CV_Assert(l->adjustPad.width < l->stride.width &&
|
||||
l->adjustPad.height < l->stride.height);
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ public:
|
||||
std::vector<MatShape> &outputs,
|
||||
std::vector<MatShape> &internals) const
|
||||
{
|
||||
CV_Assert(blobs.size() == 1 + hasBias);
|
||||
Layer::getMemoryShapes(inputs, requiredOutputs, outputs, internals);
|
||||
return true;
|
||||
}
|
||||
@@ -48,8 +49,6 @@ public:
|
||||
CV_TRACE_FUNCTION();
|
||||
CV_TRACE_ARG_VALUE(name, "name", name.c_str());
|
||||
|
||||
CV_Assert(blobs.size() == 1 + hasBias);
|
||||
|
||||
for (size_t ii = 0; ii < outputs.size(); ii++)
|
||||
{
|
||||
Mat &inpBlob = *inputs[ii];
|
||||
|
||||
@@ -211,4 +211,27 @@ TEST(Reproducibility_GoogLeNet_fp16, Accuracy)
|
||||
normAssert(out, ref, "", l1, lInf);
|
||||
}
|
||||
|
||||
// https://github.com/richzhang/colorization
|
||||
TEST(Reproducibility_Colorization, Accuracy)
|
||||
{
|
||||
const float l1 = 1e-5;
|
||||
const float lInf = 3e-3;
|
||||
|
||||
Mat inp = blobFromNPY(_tf("colorization_inp.npy"));
|
||||
Mat ref = blobFromNPY(_tf("colorization_out.npy"));
|
||||
Mat kernel = blobFromNPY(_tf("colorization_pts_in_hull.npy"));
|
||||
|
||||
const string proto = findDataFile("dnn/colorization_deploy_v2.prototxt", false);
|
||||
const string model = findDataFile("dnn/colorization_release_v2.caffemodel", false);
|
||||
Net net = readNetFromCaffe(proto, model);
|
||||
|
||||
net.getLayer(net.getLayerId("class8_ab"))->blobs.push_back(kernel);
|
||||
net.getLayer(net.getLayerId("conv8_313_rh"))->blobs.push_back(Mat(1, 313, CV_32F, 2.606));
|
||||
|
||||
net.setInput(inp);
|
||||
Mat out = net.forward();
|
||||
|
||||
normAssert(out, ref, "", l1, lInf);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user