Skip to content

Commit

Permalink
still working on
Browse files Browse the repository at this point in the history
  • Loading branch information
Abdurrahheem committed Apr 9, 2024
1 parent 5a22a1f commit b3e4e58
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 11 deletions.
6 changes: 6 additions & 0 deletions modules/dnn/src/layers/padding_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ class PaddingLayerImpl CV_FINAL : public PaddingLayer
const MatShape& inpShape = inputs[0];
std::cout << "inpShape.size() = " << inpShape << std::endl;
// std::cout << "paddings: " << paddings << std::endl;
if (inpShape.empty()){
std::cout << "in the new branch" << std::endl;
outputs.resize(1, MatShape(1, paddings.size() + 1));
std::cout << "outputs: " << outputs[0] << std::endl;
return false;
}
CV_Assert(inpShape.size() >= paddings.size());

CV_Assert(inputDims == -1 || inpShape.size() == inputDims || inpShape.size() > paddings.size());
Expand Down
43 changes: 32 additions & 11 deletions modules/dnn/test/test_layers_1d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -513,32 +513,53 @@ INSTANTIATE_TEST_CASE_P(/*nothing*/, Layer_Permute_Test,
std::vector<int>{4, 1}
));

TEST(Layer_Padding_Test, Accuracy){
typedef testing::TestWithParam<tuple<std::vector<int>>> Layer_Padding_Test;
TEST_P(Layer_Padding_Test, Accuracy_01D){

std::vector<int> input_shape = get<0>(GetParam());
float pad_value = 10;

LayerParams lp;
lp.type = "Padding";
lp.name = "PaddingLayer";
// std::vector<int>paddings = {1};
// lp.set("paddings", DictValue::arrayInt(paddings.begin(), paddings.size()));
std::vector<int> paddings = {1, 1}; // Pad before and pad after for one dimension
lp.set("paddings", DictValue::arrayInt(paddings.data(), paddings.size()));
lp.set("value", pad_value);
lp.set("input_dims", (input_shape.size() == 1) ? -1 : 0);
Ptr<PaddingLayer> layer = PaddingLayer::create(lp);

std::vector<int> input_shape = {0};
std::vector<int> output_shape = {1};

cv::Mat input(0, input_shape.data(), CV_32F, 1.0);
// cv::randn(input, 0.0, 1.0);
cv::Mat input(input_shape.size(), input_shape.data(), CV_32F);
cv::randn(input, 0.0, 1.0);

float data[] = {0, 1, 0};
cv::Mat output_ref(output_shape, CV_32F, data);
// create a refence
cv::Mat output_ref;
cv::copyMakeBorder(input, output_ref, 0, 0, 1, 1, 0, (Scalar) pad_value);
if (input_shape.size() == 0 || input_shape.size() == 1){
std::cout << "shape output_ref: " << shape(output_ref) << std::endl;
std::cout << "total: " << output_ref.total() << std::endl;
// output_ref = output_ref.reshape(1, {3});
output_ref.dims = 1;
}
std::cout << "input: " << input << std::endl;
std::cout << "output_ref: " << output_ref << std::endl;
std::cout << "shape output_ref: " << shape(output_ref) << std::endl;

std::vector<Mat> inputs{input};
std::vector<Mat> outputs;

runLayer(layer, inputs, outputs);
std::cout << "output[0]: " << outputs[0] << std::endl;
std::cout << "output[0] shape: " << shape(outputs[0]) << std::endl;
ASSERT_EQ(outputs.size(), 1);
ASSERT_EQ(shape(output_ref), shape(outputs[0]));
normAssert(output_ref, outputs[0]);
}

INSTANTIATE_TEST_CASE_P(/*nothing*/, Layer_Padding_Test,
/*input blob shape*/ testing::Values(
std::vector<int>{},
std::vector<int>{1},
std::vector<int>{1, 4},
std::vector<int>{4, 1}
));

}}

0 comments on commit b3e4e58

Please sign in to comment.