
图2 系统基本流程
def ssd_net(self, scale=1.0):# 300x300tmp = self.conv_bn(self.img, 3, int(32 * scale), 2, 1)# 150x150tmp = self.depthwise_separable(tmp, 32, 64, 32, 1, scale)tmp = self.depthwise_separable(tmp, 64, 128, 64, 2, scale)# 75x75tmp = self.depthwise_separable(tmp, 128, 128, 128, 1, scale)tmp = self.depthwise_separable(tmp, 128, 256, 128, 2, scale)# 38x38tmp = self.depthwise_separable(tmp, 256, 256, 256, 1, scale)tmp = self.depthwise_separable(tmp, 256, 512, 256, 2, scale)# 19x19for i in range(5):tmp = self.depthwise_separable(tmp, 512, 512, 512, 1, scale)module11 = tmptmp = self.depthwise_separable(tmp, 512, 1024, 512, 2, scale)# 10x10module13 = self.depthwise_separable(tmp, 1024, 1024, 1024, 1, scale)module14 = self.extra_block(module13, 256, 512, 1, 2)# 5x5module15 = self.extra_block(module14, 128, 256, 1, 2)# 3x3module16 = self.extra_block(module15, 128, 256, 1, 2)# 2x2module17 = self.extra_block(module16, 64, 128, 1, 2)mbox_confs, box, box_var = fluid.layers.multi_box_head(inputs=[module13, module14, module15, module16, module17],image=self.img,num_classes=self.num_classes,min_ratio=20,max_ratio=90,min_sizes=[60.0, 105.0, 150.0, 195.0, 240.0, 285.0],max_sizes=[[], 150.0, 195.0, 240.0, 285.0, 300.0],aspect_ratios=[[2.], [2., 3.], [2., 3.], [2., 3.], [2., 3.],3.]],base_size=self.img_shape[2],offset=0.5,flip=True)return mbox_locs, mbox_confs, box, box_var
./opt \--model_dir=<model_param_dir> \--model_file=<model_path> \--param_file=<param_path> \--optimize_out_type=(protobuf|naive_buffer) \--optimize_out=<output_optimize_model_dir> \--valid_targets=(arm|opencl|x86|npu|xpu) \--prefer_int8_kernel=(true|false) \--record_tailoring_info =(true|false)
// 导入Java APIimport com.baidu.paddle.lite.MobileConfig;import com.baidu.paddle.lite.Tensor;import com.baidu.paddle.lite.PaddlePredictor;import com.baidu.paddle.lite.PowerMode;// 1. 写入配置:设置MobileConfigMobileConfig config = new MobileConfig();config.setModelFromFile(<modelPath>); // 设置Paddle Lite模型路径config.setPowerMode(PowerMode.LITE_POWER_NO_BIND); // 设置CPU运行模式config.setThreads(4); // 设置工作线程数// 2. 创建 PaddlePredictorPaddlePredictor predictor = PaddlePredictor.createPaddlePredictor(config);// 3. 设置输入数据long[] dims = {100, 100};float[] inputBuffer = new float[10000];for (int i = 0; i < 10000; ++i) {inputBuffer[i] = i;}Tensor input = predictor.getInput(0);input.resize(dims);input.setData(inputBuffer);// 4. 执行预测predictor.run();// 5. 获取输出数据Tensor result = predictor.getOutput(0);float[] output = result.getFloatData();for (int i = 0; i < 1000; ++i) {System.out.println(output[i]);}