// // CPUDeconvolutionDepthwise.hpp // MNN // // Created by MNN on 2018/07/23. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef CPUDeconvolutionDepthwise_hpp #define CPUDeconvolutionDepthwise_hpp #include "backend/cpu/CPUDeconvolution.hpp" namespace MNN { class CPUDeconvolutionDepthwiseBasic : public CPUDeconvolutionBasic { public: CPUDeconvolutionDepthwiseBasic(int inputChannel, const Op *convOp, Backend *b) : CPUDeconvolutionBasic(inputChannel, convOp, b) { } virtual ~CPUDeconvolutionDepthwiseBasic() = default; virtual ErrorCode onResize(const std::vector &inputs, const std::vector &outputs) override; virtual ErrorCode onExecute(const std::vector &inputs, const std::vector &outputs) override; private: std::function mFunction; }; class CPUDeconvolutionDepthwiseMultiInput : public CPUDeconvolutionDepthwiseBasic { public: CPUDeconvolutionDepthwiseMultiInput(int inputChannel, const Op *convOp, Backend *b) : CPUDeconvolutionDepthwiseBasic(inputChannel, convOp, b) { } virtual ~CPUDeconvolutionDepthwiseMultiInput() = default; virtual ErrorCode onResize(const std::vector &inputs, const std::vector &outputs) override; virtual ErrorCode onExecute(const std::vector &inputs, const std::vector &outputs) override; private: std::shared_ptr mWeight; std::shared_ptr mBias; std::vector mInputs; }; class CPUDeconvolutionDepthwise : public CPUDeconvolutionBasic { public: static std::shared_ptr makeResource(int inputChannel, const Op *convOp, Backend *b); CPUDeconvolutionDepthwise(int inputChannel, const Op *convOp, Backend *b, std::shared_ptr res); virtual ~CPUDeconvolutionDepthwise(); virtual ErrorCode onResize(const std::vector &inputs, const std::vector &outputs) override { mInputs = {inputs[0], mResource->mWeight.get(), mResource->mBias.get()}; return mOrigin->onResize(mInputs, outputs); } virtual bool onClone(Backend* bn, const Op* op, Execution** dst) override; virtual ErrorCode onExecute(const std::vector &inputs, const std::vector &outputs) override { return mOrigin->onExecute(mInputs, outputs); } private: std::shared_ptr mResource; std::vector mInputs; std::unique_ptr mOrigin; }; } // namespace MNN #endif /* CPUDeconvolutionDepthwise_hpp */