MStatus collisionShapeNode::compute( const MPlug& plug, MDataBlock& data )
{
    if(plug == oa_collisionShape) {
         computeOutputShape(plug, data);
    } else if(plug == ca_collisionShape) {
         computeCollisionShape(plug, data);
    } else  if(plug == ca_collisionShapeParam) {
         computeCollisionShapeParam(plug, data);
    } else {
        return MStatus::kUnknownParameter;
    }
    return MStatus::kSuccess;
}
void PoolingLayerImpl::allocate(const std::vector<Blob*> &inputs, std::vector<Blob> &outputs)
{
    CV_Assert(inputs.size() > 0);

    inp = inputs[0]->size2();
    computeOutputShape(inp);

    useOpenCL = ocl::useOpenCL();

    outputs.resize(inputs.size());
    for (size_t i = 0; i < inputs.size(); i++)
    {
        CV_Assert(inputs[i]->rows() == inp.height && inputs[i]->cols() == inp.width);
        outputs[i].create(BlobShape(inputs[i]->num(), inputs[i]->channels(), out.height, out.width));
    }
}