论文中提到了两部分网络:
- 一个是lanenet,做车道预测
- 一个是hnet,做车道拟合
Lanenet
LaneNet网络分为两个分支:
- 论文中的segmentation branch是做二分分类判断是否是车道线,对应的就是代码中的
binary segmentation; - 论文中的embedding branch是为了区分不同的车道线,对应的就是代码中的
instance segmentation。代码中将这两部分branch的名字稍作改变确实比较好理解。
Binary segmentation
Binary网络
Binary segmentation的backbone部分代码实现了vgg和dense两种网络结构,实际上与论文中的ENet不一样,建议还是要使用ENet作为backbone,因为vgg和dense肯定都无法达到real time的效果。
我参考github上的enet,将Binary segmentation的backbone替换成了enet。
从论文中我们知道Binary这个分支和Instance这个分支公用ENet的前两个stage,后面三个stage是各自不同的。
Binary Loss
Binary Loss, Binary的gt image其实就是一张二值化的图片,车道部分显示白色,背景显示黑色。
gt image是由tusimple数据中json文件生成的,将json文件中每条车道的点进行拟合画出来的曲线。处理的脚本可以参考generate_tusimple_dataset.py,但是这个文件中稍微有点问题,没有过滤掉tusimple数据集中没有标记的图片。需要自己稍微修改一下。
网络output的tensor是[width, height, 4],可以看成是图片每个像素点上是4个数字,后面会用这四个数字进行聚类。
Instance Loss
gt image
网络训练好后我们运行网络可以得到两张图片,一张Binary一张Instance
版权声明:本文为qq_33963083原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。