MNN/express/module/PipelineModule.hpp

45 lines
1.9 KiB
C++
Raw Normal View History

//
// PipelineModule.hpp
// MNN
//
// Created by MNN on 2020/01/09.
// Copyright © 2018, Alibaba Group Holding Limited
//
#ifndef PipelineModule_hpp
#define PipelineModule_hpp
2020-11-05 16:41:56 +08:00
#include <MNN/expr/Module.hpp>
#include <MNN/expr/NN.hpp>
2020-02-26 09:57:17 +08:00
#include <MNN/expr/ExprCreator.hpp>
namespace MNN {
2020-11-05 16:41:56 +08:00
namespace Express {
class MNN_PUBLIC PipelineModule : public Module {
public:
typedef std::function<std::pair<std::vector<int>, std::shared_ptr<Module>>(Express::EXPRP)> Transformer;
2020-12-15 14:12:35 +08:00
static Module* load(const std::vector<std::string>& inputs, const std::vector<std::string>& outputs, const uint8_t* buffer, size_t length, const Module::Config* config = nullptr);
2020-11-05 16:41:56 +08:00
static Module* extract(std::vector<Express::VARP> inputs, std::vector<Express::VARP> outputs, bool fortrain, const std::map<std::string, SubGraph>& subGraph = {});
static bool turnQuantize(Module* module, const int bits = 8, NN::FeatureScaleStatMethod featureScaleStatMethod = NN::PerTensor, NN::ScaleUpdateMethod scaleUpdateMethod = NN::MovingAverage);
2020-02-26 09:57:17 +08:00
void toTrainQuant(const int bits = 8, NN::FeatureScaleStatMethod featureScaleStatMethod = NN::PerTensor,
NN::ScaleUpdateMethod scaleUpdateMethod = NN::MovingAverage);
virtual std::vector<Express::VARP> onForward(const std::vector<Express::VARP>& inputs) override;
virtual void onClearCache() override;
2020-06-06 14:35:23 +08:00
std::vector<int> countOutputReference(std::vector<int> outputIndices);
private:
2020-11-05 16:41:56 +08:00
PipelineModule(){}
PipelineModule(std::vector<Express::VARP> inputs, std::vector<Express::VARP> outputs,
const Transformer& transformFunction = {});
2020-11-05 16:41:56 +08:00
Module* clone(CloneContext* ctx) const override;
std::vector<std::tuple<std::shared_ptr<Module>, std::vector<int>, std::vector<int>>> mSubModules;
std::vector<int> mInputIndexes;
std::vector<int> mOutputIndexes;
2020-11-05 16:41:56 +08:00
int mStackSize = 0;
};
2020-11-05 16:41:56 +08:00
} // namespace Express
} // namespace MNN
#endif