return true;
}
- bool visit(const coco::AvgPool2D *) override
+ bool visit(const coco::AvgPool2D *avgpool) override
{
+ if (avgpool->divisor() != coco::AvgPool2D::Divisor::PaddingExcluded)
+ {
+ // When ANN runtime computes the average of each receptive field,
+ // it uses the number of valid(=non-padding) elements as a divisor.
+ return false;
+ }
+
// TODO Check data layout
return true;
}
{
auto ifm = _binder->addOperand<float>(unit->ifm());
- // TODO Support padding
auto left = _binder->addOperand<int32_t>();
- _binder->setOperand(left, 0);
+ _binder->setOperand(left, avgpool->pad()->left());
auto right = _binder->addOperand<int32_t>();
- _binder->setOperand(right, 0);
+ _binder->setOperand(right, avgpool->pad()->right());
auto top = _binder->addOperand<int32_t>();
- _binder->setOperand(top, 0);
+ _binder->setOperand(top, avgpool->pad()->top());
auto bottom = _binder->addOperand<int32_t>();
- _binder->setOperand(bottom, 0);
+ _binder->setOperand(bottom, avgpool->pad()->bottom());
// Set horizontal/vertical stride
auto hstride = _binder->addOperand<int32_t>();