首先定义我们在自动驾驶,并且可以获取前后左右各个车的数据。传感器和摄像头已经在车身上部署好。 假定我们在车道上行驶,根据跟驰模型数据我们能知道的是: 1 左车距离 2 右车距离 3 前车距离 为了简化问题,我们暂时不使用后车距离,事实上我们也是可以获取的。 图中可以看出我们的输出值为5类,-1 为前往左车道,1 为前往右车道,2 为加速行驶,0 为保持跟驰, -2 为刹车慢速
也就是简化模型为:三维输入,三个距离,一维输出,是前进还是保持,是刹车还是右行,为了得到神经网络权值,我们必须来假设一批数据。 如下图,三个车道,前方有车220米,右边为200米,左边为170米,我们的输出是什么?随着不断地变化,我们的自动驾驶该怎么做?
float train_data[13][3] = { { 200,100,250 }, //1 {70,70,70}, //2 { 50, 50, 45},//3 { 50,100, 50},//4 {100,300,100},//5 {100,100,115},//6 {100,100,100},//7 {200,300,200},//8 {300,60,100},//9 {30,50,150}, //10 {100,50,100}, //11 {400,100,300},{50,60,200} }; 我们举个例子,在左车道距离为50,本车道为60,右车道为200的时候,我们可以选择右行,打右向灯,离开本车道到右车道, 输出为1. float labels[13] = { 1,0,0,0,2,1,0,2,-1,1,-2 ,-1,1}; 上面13个数据的输出为float型,ok,准备好数据,我们可以开始了。
我们可以手写一段神经网络代码,也可以使用现有的工具,设计是第一位的,我们此次设计的是,三个输入,隐层10层,一个输出,使用最简单的网络来做这次自动驾驶。
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/ml/ml.hpp"
int main
{
// 训练样本
//离左前方距离为 ,前方距离, 右前方距离
float train_data[13][3] = {
{ 200,100,250 }, //1
{70,70,70}, //2
{ 50, 50, 45},//3
{ 50,100, 50},//4
{100,300,100},//5
{100,100,115},//6
{100,100,100},//7
{200,300,200},//8
{300,60,100},//9
{30,50,150}, //10
{100,50,100}, //11
{400,100,300},{50,60,200}
};
// 每个样本数据对应的输出
float labels[13] = { 1,0,0,0,2,1,0,2,-1,1,-2 ,-1,1};
Mat train_data_mat(13, 3, CV_32FC1, train_data);
Mat labels_mat(13, 1, CV_32FC1, labels);
// BP 模型创建和参数设置
Ptr bp = ml::ANN_MLP::create();
Mat layers_size = (Mat_(1, 3) setTrainMethod(ml::ANN_MLP::BACKPROP, 0.1, 0.1);
bp->setActivationFunction(ml::ANN_MLP::SIGMOID_SYM);
bp->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 10000, /*FLT_EPSILON*/1e-6));
// 保存训练好的神经网络参数
try
{
bool trained = bp->train(train_data_mat, ml::ROW_SAMPLE, labels_mat);
if (trained) {
bp->save("bp_param");
}
}
catch (cv::Exception &ex)
{
std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?