车道线检测方法一般可以分为,基于分割,基于锚线,基于关键点,基于参数四种方法。
基于分割的方法:
也就是逐像素进行分类的方法
SCNN将特征图进行分片,进行跨行和跨列的消息传递。
LaneNet进行实例分割,包括一个二进制分割分支和一个嵌入分支。
ENet SAD应用了一种用于上下文聚合的自注意力蒸馏机制。
基于锚线的方法:
自顶而下的设计思想,预定义一组不同的起始点和不同角度的直线作为车道线的锚线,然后回归实际的车道线到期最近的锚线的水平偏移量来对车道线进行预测。
LaneCNN、NAS、LaneATT
LaneATT提出了一种基于锚的池方法和注意力机制,以聚集更多的全局信息
基于关键点:
以前的基于关键点是逐个关键点进行预测,递归形式。
PINet、FOLOLane
基于参数的方法:
拟合出来车道线的方程,然后进行参数的预测:
Curve使用的是贝塞尔曲线
LSTR拟合成一条三次曲线
网络结构介绍:
输入一张图片,主干网络resnet进行特征提取,加入注意力层更好的学习特征,然后经过多尺度特征融合FPN模块,以进一步丰富上下文信息。解码器利用关键点头和偏移头分别生成置信度图和偏移图。因为前面融合的都是全局信息,缺乏局部信息,为了车道线的连续性,在关键点头前面加入LFA模块(车道感知特征聚合模块),以增强相邻关键点之间的局部相关性。结合置信度图和偏移图,在采样起点的周围聚集属于同一车道的关键点,以构建完整的车道线。
构建车道
1、采样关键点,获取图片中所有关键点的坐标及其到所属车道起点的偏移量。
获取关键点的坐标是从置信度图中采样的到,置信度图的所有元素值介于0-1,值越大,代表对应位置是车道线关键点的可能性越高。关键点置信度图采用修正的Focal Loss训练。由于直接对下采样后的关键点坐标进行下取整会损失掉小数点后的精度,因此设计了一个量化补偿,量化补偿使用L1 Loss进行监督。关键点的偏移量就是偏移图对应的位置,偏移图有两个通道,一个对应水平方向的偏移,一个对应垂直方向的偏移。偏移量使用L1 Loss监督。
2、根据关键点坐标和关键点对应的偏移量相加,得到关键点所指向的车道线起始点。
根据第一步中得到的关键点坐标和偏移量,进行相加。
3、起始点采样
起始点其实一种特殊的关键点,这一类关键点所指向的起始点位置应该是他们本身或者他们附近很小的范围。所以在偏移图中采样值比较小的关键点位置,并将距离接近的关键点合并取中心。获得采样起始点,在本文中将偏移量小于1的关键点作为起始点。
完成上面三步后,将关键点坐标加偏移量可以得到关键点对应的起始点,然后判断的到的起始点和采样的起始点是否在一个范围内,如果在一个范围内,就证明,起始点和这些关键点是同一条车道线,然后按顺序连接起来。
车道线感知的特征增强模块LFA
加入LFA的目的是,更好的利用车道线上周边点的特征来增强当前点的特征。
在每个位置预测其到同一条车道线上前后共M个相邻点的偏移量及相邻点的权重作为可变性卷积的偏移和权重,增强局部关联性。LFA作用在特征图上的所有位置,而不仅仅作用于车道线的关键点上。使用SmoothL1 Loss来监督学习。
自己调试过程中遇到的问题:
安装python3.7
conda create -n ganet python=3.7 -y
创建完环境:
source activate 环境激活
conda deactivate 退出当前环境
conda activate ganet 进入base后,使用conda
查看安装了那些包:
conda list
在root用户下不能访问anaconda3:
需要登录root用户,然后编辑配置文件:
vim /.bashrc
然后点击E 、再点击i、再在末尾添加 export PATH=/home/ubuntu/anaconda3/bin:$PATH 然后点esc 输入:wq
输入source ~/.bashrc
torch 1.7.0 torchvision 0.8.1 python 3.7
conda安装三件套
conda install pytorch==1.7.0 torchvision==0.8.0 cudatoolkit=11.0 -c pytorch -y
gpu版本
pip install torch==1.7.0+cu110 torchvision==0.8.1+cu110 torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
使用的这个命令,还没有装cudatoolkit=11.0.2
安装requirements下build.txt文件
可以使用root权限下,运行 pip install -r requirement/build.txt
最好使用 --user pip install --user -r requirement/build.txt
出现一些警告 应该可以不管
下载项目:
git clone https://github.com/Wolfwjs/GANet.git
在这里报一个缓存不够,使用命令扩大一下缓存就好了
git config --global http.postBuffer 2000000000
使用git config --list查看更改后的大小
然后报不能连接文件: failed: The TLS connection was non-properly terminated
修改:
git config --global --unset https.https://github.com.proxy
git config --global --unset http.https://github.com.proxy
运行python setup.py develop
报错:UserWarning: Attempted to use ninja as the BuildExtension backend but we could not find ninja.. Falling back to using the slow distutils backend
报错:bad substitution
默认不是bash命令 改为bash运行
命令:
bash tools/dist_test.sh tusimple final_exp_res18_s8 CHECKPOINT/ganet_tusimple_resnet18
报错:file "/home/ubuntu/configs/tusimple/final_exp_res18_s8.py" does not exist *******************************************
更改:强行改到ubuntu下,非常非常不和规则
报错:[Errno 2] No such file or directory: '/mnt/lustre/wangjinsheng/project/lane-detection/GANet/datasets/tusimple/test_label.json'
更改:数据集地址不对 更改数据集地址