Skip to content

Latest commit

 

History

History
303 lines (209 loc) · 10.9 KB

README _CH.md

File metadata and controls

303 lines (209 loc) · 10.9 KB

You Only 👀 Once for Panoptic ​ 🚗 Perception

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)


English Document

YOLOP框架

yolop

贡献

  • 我们提出了一种高效的多任务网络,该网络可以联合处理自动驾驶中的目标检测、可驾驶区域分割和车道检测三个关键任务。不但节省了计算成本,减少了推理时间,还提高了各个任务的性能。我们的工作是第一个在嵌入式设备上实现实时,同时在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

消融实验 1: 端对端训练 v.s. 分步训练:

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

消融实验 2: 多任务学习 v.s. 单任务学习:

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

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,以此类推。

可视化

交通目标检测结果

detect result

可行驶区域分割结果

车道线分割结果

注意点:

  • 车道线分割结果是经过曲线拟合的.

Project Structure

├─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

Requirement

整个代码库是在 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

Data preparation

Download

我们推荐按照如下图片数据集文件结构:

├─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

模型评测

你可以在 ./lib/config/default.py设定测试配置(包括: batch_size 以及 nms的阈值).

开始评测:

python tools/test.py --weights weights/End-to-end.pth

Demo测试

我们提供两种测试方案

测试所使用的的图片存储在 --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 ⭐ 和引用 📝 :

@misc{2108.11250,
Author = {Dong Wu and Manwen Liao and Weitian Zhang and Xinggang Wang},
Title = {YOLOP: You Only Look Once for Panoptic Driving Perception},
Year = {2021},
Eprint = {arXiv:2108.11250},
}