You Only Look at Once for Panoptic driving Perception
by Dong Wu, Manwen Liao, Weitian Zhang, Xinggang Wang 📧 School of EIC, HUST
(📧) corresponding author.
arXiv technical report (arXiv 2108.11250)
-
我们提出了一种高效的多任务网络,该网络可以联合处理自动驾驶中的目标检测、可驾驶区域分割和车道检测三个关键任务。不但节省了计算成本,减少了推理时间,还提高了各个任务的性能。我们的工作是第一个在嵌入式设备上实现实时,同时在
BDD100K
数据集上保持SOTA
(最先进的)性能水平。 -
我们设计了消融实验来验证我们的多任务方案的有效性。证明了这三个任务不需要繁琐的交替优化就可以联合学习。
-
我们设计了消融实验证明了基于网格的检测任务的预测机制与语义分割任务的预测机制更相关,相信这将为其他相关的多任务学习研究工作提供参考。
Model | Recall(%) | mAP50(%) | Speed(fps) |
---|---|---|---|
Multinet |
81.3 | 60.2 | 8.6 |
DLT-Net |
89.4 | 68.4 | 9.3 |
Faster R-CNN |
77.2 | 55.6 | 5.3 |
YOLOv5s |
86.8 | 77.2 | 82 |
YOLOP(ours) |
89.2 | 76.5 | 41 |
Model | mIOU(%) | Speed(fps) |
---|---|---|
Multinet |
71.6 | 8.6 |
DLT-Net |
71.3 | 9.3 |
PSPNet |
89.6 | 11.1 |
YOLOP(ours) |
91.5 | 41 |
Model | mIOU(%) | IOU(%) |
---|---|---|
ENet |
34.12 | 14.64 |
SCNN |
35.79 | 15.84 |
ENet-SAD |
36.56 | 16.02 |
YOLOP(ours) |
70.50 | 26.20 |
Training_method | Recall(%) | AP(%) | mIoU(%) | Accuracy(%) | IoU(%) |
---|---|---|---|---|---|
ES-W |
87.0 | 75.3 | 90.4 | 66.8 | 26.2 |
ED-W |
87.3 | 76.0 | 91.6 | 71.2 | 26.1 |
ES-D-W |
87.0 | 75.1 | 91.7 | 68.6 | 27.0 |
ED-S-W |
87.5 | 76.1 | 91.6 | 68.0 | 26.8 |
End-to-end |
89.2 | 76.5 | 91.5 | 70.5 | 26.2 |
Training_method | Recall(%) | AP(%) | mIoU(%) | Accuracy(%) | IoU(%) | Speed(ms/frame) |
---|---|---|---|---|---|---|
Det(only) |
88.2 | 76.9 | - | - | - | 15.7 |
Da-Seg(only) |
- | - | 92.0 | - | - | 14.8 |
Ll-Seg(only) |
- | - | - | 79.6 | 27.9 | 14.8 |
Multitask |
89.2 | 76.5 | 91.5 | 70.5 | 26.2 | 24.4 |
Training_method | Recall(%) | AP(%) | mIoU(%) | Accuracy(%) | IoU(%) | Speed(ms/frame) |
---|---|---|---|---|---|---|
R-CNNP Det(only) |
79.0 | 67.3 | - | - | - | - |
R-CNNP Seg(only) |
- | - | 90.2 | 59.5 | 24.0 | - |
R-CNNP Multitask |
77.2(-1.8) | 62.6(-4.7) | 86.8(-3.4) | 49.8(-9.7) | 21.5(-2.5) | 103.3 |
YOLOP Det(only) |
88.2 | 76.9 | - | - | - | - |
YOLOP Seg(only) |
- | - | 91.6 | 69.9 | 26.5 | - |
YOLOP Multitask |
89.2(+1.0) | 76.5(-0.4) | 91.5(-0.1) | 70.5(+0.6) | 26.2(-0.3) | 24.4 |
Notes:
- 我们工作参考了以下工作:
Multinet
(论文,代码),DLT-Net
(论文),Faster R-CNN
(论文,代码),YOLOv5
(代码) ,PSPNet
(论文,代码) ,ENet
(论文,代码)SCNN
(论文,代码)SAD-ENet
(论文,代码). 感谢他们精彩的工作 - 在表 4中, E, D, S 和 W 分别代表 编码器(Encoder), 检测头(Detect head), 两个分割头(Segment heads)和整个网络(whole network). 所以算法 (首先,我们只训练编码器和检测头。然后我们冻结编码器和检测头只训练两个分割头。最后,整个网络进行联合训练三个任务) 可以被记作
ED-S-W
,以此类推。
注意点:
- 车道线分割结果是经过曲线拟合的.
├─inference
│ ├─images # inference images
│ ├─output # inference result
├─lib
│ ├─config/default # configuration of training and validation
│ ├─core
│ │ ├─activations.py # activation function
│ │ ├─evaluate.py # calculation of metric
│ │ ├─function.py # training and validation of model
│ │ ├─general.py #calculation of metric、nms、conversion of data-format、visualization
│ │ ├─loss.py # loss function
│ │ ├─postprocess.py # postprocess(refine da-seg and ll-seg, unrelated to paper)
│ ├─dataset
│ │ ├─AutoDriveDataset.py # Superclass dataset,general function
│ │ ├─bdd.py # Subclass dataset,specific function
│ │ ├─hust.py # Subclass dataset(Campus scene, unrelated to paper)
│ │ ├─convect.py
│ │ ├─DemoDataset.py # demo dataset(image, video and stream)
│ ├─models
│ │ ├─YOLOP.py # Setup and Configuration of model
│ │ ├─light.py # Model lightweight(unrelated to paper, zwt)
│ │ ├─commom.py # calculation module
│ ├─utils
│ │ ├─augmentations.py # data augumentation
│ │ ├─autoanchor.py # auto anchor(k-means)
│ │ ├─split_dataset.py # (Campus scene, unrelated to paper)
│ │ ├─utils.py # logging、device_select、time_measure、optimizer_select、model_save&initialize 、Distributed training
│ ├─run
│ │ ├─dataset/training time # Visualization, logging and model_save
├─tools
│ │ ├─demo.py # demo(folder、camera)
│ │ ├─test.py
│ │ ├─train.py
├─toolkits
│ │ ├─deploy # Deployment of model
│ │ ├─datapre # Generation of gt(mask) for drivable area segmentation task
├─weights # Pretraining model
整个代码库是在 python 3.版本, PyTorch 1.7+版本和 torchvision 0.8+版本上开发的:
conda install pytorch==1.7.0 torchvision==0.8.0 cudatoolkit=10.2 -c pytorch
其他依赖库的版本要求详见requirements.txt
:
pip install -r requirements.txt
-
从 images下载图片数据集
-
从 det_annotations下载检测任务的标签
-
从 da_seg_annotations下载可行驶区域分割任务的标签
-
从 ll_seg_annotations下载车道线分割任务的标签
我们推荐按照如下图片数据集文件结构:
├─dataset root
│ ├─images
│ │ ├─train
│ │ ├─val
│ ├─det_annotations
│ │ ├─train
│ │ ├─val
│ ├─da_seg_annotations
│ │ ├─train
│ │ ├─val
│ ├─ll_seg_annotations
│ │ ├─train
│ │ ├─val
在 ./lib/config/default.py
下更新数据集的路径配置。
你可以在 ./lib/config/default.py
设定训练配置. (包括: 预训练模型的读取,损失函数, 数据增强,optimizer,训练预热和余弦退火,自动anchor,训练轮次epoch, batch_size)
如果你想尝试交替优化或者单一任务学习,可以在./lib/config/default.py
中将对应的配置选项修改为 True
。(如下,所有的配置都是 False
, which means training multiple tasks end to end)。
# Alternating optimization
_C.TRAIN.SEG_ONLY = False # Only train two segmentation branchs
_C.TRAIN.DET_ONLY = False # Only train detection branch
_C.TRAIN.ENC_SEG_ONLY = False # Only train encoder and two segmentation branchs
_C.TRAIN.ENC_DET_ONLY = False # Only train encoder and detection branch
# Single task
_C.TRAIN.DRIVABLE_ONLY = False # Only train da_segmentation task
_C.TRAIN.LANE_ONLY = False # Only train ll_segmentation task
_C.TRAIN.DET_ONLY = False # Only train detection task
开始训练:
python tools/train.py
多GPU训练:
python -m torch.distributed.launch --nproc_per_node=N tools/train.py # N: the number of GPUs
你可以在 ./lib/config/default.py
设定测试配置(包括: batch_size 以及 nms的阈值).
开始评测:
python tools/test.py --weights weights/End-to-end.pth
我们提供两种测试方案
测试所使用的的图片存储在 --source
下, 然后测试结果会保存在 --save-dir
下:
python tools/demo.py --source inference/images
如果你的计算机连接了摄像头, 你可以将 source
设为摄像头的序号(默认值为 0).
python tools/demo.py --source 0
input | output |
---|---|
我们的模型可以在 Jetson Tx2
上 连接Zed Camera
实时推理。我们使用 TensorRT
工具进行推理加速。我们在 ./toolkits/deploy
提供模型部署和推理的全部代码。
你可以通过运行以下命令生成可行驶区域的Mask标签
python toolkits/datasetpre/gen_bdd_seglabel.py
如果你发现我们的代码和论文对你的研究有帮助, 可以考虑给我们 star ⭐ 和引用 📝 :
@article{wu2022yolop,
title={Yolop: You only look once for panoptic driving perception},
author={Wu, Dong and Liao, Man-Wen and Zhang, Wei-Tian and Wang, Xing-Gang and Bai, Xiang and Cheng, Wen-Qing and Liu, Wen-Yu},
journal={Machine Intelligence Research},
pages={1--13},
year={2022},
publisher={Springer}
}