技術文檔丨如何在預測模塊中添加新的評估器

本文做者:Apollo開發者社區javascript

預測模塊是不可或缺的一個板塊,其做用很大程度上決定了試驗可否成功。預測模塊綜合各個模塊的數據信息和評價結果,具有信息融合功能,能夠評估各個子系統及系統總體將來的狀態,開發者可根據預測模塊的評估結果進行調整。而加入新的Evaluator,更是能自定義評估方向,增長評估結果準確度。java

 

  如下,ENJOY  app

 

簡介

 

評估器使用預訓練的深度學習模型生成特徵(來自障礙物和自車的原始信息)以得到模型輸出ide

 

新增評估器的步驟

 

請參照如下步驟新增一個名爲NewEvaluator的評估器:函數

 

  1. 在proto中新增一個文件學習

  2. 以繼承Evaluator類的方式定義一個新類NewEvaluatorlua

  3. 實現NewEvaluator類spa

  4. 更新預測配置文件code

  5. 更新評估管理器繼承

 

定義一個繼承Evaluator的新類

 

在modules/prediction/evaluator/vehicle文件夾下建立文件new_evaluator.h

 

文件內容以下:

 

#include "modules/prediction/evaluator/evaluator.h"

namespace apollo {
namespace prediction {

class NewEvaluator : public Evaluator {
public:
NewEvaluator();
virtual ~NewEvaluator();
void Evaluate(Obstacle* obstacle_ptr) override;
// Other useful functions and fields.
};

}  // namespace prediction
}  // namespace apollo

 

實現新定義的類NewEvaluator

 

相同文件夾下建立一個名爲new_evaluator.cc的文件,實現新定義的類。新類的實現方法以下所示:

 

#include "modules/prediction/evaluator/vehicle/new_evaluator.h"

namespace apollo {
namespace prediction {

NewEvaluator::NewEvaluator() {
// Implement
}

NewEvaluator::~NewEvaluator() {
// Implement
}

NewEvaluator::Evaluate(Obstacle* obstacle_ptr)() {
// Extract features
// Compute new_output by applying pre-trained model
}

// Other functions

}  // namespace prediction
}  // namespace apollo

 

在proto中新增一個評估器

 

在文件prediction_conf.proto中增長一個類型來表示新增的評估器,以下所示:

 

enum EvaluatorType {
MLP_EVALUATOR = 0;
NEW_EVALUATOR = 1;
}

 

更新預測配置文件

 

在配置文件modules/prediction/conf/prediction_conf.pb.txt中,更新evaluator_typ域,具體以下所示:

obstacle_conf {
obstacle_type: VEHICLE
obstacle_status: ON_LANE
evaluator_type: NEW_EVALUATOR
predictor_type: NEW_PREDICTOR
}

 

更新評估配置器

 

按照下面的代碼示例更新函數CreateEvluator( ... ):

 

case ObstacleConf::NEW_EVALUATOR: {
  evaluator_ptr.reset(new NewEvaluator());
  break;
}

 

按照下面的代碼示例更新函數RegisterEvaluators():

 

RegisterEvaluator(ObstacleConf::NEW_EVALUATOR);

 

完成上述步驟以後,即表示建立了新的評估器

 

增長新屬性

 

若是您想增長新的屬性,請參照如下說明:

 

在proto文件中新增一個域

 

假設新的評估輸出結果爲new_output而且其類型爲int32。

 

若是輸出直接與障礙物相關,請參考如下代碼在modules/prediction/proto/feature.proto文件中增長新的域:

message Feature {
// Other existing features
optional int32 new_output = 1000;
}

 

若是輸出與車道序列相關,請參考如下代碼在modules/prediction/proto/lane_graph.proto文件中增長新的域:

 

message LaneSequence {
// Other existing features
optional int32 new_output = 1000;
}

原文連接地址:https://developer.baidu.com/topic/show/290455

相關文章
相關標籤/搜索