车道线分割预研

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hw5226349/article/details/88227649

分割的含义

语义分割和实例分割

mIOU_categorymIOU_class:

  • 两者的度量指标是不同的.
  • 前者是大的类别,而后者需要把每个目标都分割出来。
  • 通常前者大于后者

车道线分割预研

VPGNet

  • 框架:Caffe
  • 显存:813
  • 前向时间:15-18ms
  • 网络较浅,多任务,拓展性较差
  • 使用8x8网格对标签像素进行扩充,防止下采样时特征消失

SCNN

  • 框架:Torch
  • backbone:resnet101
  • 显存:2605
  • 前向时间:66ms
  • 解决车道线断裂问题,主要提出空间卷积spatial CNN的想法

MaskRCNN

  • 框架:Pytorch – e2e_mask_rcnn_R-101-FPN_2x.yaml
  • 显存:1200-1400
  • 前向时间:241ms
  • 先检测后分割,两条分支一条进行RPN一条进行分割

DeepLabv3+

  • 框架:TensorFlow – xception-65 mobilenetv2 resnet101
  • 显存:513 771 1026输入分别对应1865,2889,5446(不准确,由于TensorFlow总是尽可能多申请显存)
  • 前向时间:110ms 200ms 321ms 另外mobilenetv2对应显存836Mb前向时间146ms(可接受拓展性强)

空间平移不变性,一个 kernel 就需要同时学习 spatial correlations 和 cross-channel correlations,spatial correlations 学习的是某个特征在空间中的分布,cross-channel correlations 学习的是这些不同特征的组合方式。 如果在 1x1 卷积后不加以激活直接进行 depthwise separable convolution,无论是在收敛速度还是效果上都优于在 1x1 卷积后加以 ReLU 之类激活函数的做法。 这可能是因为,在对很浅的 feature(比如这里的 1-channel feature)进行激活会导致一定的信息损失,而对很深的 feature,比如 Inception module 提取出来的特征,进行激活是有益于特征的学习的,个人理解是这一部分特征中有大量冗余信息。ASPP 方法的优点是该种结构可以提取比较 dense 的特征,因为参考了不同尺度的 feature,并且 atrous convolution 的使用加强了提取 dense 特征的能力。 decoder 中就可以起到修复尖锐物体边界的作用.

车道线方案

经验总结

前期数据有限,直接测试训练集,最后训练集和测试集分别达到94%,61%(标注和泛化原因)

  1. 加入vpgnet标签扩充(8*8网格化)
  • 直接从30%多涨到76%,主要原因是因为车道线太窄,下采样后没有了特征
  1. 将mobilenet_v2最后output_stride设置为16的方式改为直接对网络结构第13个depthwise conv结构处的stride从2改为1(原始是在内部通过dilation rate从1设置为2,stride从2设置为1来达到不下采样的目的,这样引入了SpaceToBatchND和BatchToSpaceND来实现dilation conv)
  • 两点原因:1.dilate conv不能int8量化 2.有一定的涨点到80%(可能原因,车道线并不需要特大的感受野)
  1. 去掉aspp和decoder
  • 降低2%,aspp有dilate conv不能量化。
  • decoder结构是前期对网络框架不够了解,实际上这个结构对边缘信息的提取至关重要,后来重新加回来,涨点到94%,不需要扩充边标签
  1. 去掉image_pool
  • 去掉对精度无影响。主要是把image下采样到1*1再上采样,与feature map相减,相当于减均值平均分布
  1. 添加水平方向BiLSTM隐藏层大小为32,输出为2x32,LSTM太占资源。其中feature_w为时间步,隐藏层为feature_h x 32,(对的,在车牌中h为1了,但是这里为49所以乘以32,已经很大的HiddenSize了),但是效果不佳,最高miou_1.0只到了58.5%
  • 想引入Spatial CNN解决,车道线不连续问题,失败。
  1. 反复finetune涨点到88%

  2. 后来又将decoder结构加回去,低层分支特征对边缘比较敏感,直接从88%提到94%,而且不扩充标签,效果也很精细。

总结

最后对分割网络结果进行多级分块和ransac拟合

  1. 之前mobilenetv2为主干
  • fp32 前向23.89ms 显存:529 origin 159 layers
  • int8 前向19.58ms 显存:477 after reformat 195 layers
  • TensorRT出现太多转换数据的层reformer layer

2.resnet101主干,精度更高些2%点的样子

  • 测试总耗时:25ms(前向时间:19.6694ms+分块拟合2-3ms)

猜你喜欢

转载自blog.csdn.net/hw5226349/article/details/88227649