Skip to content

Commit 847bb6a

Browse files
committed
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into fpn_ops
2 parents f0177a1 + 893789a commit 847bb6a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+2946
-690
lines changed

paddle/fluid/API.spec

+5-3
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ paddle.fluid.layers.row_conv (ArgSpec(args=['input', 'future_context_size', 'par
128128
paddle.fluid.layers.multiplex (ArgSpec(args=['inputs', 'index'], varargs=None, keywords=None, defaults=None), ('document', '013795af319e2e86d3506741941078ee'))
129129
paddle.fluid.layers.layer_norm (ArgSpec(args=['input', 'scale', 'shift', 'begin_norm_axis', 'epsilon', 'param_attr', 'bias_attr', 'act', 'name'], varargs=None, keywords=None, defaults=(True, True, 1, 1e-05, None, None, None, None)), ('document', 'de6a906950bae9f3c245cb744d22b94e'))
130130
paddle.fluid.layers.group_norm (ArgSpec(args=['input', 'groups', 'epsilon', 'param_attr', 'bias_attr', 'act', 'data_layout', 'name'], varargs=None, keywords=None, defaults=(1e-05, None, None, None, 'NCHW', None)), ('document', '419c3a24a83cc89219a029cf4092788b'))
131+
paddle.fluid.layers.spectral_norm (ArgSpec(args=['weight', 'dim', 'power_iters', 'eps', 'name'], varargs=None, keywords=None, defaults=(0, 1, 1e-12, None)), ('document', '3f536aafba30d793287b52d231baff1b'))
131132
paddle.fluid.layers.softmax_with_cross_entropy (ArgSpec(args=['logits', 'label', 'soft_label', 'ignore_index', 'numeric_stable_mode', 'return_softmax'], varargs=None, keywords=None, defaults=(False, -100, True, False)), ('document', 'bce1b75e3d95b75cacd1099655cbb3c3'))
132133
paddle.fluid.layers.smooth_l1 (ArgSpec(args=['x', 'y', 'inside_weight', 'outside_weight', 'sigma'], varargs=None, keywords=None, defaults=(None, None, None)), ('document', 'c6b175d253c55baf4b9c0eca9b1dda88'))
133134
paddle.fluid.layers.one_hot (ArgSpec(args=['input', 'depth'], varargs=None, keywords=None, defaults=None), ('document', '6148b6a555cbfb62fdcd030d8982c18c'))
@@ -261,7 +262,7 @@ paddle.fluid.layers.Switch.default (ArgSpec(args=['self'], varargs=None, keyword
261262
paddle.fluid.layers.increment (ArgSpec(args=['x', 'value', 'in_place'], varargs=None, keywords=None, defaults=(1.0, True)), ('document', '73bb96ec4783ec1a11e760e8851b0e77'))
262263
paddle.fluid.layers.array_write (ArgSpec(args=['x', 'i', 'array'], varargs=None, keywords=None, defaults=(None,)), ('document', '40b6d15f4c86b2b09df340d7778ad713'))
263264
paddle.fluid.layers.create_array (ArgSpec(args=['dtype'], varargs=None, keywords=None, defaults=None), ('document', '2d4f20087080ba5105b55205ad5c5b6a'))
264-
paddle.fluid.layers.less_than (ArgSpec(args=['x', 'y', 'force_cpu', 'cond'], varargs=None, keywords='ignored', defaults=(None, None)), ('document', '067bbc799c66289ca8b8924c26b6673f'))
265+
paddle.fluid.layers.less_than (ArgSpec(args=['x', 'y', 'force_cpu', 'cond'], varargs=None, keywords=None, defaults=(None, None)), ('document', '067bbc799c66289ca8b8924c26b6673f'))
265266
paddle.fluid.layers.equal (ArgSpec(args=['x', 'y', 'cond'], varargs=None, keywords=None, defaults=(None,)), ('document', '80c29b1dc64718f0116de90d1ac88a77'))
266267
paddle.fluid.layers.array_read (ArgSpec(args=['array', 'i'], varargs=None, keywords=None, defaults=None), ('document', '0275133f1dde2aed528b4d3230edf823'))
267268
paddle.fluid.layers.array_length (ArgSpec(args=['array'], varargs=None, keywords=None, defaults=None), ('document', 'ffb8b9578ec66db565b223d313aa82a2'))
@@ -286,7 +287,7 @@ paddle.fluid.layers.StaticRNN.step_output (ArgSpec(args=['self', 'o'], varargs=N
286287
paddle.fluid.layers.StaticRNN.update_memory (ArgSpec(args=['self', 'mem', 'var'], varargs=None, keywords=None, defaults=None), ('document', '6adf97f83acf6453d4a6a4b1070f3754'))
287288
paddle.fluid.layers.reorder_lod_tensor_by_rank (ArgSpec(args=['x', 'rank_table'], varargs=None, keywords=None, defaults=None), ('document', '3545f529ef04e8f6ecb76b47fa3df01a'))
288289
paddle.fluid.layers.Print (ArgSpec(args=['input', 'first_n', 'message', 'summarize', 'print_tensor_name', 'print_tensor_type', 'print_tensor_shape', 'print_tensor_lod', 'print_phase'], varargs=None, keywords=None, defaults=(-1, None, -1, True, True, True, True, 'both')), ('document', '5fef91b0e21c93610785f2b1f7161732'))
289-
paddle.fluid.layers.is_empty (ArgSpec(args=['x', 'cond'], varargs=None, keywords='ignored', defaults=(None,)), ('document', 'bbe578dbb49ad13e15b014e98c22b519'))
290+
paddle.fluid.layers.is_empty (ArgSpec(args=['x', 'cond'], varargs=None, keywords=None, defaults=(None,)), ('document', 'bbe578dbb49ad13e15b014e98c22b519'))
290291
paddle.fluid.layers.sigmoid (ArgSpec(args=['x', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '29a25ba78de79152076cacfc5443137d'))
291292
paddle.fluid.layers.logsigmoid (ArgSpec(args=['x', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '81ccb7acafd06c7728e11581f5d342e3'))
292293
paddle.fluid.layers.exp (ArgSpec(args=['x', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', 'e6b3e769413d96aab4176f96db25984b'))
@@ -328,7 +329,8 @@ paddle.fluid.layers.polygon_box_transform (ArgSpec(args=['input', 'name'], varar
328329
paddle.fluid.layers.yolov3_loss (ArgSpec(args=['x', 'gtbox', 'gtlabel', 'anchors', 'anchor_mask', 'class_num', 'ignore_thresh', 'downsample_ratio', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '991e934c3e09abf0edec7c9c978b4691'))
329330
paddle.fluid.layers.box_clip (ArgSpec(args=['input', 'im_info', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '397e9e02b451d99c56e20f268fa03f2e'))
330331
paddle.fluid.layers.multiclass_nms (ArgSpec(args=['bboxes', 'scores', 'score_threshold', 'nms_top_k', 'keep_top_k', 'nms_threshold', 'normalized', 'nms_eta', 'background_label', 'name'], varargs=None, keywords=None, defaults=(0.3, True, 1.0, 0, None)), ('document', 'ca7d1107b6c5d2d6d8221039a220fde0'))
331-
paddle.fluid.layers.distribute_fpn_proposals (ArgSpec(args=['fpn_rois', 'min_level', 'max_level', 'refer_level', 'refer_scale', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', 'fdffe52577f7e74c090b030867fefc11'))
332+
paddle.fluid.layers.distribute_fpn_proposals (ArgSpec(args=['fpn_rois', 'min_level', 'max_level', 'refer_level', 'refer_scale', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '7bb011ec26bace2bc23235aa4a17647d'))
333+
paddle.fluid.layers.box_decoder_and_assign (ArgSpec(args=['prior_box', 'prior_box_var', 'target_box', 'box_score', 'box_clip', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '005a5ae47d6c8fff721931d69d072b9f'))
332334
paddle.fluid.layers.accuracy (ArgSpec(args=['input', 'label', 'k', 'correct', 'total'], varargs=None, keywords=None, defaults=(1, None, None)), ('document', '9808534c12c5e739a10f73ebb0b4eafd'))
333335
paddle.fluid.layers.auc (ArgSpec(args=['input', 'label', 'curve', 'num_thresholds', 'topk', 'slide_steps'], varargs=None, keywords=None, defaults=('ROC', 4095, 1, 1)), ('document', 'e0e95334fce92d16c2d9db6e7caffc47'))
334336
paddle.fluid.layers.exponential_decay (ArgSpec(args=['learning_rate', 'decay_steps', 'decay_rate', 'staircase'], varargs=None, keywords=None, defaults=(False,)), ('document', '98a5050bee8522fcea81aa795adaba51'))

paddle/fluid/framework/details/build_strategy.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#pragma once
1616

17+
#include <memory>
1718
#include <string>
1819
#include <vector>
1920

@@ -76,11 +77,11 @@ struct BuildStrategy {
7677

7778
bool fuse_relu_depthwise_conv_{false};
7879

79-
bool memory_optimize_{false};
80+
bool memory_optimize_{true};
8081
// TODO(dzhwinter):
8182
// make enable_inplace, memory_optimize_
8283
// memory_early_delete_ true by default
83-
bool enable_inplace_{false};
84+
bool enable_inplace_{true};
8485

8586
bool enable_sequential_execution_{false};
8687

paddle/fluid/framework/details/memory_optimize_helper.cc

+7-5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
#include <numeric>
2121
#include <sstream>
2222
#include <string>
23+
#include <unordered_map>
24+
#include <unordered_set>
25+
#include "paddle/fluid/framework/operator.h"
2326
#include "paddle/fluid/framework/var_desc.h"
2427
#include "paddle/fluid/platform/cpu_info.h"
2528

@@ -302,7 +305,10 @@ std::string OrderedSet::ToString() const {
302305

303306
bool NodeCanReused(ir::Node* node) {
304307
// valid the node is a var node
305-
if (node == nullptr || !node->IsVar() || node->IsCtrlVar()) return false;
308+
// vars can be @EMPTY@, @LR_DECAY_REUSE_ID@. For example, while_grad
309+
if (node == nullptr || !node->IsVar() || node->IsCtrlVar() ||
310+
node->Name() == kEmptyVarName)
311+
return false;
306312

307313
bool flag = true;
308314
// op output force generated in cpu, can not be reused.
@@ -348,10 +354,6 @@ bool NodeCanReused(const VarDesc& node) {
348354
if (shape.empty() || size < MinChunkSize()) {
349355
return false;
350356
}
351-
// vars can be @EMPTY@, @LR_DECAY_REUSE_ID@. For example, while_grad
352-
std::string name = node.Name();
353-
if (!name.empty() && name[0] == '@' && name[name.size() - 1] == '@')
354-
return false;
355357
return true;
356358
}
357359

paddle/fluid/framework/operator.cc

-41
Original file line numberDiff line numberDiff line change
@@ -467,12 +467,6 @@ const Variable* ExecutionContext::InputVar(const std::string& name) const {
467467
return it->second.empty() ? nullptr : it->second[0];
468468
}
469469

470-
const Variable* ExecutionContext::LegacyInputVar(
471-
const std::string& name) const {
472-
auto ipt = op_.Input(name);
473-
return ipt == kEmptyVarName ? nullptr : scope_.FindVar(ipt);
474-
}
475-
476470
Variable* ExecutionContext::OutputVar(const std::string& name) const {
477471
auto it = ctx_.outputs.find(name);
478472
if (it == ctx_.outputs.end()) return nullptr;
@@ -483,22 +477,11 @@ Variable* ExecutionContext::OutputVar(const std::string& name) const {
483477
return it->second.empty() ? nullptr : it->second[0];
484478
}
485479

486-
Variable* ExecutionContext::LegacyOutputVar(const std::string& name) const {
487-
auto opt = op_.Output(name);
488-
return opt == kEmptyVarName ? nullptr : scope_.FindVar(opt);
489-
}
490-
491480
template <>
492481
const Tensor* ExecutionContext::Input<Tensor>(const std::string& name) const {
493482
return Input<LoDTensor>(name);
494483
}
495484

496-
template <>
497-
const Tensor* ExecutionContext::LegacyInput<Tensor>(
498-
const std::string& name) const {
499-
return LegacyInput<LoDTensor>(name);
500-
}
501-
502485
template <>
503486
const std::vector<const Tensor*> ExecutionContext::MultiInput<Tensor>(
504487
const std::string& name) const {
@@ -521,35 +504,11 @@ const std::vector<const Tensor*> ExecutionContext::MultiInput<Tensor>(
521504
return res;
522505
}
523506

524-
template <>
525-
const std::vector<const Tensor*> ExecutionContext::LegacyMultiInput<Tensor>(
526-
const std::string& name) const {
527-
auto names = op().Inputs(name);
528-
std::vector<const Tensor*> res;
529-
res.reserve(names.size());
530-
std::transform(names.begin(), names.end(), std::back_inserter(res),
531-
[&](const std::string& sub_name) -> const Tensor* {
532-
auto var = scope_.FindVar(sub_name);
533-
if (var == nullptr) return nullptr;
534-
PADDLE_ENFORCE(
535-
var->IsType<LoDTensor>(),
536-
"%s should be LoDTensor, but the received type is %s",
537-
sub_name, ToTypeName(var->Type()));
538-
return &(var->Get<LoDTensor>());
539-
});
540-
return res;
541-
}
542-
543507
template <>
544508
Tensor* ExecutionContext::Output<Tensor>(const std::string& name) const {
545509
return Output<LoDTensor>(name);
546510
}
547511

548-
template <>
549-
Tensor* ExecutionContext::LegacyOutput<Tensor>(const std::string& name) const {
550-
return LegacyOutput<LoDTensor>(name);
551-
}
552-
553512
template <>
554513
std::vector<Tensor*> ExecutionContext::MultiOutput<Tensor>(
555514
const std::string& name) const {

paddle/fluid/framework/operator.h

+2-78
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ limitations under the License. */
1616

1717
#include <algorithm>
1818
#include <atomic>
19+
#include <memory>
1920
#include <string>
2021
#include <tuple>
2122
#include <unordered_map>
23+
#include <utility>
2224
#include <vector>
2325

2426
#include "glog/logging.h" // For VLOG
@@ -253,31 +255,6 @@ class ExecutionContext {
253255
return it->second;
254256
}
255257

256-
const std::vector<Variable*> LegacyMultiInputVar(
257-
const std::string& name) const {
258-
auto names = op_.Inputs(name);
259-
std::vector<Variable*> res;
260-
res.reserve(names.size());
261-
std::transform(names.begin(), names.end(), std::back_inserter(res),
262-
[this](const std::string& name) {
263-
return name == kEmptyVarName ? nullptr
264-
: scope_.FindVar(name);
265-
});
266-
return res;
267-
}
268-
269-
std::vector<Variable*> LegacyMultiOutputVar(const std::string& name) const {
270-
auto names = op_.Outputs(name);
271-
std::vector<Variable*> res;
272-
res.reserve(names.size());
273-
std::transform(names.begin(), names.end(), std::back_inserter(res),
274-
[this](const std::string& name) {
275-
return name == kEmptyVarName ? nullptr
276-
: scope_.FindVar(name);
277-
});
278-
return res;
279-
}
280-
281258
template <typename T>
282259
const T* Input(const std::string& name) const {
283260
auto* var = InputVar(name);
@@ -290,22 +267,6 @@ class ExecutionContext {
290267
return var == nullptr ? nullptr : var->GetMutable<T>();
291268
}
292269

293-
template <typename T>
294-
const T* LegacyInput(const std::string& name) const {
295-
auto* var = LegacyInputVar(name);
296-
return var == nullptr ? nullptr : &var->Get<T>();
297-
}
298-
299-
template <typename T>
300-
T* LegacyOutput(const std::string& name) const {
301-
auto var = LegacyOutputVar(name);
302-
return var == nullptr ? nullptr : var->GetMutable<T>();
303-
}
304-
305-
const Variable* LegacyInputVar(const std::string& name) const;
306-
307-
Variable* LegacyOutputVar(const std::string& name) const;
308-
309270
template <typename T>
310271
const std::vector<const T*> MultiInput(const std::string& name) const {
311272
auto it = ctx_.inputs.find(name);
@@ -338,32 +299,6 @@ class ExecutionContext {
338299
return res;
339300
}
340301

341-
template <typename T>
342-
const std::vector<const T*> LegacyMultiInput(const std::string& name) const {
343-
auto names = op_.Inputs(name);
344-
std::vector<const T*> res;
345-
res.reserve(names.size());
346-
std::transform(names.begin(), names.end(), std::back_inserter(res),
347-
[&](const std::string& sub_name) -> const T* {
348-
auto var = scope_.FindVar(sub_name);
349-
return var == nullptr ? nullptr : &var->Get<T>();
350-
});
351-
return res;
352-
}
353-
354-
template <typename T>
355-
std::vector<T*> LegacyMultiOutput(const std::string& name) const {
356-
auto names = op_.Outputs(name);
357-
std::vector<T*> res;
358-
res.reserve(names.size());
359-
std::transform(names.begin(), names.end(), std::back_inserter(res),
360-
[&](const std::string& sub_name) -> T* {
361-
auto var = scope_.FindVar(sub_name);
362-
return var == nullptr ? nullptr : var->GetMutable<T>();
363-
});
364-
return res;
365-
}
366-
367302
platform::Place GetPlace() const { return device_context_.GetPlace(); }
368303

369304
template <typename DeviceContextType>
@@ -436,24 +371,13 @@ class ExecutionContext {
436371
template <>
437372
const Tensor* ExecutionContext::Input<Tensor>(const std::string& name) const;
438373

439-
template <>
440-
const Tensor* ExecutionContext::LegacyInput<Tensor>(
441-
const std::string& name) const;
442-
443374
template <>
444375
const std::vector<const Tensor*> ExecutionContext::MultiInput<Tensor>(
445376
const std::string& name) const;
446377

447-
template <>
448-
const std::vector<const Tensor*> ExecutionContext::LegacyMultiInput<Tensor>(
449-
const std::string& name) const;
450-
451378
template <>
452379
Tensor* ExecutionContext::Output<Tensor>(const std::string& name) const;
453380

454-
template <>
455-
Tensor* ExecutionContext::LegacyOutput<Tensor>(const std::string& name) const;
456-
457381
template <>
458382
std::vector<Tensor*> ExecutionContext::MultiOutput<Tensor>(
459383
const std::string& name) const;

paddle/fluid/inference/api/analysis_predictor.cc

+3
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ void AnalysisPredictor::SetMkldnnThreadID(int tid) {
183183
bool AnalysisPredictor::Run(const std::vector<PaddleTensor> &inputs,
184184
std::vector<PaddleTensor> *output_data,
185185
int batch_size) {
186+
if (UNLIKELY(config_.cpu_math_library_num_threads() > 1)) {
187+
paddle::platform::SetNumThreads(config_.cpu_math_library_num_threads());
188+
}
186189
VLOG(3) << "Predictor::predict";
187190
inference::Timer timer;
188191
timer.tic();

paddle/fluid/inference/api/api_impl.cc

+3
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ NativePaddlePredictor::~NativePaddlePredictor() {
131131
bool NativePaddlePredictor::Run(const std::vector<PaddleTensor> &inputs,
132132
std::vector<PaddleTensor> *output_data,
133133
int batch_size) {
134+
if (UNLIKELY(config_.cpu_math_library_num_threads() > 1)) {
135+
paddle::platform::SetNumThreads(config_.cpu_math_library_num_threads());
136+
}
134137
VLOG(3) << "Predictor::predict";
135138
Timer timer;
136139
timer.tic();

paddle/fluid/inference/tests/api/analyzer_rnn1_tester.cc

+6-4
Original file line numberDiff line numberDiff line change
@@ -366,15 +366,17 @@ TEST(Analyzer_rnn1, ZeroCopyMultiThread) {
366366
#define NEW_TENSOR(name__) \
367367
auto name__##_tensor = predictor->GetInputTensor(#name__);
368368

369-
auto base_predictor = CreatePaddlePredictor<AnalysisConfig>(config);
369+
std::vector<std::unique_ptr<PaddlePredictor>> predictors;
370+
predictors.emplace_back(CreatePaddlePredictor<AnalysisConfig>(config));
371+
for (int tid = 1; tid < FLAGS_num_threads; tid++) {
372+
predictors.emplace_back(predictors.front()->Clone());
373+
}
370374
double total_time_of_threads{0};
371375
std::vector<std::thread> threads;
372376

373377
for (int tid = 0; tid < FLAGS_num_threads; tid++) {
374378
threads.emplace_back([&, tid] {
375-
// To ensure the thread binding correctly,
376-
// please clone inside the threadpool.
377-
auto predictor = base_predictor->Clone();
379+
auto &predictor = predictors[tid];
378380
NEW_TENSOR(data_lod_attention);
379381
NEW_TENSOR(cell_init);
380382
NEW_TENSOR(data);

paddle/fluid/inference/tests/api/analyzer_seq_pool1_tester.cc

+6-4
Original file line numberDiff line numberDiff line change
@@ -266,15 +266,17 @@ TEST(Analyzer_seq_pool1, zerocopy_profile_threads) {
266266
SetConfig(&config);
267267
config.SwitchUseFeedFetchOps(false);
268268

269-
auto base_predictor = CreatePaddlePredictor<AnalysisConfig>(config);
269+
std::vector<std::unique_ptr<PaddlePredictor>> predictors;
270+
predictors.emplace_back(CreatePaddlePredictor<AnalysisConfig>(config));
271+
for (int tid = 1; tid < FLAGS_num_threads; tid++) {
272+
predictors.emplace_back(predictors.front()->Clone());
273+
}
270274
double total_time_of_threads{0};
271275
std::vector<std::thread> threads;
272276

273277
for (int tid = 0; tid < FLAGS_num_threads; tid++) {
274278
threads.emplace_back([&, tid] {
275-
// To ensure the thread binding correctly,
276-
// please clone inside the threadpool.
277-
auto predictor = base_predictor->Clone();
279+
auto &predictor = predictors[tid];
278280
std::vector<std::unique_ptr<ZeroCopyTensor>> inputs;
279281
PrepareZeroCopyInputs(predictor, &inputs);
280282
auto output_tensor = predictor->GetOutputTensor(out_var_name);

paddle/fluid/inference/tests/api/tester_helper.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
#include <gtest/gtest.h>
1818

1919
#include <algorithm>
20+
#include <memory>
2021
#include <string>
2122
#include <thread> // NOLINT
23+
#include <unordered_map>
2224
#include <vector>
2325
#ifdef WITH_GPERFTOOLS
2426
#include <gperftools/profiler.h>
@@ -252,17 +254,19 @@ void TestMultiThreadPrediction(
252254
int batch_size = FLAGS_batch_size;
253255
int num_times = FLAGS_repeat;
254256
std::vector<std::thread> threads;
255-
auto main_predictor = CreateTestPredictor(config, use_analysis);
257+
std::vector<std::unique_ptr<PaddlePredictor>> predictors;
258+
predictors.emplace_back(CreateTestPredictor(config, use_analysis));
259+
for (int tid = 1; tid < num_threads; tid++) {
260+
predictors.emplace_back(predictors.front()->Clone());
261+
}
256262

257263
size_t total_time{0};
258264
for (int tid = 0; tid < num_threads; ++tid) {
259265
threads.emplace_back([&, tid]() {
260266
// Each thread should have local inputs and outputs.
261267
// The inputs of each thread are all the same.
262268
std::vector<PaddleTensor> outputs_tid;
263-
// To ensure the thread binding correctly,
264-
// please clone inside the threadpool.
265-
auto predictor = main_predictor->Clone();
269+
auto &predictor = predictors[tid];
266270
#ifdef PADDLE_WITH_MKLDNN
267271
if (use_analysis) {
268272
static_cast<AnalysisPredictor *>(predictor.get())

paddle/fluid/operators/detection/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ detection_library(rpn_target_assign_op SRCS rpn_target_assign_op.cc)
3333
detection_library(generate_proposal_labels_op SRCS generate_proposal_labels_op.cc)
3434
detection_library(box_clip_op SRCS box_clip_op.cc box_clip_op.cu)
3535
detection_library(yolov3_loss_op SRCS yolov3_loss_op.cc)
36+
detection_library(box_decoder_and_assign_op SRCS box_decoder_and_assign_op.cc box_decoder_and_assign_op.cu)
3637

3738
if(WITH_GPU)
3839
detection_library(generate_proposals_op SRCS generate_proposals_op.cc generate_proposals_op.cu DEPS memory cub)

0 commit comments

Comments
 (0)