• 图像分割


    本文是对论文的解读与思考

    论文:  Towards End-to-End Lane Detection: an Instance Segmentation Approach

    introduction

    该论文提出了一种 端到端 的 实例分割方法,用于车道线检测;

    论文包含 LaneNet + H-Net 两个模型网络,其中 LaneNet 是一种将 语义分割 和 像素矢量化 结合起来的多任务模型,语义分割用来分割车道线与背景,像素矢量化 用于把属于同一条车道线的像素 聚类 在一起,

    H-Net 是个小网络,用于预测 转换矩阵 H,使用 H 对同一条车道线的所有像素点进行重新建模(论文中是使用 y 预测 x)

    LaneNet

    之前提到大部分 图像分割 的网络都包含 encode 和 decode 两部分,LaneNet 也不例外,不同的是 LaneNet 包含了两个分支,如下图

    下面的分支 Segmentation branch 是常规的 语义分割,用于 分割 车道线 和 背景,实现的是 二分类;

    上面的分支 Embedding branch 用于 像素的矢量化,把每个 像素 用一个高维向量表示(类似于 word embedding),使得 像素 可以通过 聚类 把 不同车道线分开;

    后面那个 X 不必在意,只是结合的意思;

    网络结构

    LaneNet 是 基于 ENet 的 Encode-Decode 网络结构,ENet 网络如下图

    如图所示,ENet 由 5 个 stage 组成, stage 1 2 3 属于 Encode,stage 4 5 属于 Decode;

    LaneNet 中 语义分割 和 Embedding 两个任务共用 stage 1 2,将 stage 3 和 后面 的 Decode 部分作为各自分支结构;

    语义分割 的 输出为 W*H*2,[2 分类],Embedding 的输出为 W*H*Dim,Dim 为自定义的向量长度;

    论文中两个分支 权重相同;

    Segmentation

    语义分割目的是区分 车道线和背景,其中作者主要考虑两点:

    1. 在构建 label 时,为了处理遮挡问题,论文对 被车辆遮挡的车道线和虚线进行了还原;

    2. 由于 类别 不均衡,作者进行了加权

    Pclass 为 每个类别 出现的概率, C 为 常数,是个超参数,(ENet论文中是1.02,使得权重的取值区间为[1,50])

    个人理解:首先,由于 类别分布可能会相差很大, 取 log 缩放了这个差距,加个 常数 C 防止 log 取 负数,然后再取 倒 是把出现多的权重变小,出现少的权重变大;

    Embedding 

    像素 Embedding 是对 像素进行 矢量化,用于区分 每个像素 属于哪条车道线;

    它的思想如下:类似于聚类,同一条车道线(根据 label 可知) 的像素要靠近 矢量化 的中心,不同车道线的像素的 矢量化 中心要远离,即 类内距离尽可能小,类间距离尽可能大;

    它的 loss 设计很巧妙,分为两部分

    C 代表 车道线的条数,由 label 可知;

    Nc 代表 每条车道线的 像素点;

    μc 代表每条车道线的像素矢量 均值,注意是 预测值的 mean,即 网络输出 预测矢量 后,再计算均值,然后 计算 loss;

    δv 代表 像素 离 μc 的距离,大于 该距离时,要进行 pull,即 拉近到 聚类中心;

      // 试想一下普通的距离方法,每个样本分布在其聚类中心周围,并不是 和 聚类中心 重合,

    μca μcb 代表 不同车道线的 像素矢量 均值,也是 预测值的 mean;

    δd 代表不同车道线 聚类中心 间 的距离,小于该距离时,要进行 push,使得 聚类中心远离;

    ||x|| 代表 L2 范数;

    [x]+ 代表 max(0, x);

    聚类

    聚类只 发生在 预测部分

    即 模型完成 分割 和 矢量化 后,对矢量 进行 聚类,区分不同车道线;

    为了 方便 聚类,在 Embedding 时 设定 δd > 6*δv;

    聚类 方法使用的是 mean shift,不再赘述;

    H-Net

    LaneNet 的输出是 每条车道线的像素集合,我们还需要把 这些 像素 拟合成一条车道线;

    传统做法是将 图片 投影到 鸟瞰图 中,然后用 二阶或者三阶 多项式进行拟合,这种方案 转换矩阵 H 只算一次,但不同地形如 丘陵、山地 的转换是略有不同的;

    为了解决这个问题,论文训练了一个 预测 转换矩阵 H 的 神经网络,输入是一张图片,输出是 转换矩阵 H

    H 长这样

    通过置 0 对转换矩阵进行约束,即水平线在转换下保持水平,即 坐标 y 的变换不受 x 的影响; 

    y' = dy + e,与 x 无关; 

    网络结构

    上述转换矩阵只有 6 个参数,故 H-Net 模型的输出是一个 6 维向量,网络包含 6 个卷积层和 1 一个 全连接;

    loss function

    懒得写了,是个图片

    思路如下: H-Net 输出 H 后,与 真实像素 相乘 做转换,得到一堆转换后的点,然后用 最小二乘法 得到 拟合系数 w,注意 至此 H w 都是瞎猜的,是预测的,

    然后我们在 y’ 处 计算对应的 x’,也是瞎猜哦 ,最后用 H-1 把 x’ 还原回去,得到 x*,至此都是瞎猜,然后求 误差;

    具体可以看 参考资料 3

    我这里有个疑问:用 x’ y' 算出了 w,然后 做 wy' 竟然和 x' 完全不一样,有些费解,纠结啊

    curve fitting

    曲线拟合只发生在 预测 部分

    思考

    laneNet 为什么没有 类似于 skip connection 的操作?

    我的理解是 识别车道线的任务 太过简单了

    参考资料:

    https://www.jianshu.com/p/c6d38d648509

    https://www.cnblogs.com/xuanyuyt/p/11523192.html

    https://github.com/stesha2016/lanenet-enet-hnet  代码

  • 相关阅读:
    如何在VIM中编辑并保存退出!!!
    MapReduce---数据清洗
    构建之法阅读笔记03
    人月神话阅读笔记03
    学习进度报告16
    大道至简阅读笔记03
    大道至简阅读笔记02
    个人总结
    大道至简阅读笔记01
    学习进度报告15
  • 原文地址:https://www.cnblogs.com/yanshw/p/12530272.html
Copyright © 2020-2023  润新知