29namespace trafficlight {
32 AINFO <<
"Enter Classify init";
35 AINFO <<
"clear success";
39 AINFO << net_inputs_.size();
40 AINFO << net_outputs_.size();
42 for (
auto name : net_inputs_) {
43 AINFO <<
"net input blobs: " << name;
45 for (
auto name : net_outputs_) {
46 AINFO <<
"net output blobs: " << name;
51 std::string proto_file =
GetModelFile(model_path, model_config.
info().proto_file().file());
52 AINFO <<
"proto_file " << proto_file;
54 std::string weight_file =
GetModelFile(model_path, model_config.
info().weight_file().file());
56 AINFO <<
"weight_file" << weight_file;
58 const auto& model_type = model_config.
info().framework();
60 model_type, proto_file, weight_file, net_outputs_, net_inputs_, model_path));
62 rt_net_->set_gpu_id(gpu_id);
69 float* p = mean_->mutable_cpu_data();
70 if (model_config.
is_bgr()) {
72 p[0] = model_config.
mean_b();
73 p[1] = model_config.
mean_g();
74 p[2] = model_config.
mean_r();
77 p[0] = model_config.
mean_r();
78 p[1] = model_config.
mean_g();
79 p[2] = model_config.
mean_b();
81 scale_ = model_config.
scale();
83 std::vector<int> shape = {1, resize_height_, resize_width_, 3};
86 std::map<std::string, std::vector<int>> input_reshape;
89 AINFO <<
"input_reshape: " << input_reshape[net_inputs_[0]][0] <<
", " << input_reshape[net_inputs_[0]][1] <<
", "
90 << input_reshape[net_inputs_[0]][2] <<
", " << input_reshape[net_inputs_[0]][3];
92 if (!rt_net_->Init(input_reshape)) {
93 AWARN <<
"net init fail.";
100 if (cudaSetDevice(gpu_id_) != cudaSuccess) {
101 AERROR <<
"Failed to set device to " << gpu_id_;
104 std::shared_ptr<base::Blob<uint8_t>> rectified_blob;
106 auto input_blob_recog = rt_net_->get_blob(net_inputs_[0]);
107 auto output_blob_recog = rt_net_->get_blob(net_outputs_[0]);
110 if (!light->region.is_detected) {
114 data_provider_image_option_.
crop_roi = light->region.detection_roi;
115 data_provider_image_option_.
do_crop =
true;
117 frame->
data_provider->GetImage(data_provider_image_option_, image_.get());
119 AINFO <<
"get img done";
121 const float* mean = mean_.get()->cpu_data();
133 AINFO <<
"resize gpu finish.";
134 cudaDeviceSynchronize();
136 PERF_BLOCK(
"traffic_light_recognition_inference")
140 cudaDeviceSynchronize();
141 AINFO <<
"infer finish.";
143 float* out_put_data = output_blob_recog->mutable_cpu_data();
144 Prob2Color(out_put_data, unknown_threshold_, light);
148void ClassifyBySimple::Prob2Color(
const float* out_put_data,
float threshold,
base::TrafficLightPtr light) {
149 int max_color_id = 0;
150 std::vector<base::TLColor> status_map
152 std::vector<std::string> name_map = {
"Black",
"Red",
"Yellow",
"Green"};
153 std::vector<float> prob(out_put_data, out_put_data + status_map.size());
154 auto max_prob = std::max_element(prob.begin(), prob.end());
155 max_color_id = (*max_prob > threshold) ?
static_cast<int>(std::distance(prob.begin(), max_prob)) : 0;
157 light->status.color = status_map[max_color_id];
158 light->status.confidence = out_put_data[max_color_id];
159 AINFO <<
"Light status recognized as " << name_map[max_color_id];
160 AINFO <<
"Color Prob:";
161 for (
size_t j = 0; j < status_map.size(); j++) {
162 AINFO << out_put_data[j];
A wrapper around SyncedMemory holders serving as the basic computational unit for images,...
A wrapper around Blob holders serving as the basic computational unit for images.
void Init(const ClassifyParam &model_config, const int gpu_id)
Initialize traffic light classify parameters.
void Perform(const camera::TrafficLightFrame *frame, std::vector< base::TrafficLightPtr > *lights)
Classify model inference process.
std::shared_ptr< TrafficLight > TrafficLightPtr
std::vector< std::string > GetBlobNames(const google::protobuf::RepeatedPtrField< common::ModelBlob > &model_blobs)
void AddShape(std::map< std::string, std::vector< int > > *shape_map, const google::protobuf::RepeatedPtrField< common::ModelBlob > &model_blobs)
Inference * CreateInferenceByName(const std::string &frame_work, const std::string &proto_file, const std::string &weight_file, const std::vector< std::string > &outputs, const std::vector< std::string > &inputs, const std::string &model_root)
bool ResizeGPU(const base::Image8U &src, std::shared_ptr< apollo::perception::base::Blob< float > > dst, int stepwidth, int start_axis)
std::string GetModelFile(const std::string &model_name, const std::string &file_name)
Get the model file path by model path and file name
std::string GetModelPath(const std::string &model_name)
Get the model path by model name, search from APOLLO_MODEL_PATH
std::shared_ptr< camera::DataProvider > data_provider
optional common::ModelInfo info
optional int32 classify_resize_width
optional float classify_threshold
optional int32 classify_resize_height