diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/BUILD b/modules/perception/obstacle/lidar/segmentation/cnnseg/BUILD index 3fe86e3676f048c991f9d6c3f14411be264b96f4..c72f447ec942c17465abe4becd6fe8bb7bd04bc8 100644 --- a/modules/perception/obstacle/lidar/segmentation/cnnseg/BUILD +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/BUILD @@ -25,7 +25,6 @@ cc_library( cc_library( name = "cnnseg_util", hdrs = ["util.h"], - deps = ["@opencv2//:core"], ) cc_library( diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.cc b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.cc index f837ac34f79edcb2fbedde9953a9eaf28582509d..6729582ad141863d34aabdc3f85ebc9f0da0fb2d 100644 --- a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.cc +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.cc @@ -128,7 +128,7 @@ bool CNNSegmentation::Segment(const pcl_util::PointCloudPtr& pc_ptr, use_full_cloud_ = cnnseg_param_.use_full_cloud() && (options.origin_cloud != nullptr); - timer_.Tic(); + PERF_BLOCK_START(); // generate raw features if (use_full_cloud_) { @@ -136,34 +136,26 @@ bool CNNSegmentation::Segment(const pcl_util::PointCloudPtr& pc_ptr, } else { feature_generator_->Generate(pc_ptr); } - feat_time_ = timer_.Toc(true); + PERF_BLOCK_END("[CNNSeg] feature generation"); // network forward process #ifndef CPU_ONLY caffe::Caffe::set_mode(caffe::Caffe::GPU); #endif caffe_net_->Forward(); - network_time_ = timer_.Toc(true); + PERF_BLOCK_END("[CNNSeg] CNN forward"); // clutser points and construct segments/objects cluster2d_->Cluster(*category_pt_blob_, *instance_pt_blob_, pc_ptr, valid_indices, cnnseg_param_.objectness_thresh(), cnnseg_param_.use_all_grids_for_clustering()); - clust_time_ = timer_.Toc(true); + PERF_BLOCK_END("[CNNSeg] clustering"); cluster2d_->Filter(*confidence_pt_blob_, *height_pt_blob_); cluster2d_->GetObjects(cnnseg_param_.confidence_thresh(), cnnseg_param_.height_thresh(), cnnseg_param_.min_pts_num(), objects); - post_time_ = timer_.Toc(true); - - tot_time_ = feat_time_ + network_time_ + clust_time_ + post_time_; - - AINFO << "Total runtime: " << tot_time_ << "ms\t" - << " Feature generation: " << feat_time_ << "ms\t" - << " CNN forward: " << network_time_ << "ms\t" - << " Clustering: " << clust_time_ << "ms\t" - << " Post-processing: " << post_time_ << "ms"; + PERF_BLOCK_END("[CNNSeg] post-processing"); return true; } diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h index 838fd0b831d5abf9b2f8beff261434b38634ea17..6d8f75467c9fb97cbe08c3d544b909990469e46d 100644 --- a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnn_segmentation.h @@ -24,10 +24,10 @@ #include "caffe/caffe.hpp" #include "modules/common/log.h" #include "modules/perception/lib/pcl_util/pcl_types.h" +#include "modules/perception/lib/base/timer.h" #include "modules/perception/obstacle/base/object.h" #include "modules/perception/obstacle/lidar/interface/base_segmentation.h" #include "modules/perception/obstacle/lidar/segmentation/cnnseg/proto/cnnseg.pb.h" -#include "modules/perception/obstacle/lidar/segmentation/cnnseg/util.h" #include "modules/perception/obstacle/lidar/segmentation/cnnseg/feature_generator.h" #include "modules/perception/obstacle/lidar/segmentation/cnnseg/cluster2d.h" @@ -89,12 +89,7 @@ class CNNSegmentation : public BaseSegmentation { std::shared_ptr cluster2d_; // timer - cnnseg::Timer timer_; - double feat_time_ = 0.0; - double network_time_ = 0.0; - double clust_time_ = 0.0; - double post_time_ = 0.0; - double tot_time_ = 0.0; + Timer timer_; DISALLOW_COPY_AND_ASSIGN(CNNSegmentation); }; diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnnseg_test.cc b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnnseg_test.cc index 72794fcdf9ac95639dc2beebf26f1fe2ccbae33c..ea3b0385e035356d954b5ad40dc5def1cba64ca0 100644 --- a/modules/perception/obstacle/lidar/segmentation/cnnseg/cnnseg_test.cc +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/cnnseg_test.cc @@ -23,6 +23,7 @@ #include #include +#include "opencv2/opencv.hpp" #include "gtest/gtest.h" #include "modules/common/log.h" #include "modules/perception/common/perception_gflags.h" diff --git a/modules/perception/obstacle/lidar/segmentation/cnnseg/util.h b/modules/perception/obstacle/lidar/segmentation/cnnseg/util.h index 7ee40d362bb4e1ef3015363d53ec240f8895cbb2..0601927bec3d0d9b6a99e1fc44098323de831cb3 100644 --- a/modules/perception/obstacle/lidar/segmentation/cnnseg/util.h +++ b/modules/perception/obstacle/lidar/segmentation/cnnseg/util.h @@ -18,34 +18,11 @@ #define MODULES_PERCEPTION_OBSTACLE_LIDAR_SEGMENTATION_CNNSEG_UTIL_H_ #include -#include "opencv2/opencv.hpp" namespace apollo { namespace perception { namespace cnnseg { -class Timer { - public: - Timer() { - Tic(); - scale_ = 1.0 / (static_cast(cvGetTickFrequency()) * 1000.); - } - void Tic() { - start_ = static_cast(cv::getTickCount()); - } - double Toc(bool reset = false) { - double time = (static_cast(cvGetTickCount()) - start_) * scale_; - if (reset) { - Tic(); - } - return time; - } - - private: - double start_; - double scale_; -}; - inline int F2I(float val, float ori, float scale) { return static_cast(std::floor((ori - val) * scale)); }