使用tensorflow主要基于IEEE IV会议论文“走向端到端的车道检测:实例分割方法”,实现用于实时车道检测的深度神经网络。有关详细信息,请参阅他们的论文 https:// arxiv .org / abs / 1802.05591。该模型由编码器-解码器阶段,二进制语义分割阶段和使用区分性损失函数的实例语义分割组成,用于实时车道检测任务。
主要的网络架构如下:
该软件仅在带有GTX-1070 GPU的ubuntu 16.04(x64),python3.5,cuda-9.0,cudnn-7.0上进行了测试。要安装此软件,您需要tensorflow 1.10.0,并且尚未测试其他版本的tensorflow,但我认为它可以在版本1.10以上的tensorflow中正常工作。其他必需的软件包,您可以通过以下方式安装它们
pip3 install -r requirements.txt
在这个仓库中,我上传了一个在tusimple车道数据集Tusimple_Lane_Detection上训练的模型。深度神经网络推理部分可以达到大约50fps,这与本文中的描述类似。但是我现在实现的输入管道需要改进,以实现实时车道检测系统。
训练有素的车网模型权重文件存储在 new_lanenet_model_file中。您可以下载模型并将其放在文件夹model / tusimple_lanenet /中。
您可以按以下步骤在训练后的模型上测试单个图像
python tools/test_lanenet.py --weights_path ./model/tusimple_lanenet_vgg/tusimple_lanenet.ckpt
--image_path ./data/tusimple_test_image/0.jpg
结果如下:
Test Input Image
Test Lane Mask Image
Test Lane Binary Segmentation Image
Test Lane Instance Segmentation Image
如果要在整个tusimple测试数据集上评估模型,可以调用如果设置save_dir参数,结果将保存在该文件夹中,或者结果将不会保存,而是在推理过程中显示(每张图像3秒钟)。我在整个tusimple车道检测数据集上测试了该模型,并将其制作为视频。您可能会瞥见它。
python tools/evaluate_lanenet_on_tusimple.py --image_dir /home/DataSet/CV/lanenet_data/dataset/clips --weights_path ./model/tusimple_lanenet/tusimple_lanenet_vgg.ckpt --save_dir ./test_set/test_output
- 首先按照链接下载 Tusimple 数据集:train_set.zip test_set.zip test_label.json
- 调用 tools/generate_tusimple_dataset.py 将原始数据转换格式
这里会生成 train.txt 和 val.txt,调整格式如下:
testing/gt_image/0000.png testing/gt_binary_image/0000.png testing/gt_instance_image/0000.png
testing/gt_image/0001.png testing/gt_binary_image/0001.png testing/gt_instance_image/0001.png
testing/gt_image/0002.png testing/gt_binary_image/0002.png testing/gt_instance_image/0002.png
- 调用 data_provider/lanenet_data_feed_pipline.py 转换标注成 TFRecord 格式
python data_provider/lanenet_data_feed_pipline.py
--dataset_dir ./data/training_data_example
--save_dir ./data/training_data_example/tfrecords
在我的实验中,训练时期为80010,批量大小为4,初始学习速率为0.001,并使用幂为0.9的多项式衰减。关于训练参数,您可以检查global_configuration / config.py了解详细信息。您可以切换--net参数来更改基本编码器阶段。如果选择--net vgg,则vgg16将用作基本编码器阶段,并且将加载预训练的参数。您可以修改训练脚本以加载自己的预训练参数,或者可以实现自己的基本编码器阶段。您可以调用以下脚本来训练自己的模型
python tools/train_lanenet.py
--net vgg
--dataset_dir ./data/training_data_example
-m 0
您还可以通过以下方式从快照继续训练过程:
python tools/train_lanenet.py
--net vgg
--dataset_dir data/training_data_example/
--weights_path path/to/your/last/checkpoint
-m 0
您可以使用张量板工具监视训练过程:
该Binary Segmentation loss
下降如下:
该 Instance Segmentation loss
下降如下:
根据新的tensorflow API调整一些基本的cnn op。使用传统的SGD优化器而不是原始文件中使用的原始Adam优化器来优化整个模型。我发现SGD优化器将导致更稳定的训练过程,并且不会轻易陷入使用原始代码时经常发生的严重损失。
我已经在此处使用新代码new_lanenet_model_file上传了一个在tusimple数据集上训练的新的Lanenet模型。您可以下载新的模型权重并更新新的代码。要更新新代码,您只需要
git pull origin master
其余与上面提到的相同。最近,我将发布一个在culane数据集上训练的新模型。
由于许多用户希望使用自动工具从Tusimple数据集生成训练样本。我上传了用于生成训练样本的工具。您需要首先下载Tusimple数据集并将文件解压缩到本地磁盘。然后运行以下命令以生成训练样本和train.txt文件。
python tools/generate_tusimple_dataset.py --src_dir path/to/your/unzipped/file
该脚本将创建训练文件夹和测试文件夹。原始rgb图像,二进制标签图像,实例标签图像的训练样本将自动在training / gt_image,training / gt_binary_image,training / gt_instance_image文件夹中生成。您可以在开始训练过程之前自行检查一下。
请注意,该脚本仅处理训练样本,并且您需要从train.txt中选择几行以生成自己的val.txt文件。为了获得测试图像,您可以自己修改脚本。
新型号的砝码可以在这里找到
添加工具以将Lanenet Tensorflow CKPT模型转换为MNN模型并在移动设备上部署该模型
cd LANENET_PROJECT_ROOT_DIR
python mnn_project/freeze_lanenet_model.py -w lanenet.ckpt -s lanenet.pb
cd MNN_PROJECT_ROOT_DIR/tools/converter/build
./MNNConver -f TF --modelFile lanenet.pb --MNNModel lanenet.mnn --bizCode MNN
将Lanenet源代码添加到MNN项目中,并修改CMakeList.txt以编译可执行二进制文件。
- 添加嵌入可视化工具以可视化嵌入特征图
- 分别添加详细培训Lanenet组件的详细说明。
- 在不同的数据集上训练模型
[ ] Adjust the lanenet hnet model and merge the hnet model to the main lanenet model[ ] Change the normalization function from BN to GN