Java教程

YOLOP 论文解读

本文主要是介绍YOLOP 论文解读,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最新的 YOLOP 网络模型出来了,同时支持目标检测,可行驶区域分割和车道线分割三大任务,cver们赶紧卷起来,而且还是个real time + sort 的模型。

1、网络结构

如下图:

由一个encoder和三个特定任务的decoder组成
encoder包含: 主干网络( CSPDarknet ),和neck结构(SPP+FPN)
decoders分为:一个检测头和两个分割头,
检测头和yolov4的检测头一样,不做多说。
两个分割头都是使用FPN的最底层特征图(W/8,H/8,256)作为输入,进行三次最近邻上采样,最终输出(W,H,2)的特征图。在可行驶区域分割头中,行驶区域为前景,其他为背景;在车道线分割头,车道线为前景,其他为背景。

2、损失函数

损失函数分为Ldet,Lda−seg和 Lll−seg 三部分

其中Ldet为检测任务的loss,公式如下:
Ldet = α1 * Lclass + α2 * Lobj + α3 * Lbox
Lclass和Lobj都是focal loss,分别用于分类和置信度计算;Lbox为LCIoU损失函数

Lda−seg为可行驶区域分割任务的loss,公式如下
Lda−seg = Lce
就是正常的交叉熵损失函数

Lll−seg为车道线分割任务的loss,公式如下:
Lll−seg = Lce + LIoU
由交叉熵损失函数和iou损失函数组成,其中
LIoU = TN /(TN + FP + FN),为什么损失函数是这样的,希望有懂的大佬可以解答下,分割任务接触的少,不要笑我。
因为车道线的像素比较稀疏,所以需要额外添加一个LIoU 损失

整体损失函数如下:
Lall = γ1 * Ldet + γ2 * Lda−seg + γ3 * Lll−seg,其中
包含6个超参数,α1,α2,α3,γ1,γ2,γ3;该怎么设置呢,终于到了调参侠的用武之地了。

3、实验部分

3.1 训练参数设置

  • 使用 kmeans 聚类获取锚点框
  • 使用 Adam 优化器, 初始化 learning rate, β1、β2 分别设置为 0.001, 0.937, 0.999。使用 Warm-up 和 cosine 衰减策略调整 learning rate

3.2 数据增强策略

  • Photometric distortions:adjust the hue, saturation and value of images
  • geometric distortions:random rotating, scaling, translating, shearing,and left-right flipping

3.3 消融实验

  • 数据集: BDD100K,总共100k张图片,其中训练集70K,验证集10K,测试集20K,测试集没有标签,所以实验结果为验证集上的推理结果
  • 模型输入大小:640×384×3
检测任务结果

可行驶区域分割任务结果

车道线分割任务结果

端到端训练策略和分阶段训练策略结果对比


E, D, S and W refer to Encoder, Detect head, two Segment heads and whole network
例如 ED-S-W 表示先固定S,训练ED;然后固定ED,训练S;最后整个网络一起训练


多任务训练和单任务训练结果对比

实验硬件环境
  • 训练环境:NVIDIA GTX TITAN XP
  • 嵌入式环境:Jetson TX2(23 FPS),使用了 TensorRT 加速部署

4、总结

新的东西不多,但效果很好,估计大道至简吧。

5、论文和code链接

  • 论文:https://arxiv.org/pdf/2108.11250v4.pdf
  • code:https://github.com/hustvl/YOLOP
这篇关于YOLOP 论文解读的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!