人工智能是一门研究如何使机器能够智能地行动的学科,也是现代人工智能技术制造*核心的技术之一。随着人工智能的发展,利用大数据和机器学习等技术,使制造过程更加智能化和自动化。例如,【系统176搭建·0206-可电可微5616-】生产计划和调度等工作可以由机器自动完成,同时通过机器学习技术,制造过程中的一些异常情况也可以被及时识别和处理。voidCalibration::_updateScale()
for(const auto&op:_originaleModel->oplists){
std::vector<std::string>::iteratoriter=std::find(_skip_(),_skip_(),op->name);
if(iter!=_skip_()){
continue;
}
const auto opType=op->type;
if(opType!=MNN::OpType_Convolution&&opType!=MNN::OpType_ConvolutionDepthwise&&
opType!=MNN::OpType_Eltwise){
continue;
}
auto tensorsPair=_opInfo.find(op->name);
if(tensorsPair==_opInfo.end()){
MNN_ERROR("Can't find tensors for%sn",op->name.c_str());
if(opType==MNN::OpType_Eltwise){
auto param=op->main.AsEltwise();
//Now only support AddInt8
if(param->type!=MNN::EltwiseType_SUM){
continue;
}
constauto&inputScale0=_scales[tensorsPair->second.first[0]];
constauto&inputScale1=_scales[tensorsPair->second.first[1]];
constauto&outputScale=_scales[tensorsPair->second.second[0]];
const int outputScaleSize=outputScale.size();
std::vector<float>outputInvertScale(outputScaleSize);
Helper::invertData(outputInvertScale.data(),outputScale.data(),outputScaleSize);
op->type=MNN::OpType_EltwiseInt8;
op->main.Reset();
op->main.type=MNN::OpParameter_EltwiseInt8;
auto eltwiseInt8Param=new MNN::EltwiseInt8T;
auto input0ScaleParam=new MNN::amT;
auto input1ScaleParam=new MNN::amT;
auto outputScaleParam=new MNN::amT;
input0ScaleParam->tensorScale=inputScale0;
input1ScaleParam->tensorScale=inputScale1;
outputScaleParam->tensorScale=outputInvertScale;
eltwiseInt8Param->inputQuan0=std::uni<MNN::amT>(input0ScaleParam);
eltwiseInt8Param->inputQuan1=std::uni<MNN::amT>(input1ScaleParam);
eltwiseInt8Param->outputQuan=std::uni<MNN::amT>(outputScaleParam);
op->main.value=eltwiseInt8Param;
continue;
//below is Conv/DepthwiseConv
constauto&inputScale=_scales[tensorsPair->second.first[0]];
auto param=op->main.AsConvolution2D();
const int channles=param->common->outputCount;
const int weightSize=param->weight.size();
param->symmetric(new MNN::amT);
//是param->symmetricQuan的引用
auto&=param->symmetricQuan;
->scale.resize(channles);
->weight.resize(weightSize);
->bias.resize(channles);
if(opType==MNN::OpType_Convolution){
annel(param->weight.data(),param->weight.size(),param->bias.data(),
->weight.data(),->bias.data(),
->scale.data(),inputScale,outputScale,_weight,_weightClampValue);
op->type=MNN::OpType_ConvInt8;
}else if(opType==MNN::OpType_ConvolutionDepthwise){
Conv(param->weight.data(),param->weight.size(),param->bias.data(),