Skip to content
Snippets Groups Projects
Commit f67869d9 authored by Olivier BICHLER's avatar Olivier BICHLER
Browse files

Padding interface change to match ONNX

parent c20897c1
No related branches found
No related tags found
1 merge request!14Padding interface change to match ONNX
Pipeline #32949 failed
......@@ -37,8 +37,8 @@ void PadImpl2D_cpu_forward_kernel(const Pad_Op<2>::Attrs &attrs, const std::arra
const I *input = static_cast<const I *>(input_);
O *output = static_cast<O *>(output_);
const std::size_t oySize = dims[2] + std::get<0>(attrs)[0][0] + std::get<0>(attrs)[0][1];
const std::size_t oxSize = dims[3] + std::get<0>(attrs)[1][0] + std::get<0>(attrs)[1][1];
const std::size_t oySize = dims[2] + std::get<0>(attrs)[0] + std::get<0>(attrs)[1];
const std::size_t oxSize = dims[3] + std::get<0>(attrs)[2] + std::get<0>(attrs)[3];
for (std::size_t batch = 0; batch < dims[0]; ++batch) {
for (std::size_t ch = 0; ch < dims[1]; ++ch) {
......@@ -52,22 +52,22 @@ void PadImpl2D_cpu_forward_kernel(const Pad_Op<2>::Attrs &attrs, const std::arra
O outputValue = std::get<2>(attrs);
if (std::get<1>(attrs) == PadBorderType::Constant) {
int ix = static_cast<int>(ox) - static_cast<int>(std::get<0>(attrs)[1][1]);
int iy = static_cast<int>(oy) - static_cast<int>(std::get<0>(attrs)[0][1]);
int ix = static_cast<int>(ox) - static_cast<int>(std::get<0>(attrs)[3]);
int iy = static_cast<int>(oy) - static_cast<int>(std::get<0>(attrs)[1]);
if (ix >= 0 && ix < static_cast<int>(dims[3]) && iy >= 0 && iy < static_cast<int>(dims[2])) {
outputValue = input[iIndex + static_cast<std::size_t>(ix)*dims[2] + static_cast<std::size_t>(iy)];
}
}
else if (std::get<1>(attrs) == PadBorderType::Replicate) {
int ix = std::max(0, std::min(static_cast<int>(dims[3]) - 1, static_cast<int>(ox) - static_cast<int>(std::get<0>(attrs)[1][1])));
int iy = std::max(0, std::min(static_cast<int>(dims[2]) - 1, static_cast<int>(oy) - static_cast<int>(std::get<0>(attrs)[0][1])));
else if (std::get<1>(attrs) == PadBorderType::Edge) {
int ix = std::max(0, std::min(static_cast<int>(dims[3]) - 1, static_cast<int>(ox) - static_cast<int>(std::get<0>(attrs)[3])));
int iy = std::max(0, std::min(static_cast<int>(dims[2]) - 1, static_cast<int>(oy) - static_cast<int>(std::get<0>(attrs)[1])));
outputValue = input[iIndex + static_cast<std::size_t>(ix)*dims[2] + static_cast<std::size_t>(iy)];
}
else if (std::get<1>(attrs) == PadBorderType::Reflect) {
int ix = static_cast<int>(ox) - static_cast<int>(std::get<0>(attrs)[1][1]);
int iy = static_cast<int>(oy) - static_cast<int>(std::get<0>(attrs)[0][1]);
int ix = static_cast<int>(ox) - static_cast<int>(std::get<0>(attrs)[3]);
int iy = static_cast<int>(oy) - static_cast<int>(std::get<0>(attrs)[1]);
if (ix < 0)
ix = 0 - ix;
......@@ -81,8 +81,8 @@ void PadImpl2D_cpu_forward_kernel(const Pad_Op<2>::Attrs &attrs, const std::arra
outputValue = input[iIndex + static_cast<std::size_t>(ix)*dims[2] + static_cast<std::size_t>(iy)];
}
else if (std::get<1>(attrs) == PadBorderType::Wrap) {
int ix = (static_cast<int>(dims[3]) + static_cast<int>(ox) - static_cast<int>(std::get<0>(attrs)[1][1])) % static_cast<int>(dims[3]);
int iy = (static_cast<int>(dims[2]) + static_cast<int>(oy) - static_cast<int>(std::get<0>(attrs)[0][1])) % static_cast<int>(dims[2]);
int ix = (static_cast<int>(dims[3]) + static_cast<int>(ox) - static_cast<int>(std::get<0>(attrs)[3])) % static_cast<int>(dims[3]);
int iy = (static_cast<int>(dims[2]) + static_cast<int>(oy) - static_cast<int>(std::get<0>(attrs)[1])) % static_cast<int>(dims[2]);
outputValue = input[iIndex + static_cast<std::size_t>(ix)*dims[2] + static_cast<std::size_t>(iy)];
}
......
......@@ -24,7 +24,7 @@ TEST_CASE("[cpu/operator] Pad(forward)") {
SECTION("Symmetric Pad") {
const int pv = 0; // pad value
std::shared_ptr<Node> myPad = Pad({{1, 1}, {1, 1}}, "mypad", PadBorderType::Constant, static_cast<double>(pv));
std::shared_ptr<Node> myPad = Pad({1, 1, 1, 1}, "mypad", PadBorderType::Constant, static_cast<double>(pv));
myPad->getOperator()->setDatatype(DataType::Int32);
myPad->getOperator()->setBackend("cpu");
std::shared_ptr<Tensor> myInput = std::make_shared<Tensor>(Array4D<int,2,3,5,5> { //NCHW
......@@ -134,7 +134,7 @@ TEST_CASE("[cpu/operator] Pad(forward)") {
SECTION("Asymmetric Pad") {
const int pv = 0; // pad value
std::shared_ptr<Node> myPad = Pad({{1, 0}, {0, 1}}, "mypad", PadBorderType::Constant, static_cast<double>(pv));
std::shared_ptr<Node> myPad = Pad({1, 0, 0, 1}, "mypad", PadBorderType::Constant, static_cast<double>(pv));
myPad->getOperator()->setDatatype(DataType::Int32);
myPad->getOperator()->setBackend("cpu");
std::shared_ptr<Tensor> myInput = std::make_shared<Tensor>(Array4D<int,2,3,5,5> { //NCHW
......@@ -235,8 +235,8 @@ TEST_CASE("[cpu/operator] Pad(forward)") {
REQUIRE(*(myPad->getOperator()->getOutput(0)) == *myOutput);
}
SECTION("Pad Replicate") {
std::shared_ptr<Node> myPad = Pad({{1, 1}, {1, 1}}, "mypad", PadBorderType::Replicate);
SECTION("Pad Edge") {
std::shared_ptr<Node> myPad = Pad({1, 1, 1, 1}, "mypad", PadBorderType::Edge);
myPad->getOperator()->setDatatype(DataType::Int32);
myPad->getOperator()->setBackend("cpu");
std::shared_ptr<Tensor> myInput = std::make_shared<Tensor>(Array4D<int,2,3,5,5> { //NCHW
......@@ -344,7 +344,7 @@ TEST_CASE("[cpu/operator] Pad(forward)") {
}
SECTION("Pad Reflect") {
std::shared_ptr<Node> myPad = Pad({{1, 1}, {1, 1}}, "mypad", PadBorderType::Reflect);
std::shared_ptr<Node> myPad = Pad({1, 1, 1, 1}, "mypad", PadBorderType::Reflect);
myPad->getOperator()->setDatatype(DataType::Int32);
myPad->getOperator()->setBackend("cpu");
std::shared_ptr<Tensor> myInput = std::make_shared<Tensor>(Array4D<int,2,3,5,5> { //NCHW
......@@ -460,7 +460,7 @@ TEST_CASE("[cpu/operator] Pad(forward)") {
}
SECTION("Pad Wrap") {
std::shared_ptr<Node> myPad = Pad({{1, 1}, {1, 1}}, "mypad", PadBorderType::Wrap);
std::shared_ptr<Node> myPad = Pad({1, 1, 1, 1}, "mypad", PadBorderType::Wrap);
myPad->getOperator()->setDatatype(DataType::Int32);
myPad->getOperator()->setBackend("cpu");
std::shared_ptr<Tensor> myInput = std::make_shared<Tensor>(Array4D<int,2,3,5,5> { //NCHW
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment