Google Colab 开发记录(4)YOLOP 论文解读、环境搭建、推理

举报
一颗小树x 发表于 2021/11/25 15:13:49 2021/11/25
【摘要】 前言本文首先进行YOLOP 论文解读,然后实践记录,首先搭建YOLOP 开发环境,最后推理,查看效果。”实践“分为精简版和详细版,精简版是由简介和命令组成的;详细版是由简介、命令、过程信息记录 组成的。YOLOP 论文解读 YOLOP能同时处理目标检测、可行驶区域分割、车道线检测 三个视觉感知任务,并速度优异、保持较好精度进行工作,代码开源。它是华中科技大学——王兴刚团队,在全景驾驶感知方面...

前言

本文首先进行YOLOP 论文解读,然后实践记录,首先搭建YOLOP 开发环境,最后推理,查看效果。”实践“分为精简版和详细版,精简版是由简介和命令组成的;详细版是由简介、命令、过程信息记录 组成的。

YOLOP 论文解读

 YOLOP能同时处理目标检测可行驶区域分割车道线检测 三个视觉感知任务,并速度优异、保持较好精度进行工作,代码开源。它是华中科技大学——王兴刚团队,在全景驾驶感知方面提出的模型,致敬开源精神。

论文地址:https://arxiv.org/abs/2108.11250

开源代码:https://github.com/hustvl/YOLOP

摘要

全景驾驶感知系统是自动驾驶的重要组成部分。高精度、实时的感知系统可以辅助车辆在行驶中做出合理的决策。提出了一个全景驾驶感知网络(YOLOP)来同时执行交通目标检测、可行驶区域分割和车道检测。

         

在上图中,紫色边界框表示交通对象,绿色区域是可行驶区域,红色线表示车道线。


一、网络框架

YOLOP由一个用于特征提取的编码器,和三个用于处理特定任务的解码器组成。下图是YOLOP的网络结构:

 YOLOP是一种单阶段网络,包含一个共享编码器,三个用于特定任务的解码器。其中三个任务的解码器目标检测部分、可行驶区域分割、车道线分割。不同解码器之间并没有复杂的、冗余共享模块,这可以极大降低计算量,同时使得该网络易于端到端训练。


1.1 Encoder 编码器

该网络中的编码器由Backbone网络与Neck网络构成。

Backbone网络:参考了YOLOv4,采用CSP-Darknet结构,提取输入图像的特征。它支持特征传播和重用,减少了参数和计算的数量。

Neck网络:使得提取的图像特征以充分利用它们。它由空间金字塔池(SPP)模块和特征金字塔网络(FPN)模块组成。SPP模型生成并融合不同尺度的特征,FPN模块融合不同语义层次的特征。因此,Neck网络生成包含“多个尺度”和“多个语义级别信息”的丰富特征,便于融合特征。


1.2 Decoders 解码器

YOLOP包含三个用于三个任务的解码器目标检测部分、可行驶区域分割、车道线分割

1)对于目标检测任务,YOLOP 采用了类似于 YOLOv4 的基于锚框Anchor的多尺度检测技术。这部分结构由“路径聚合网络”组成;Neck网络中的 FPN 自上而下传输语义特征,而 PAN 自下而上传输图像特征。YOLOP 将它们结合起来以获得更好的特征融合效果,由此获得的多尺度融合特征图用于检测。

多尺度特征的每个grid被赋予三个先验anchor(包含不同纵横比),检测头将预测位置偏移、高宽、类别概率以及预测置信度。


2)可行驶区域分割车道线分割部分使用相同的网络结构。将FPN的输出特征(分辨率为)送入到分割分支。我们设计的分割分支非常简单,通过三次上采样处理输出特征尺寸为,代表每个像素是驾驶区域/车道线还是背景的概率。由于Neck中已包含SPP模块,我们并未像PSPNet添加额外的SPP模块。此外,我们采用了最近邻上采样层以降低计算量。因此,分割解码器不仅具有高精度输出,同时推理速度非常快。

来自 FPN 底层的大小为(W/8, H/8, 256)的特征被馈送到分割分支。它应用三个上采样过程并将特征图恢复为(W, H, 2),它表示输入图像中可行驶区域和车道线的像素级概率。在其他分割网络有 SPP 模块的地方,YOLOP 分割头不需要,因为Neck网络中共享 SPP 模块。


二、损失函数和训练方法

YOLOP 使用简单的损失函数,它为三个解码器头提供三个单独的损失函数。检测损失是分类损失、对象损失和边界框损失加权和。可行驶区域分割头和车道线分割头的损失函数都包含带有 logits 的交叉熵损失。车道线分割由于其在预测备用类别方面的有效性而具有额外的 IoU 损失。模型的整体损失函数是所有三个损失的加权和。

上图是端到端与交替优化技术的训练结果。YOLOP 的创建者尝试了不同的训练方法。他们尝试了端到端的培训,这在所有任务都相关的情况下非常有用。此外,他们还研究了一些逐步训练模型的交替优化算法。每个步骤都专注于一项或多项相关任务。但经过作者测试,交替优化算法提供的性能改进可以忽略不计。


三、YOLOP效果与性能

车辆检测效果:

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


性能小结:

YOLOP 在具有挑战性的 BDD100K 数据集上针对三个任务的最新模型进行了测试。它在对象检测任务的准确性方面击败了 Faster RCNN、MultiNet 和 DLT-Net,并且可以实时推断。对于可行驶区域分割任务,YOLOP 的性能分别比 MultiNet 和 DLT-Net 等模型高 19.9% 和 20.2%。而且,它比它们都快 4 到 5 倍。同样,对于车道检测任务,它的性能优于现有的最先进模型高达 2 倍。

它是首批在 Jetson TX2 等嵌入式设备上同时实时执行这三项任务并实现最先进性能的模型之一。

下面实践内容

前提

挂载谷歌云盘、来到自己的谷歌云盘下的目录。

from google.colab import drive
drive.mount('/content/gdrive')

在云盘中,创建一个名为YOLOP的目录,然后进入目录

cd /content/gdrive/MyDrive/YOLO/



精简版——YOLOP 环境搭建、推理

1)查看当前文件目录

!pwd

显示:/content/gdrive/MyDrive/YOLOP


2)查看分配了什么GPU、内存多大

首先点击“修改”,选择“笔记本设置”,硬件加速----GPU加速

!nvidia-smi

from psutil import virtual_memory
ram_gb = virtual_memory().total / 1e9
print('Your runtime has {:.1f} gigabytes of available RAM\n'.format(ram_gb))



3)下载YOLOv5官方代码

!git clone https://github.com/hustvl/YOLOP.git



4)查看当前目录有哪些文件

!ls


5)进入YOLOP目录

cd YOLOP


!pwd

这两调命令需要分开执行;



6)安装YOLOP的开发环境

6.1、先安装conda开发环境

!wget -c https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-x86_64.sh

!chmod +x Miniconda3-py37_4.10.3-Linux-x86_64.sh

%env PYTHONPATH=

!./Miniconda3-py37_4.10.3-Linux-x86_64.sh -b -f -p /usr/local

添加conda环境变量
import sys
_ = (sys.path.append("/usr/local/lib/python3.7/site-packages"))

测试conda环境
!conda env list

6.2、正式安装YOLOP的开发环境

!conda install pytorch==1.7.0 torchvision==0.8.0 cudatoolkit=10.2 -c pytorch

pip install -r requirements.txt

pip install ipykernel


7)推理

默认是CPU进行推理的

!python tools/demo.py  --source inference/images/name.jpg


使用GPU推理图片。
这里的0 是指系统为GPU分配的cuda device号,如果只有一个显卡,默认是0了。
!python tools/demo.py  --source inference/images/1.jpg  --device 0


使用GPU推理视频
!python tools/demo.py --source inference/videos/1.mp4  --device 0


使用相机进行推理

这里的--source 0,是指系统为相机分配的设备号,如果只有一个,默认是0了。

!python tools/demo.py --source 0  --device 0



详细版——YOLOP 环境搭建、推理

1)查看当前文件目录

!pwd

显示:/content/gdrive/MyDrive/YOLOP

2)查看分配了什么GPU、内存多大

首先点击“修改”,选择“笔记本设置”,硬件加速----GPU加速

!nvidia-smi

from psutil import virtual_memory
ram_gb = virtual_memory().total / 1e9
print('Your runtime has {:.1f} gigabytes of available RAM\n'.format(ram_gb))



3)下载YOLOv5官方代码

!git clone https://github.com/hustvl/YOLOP.git



4)查看当前目录有哪些文件

!ls


5)进入YOLOP目录

cd YOLOP

!pwd

这两调命令需要分开执行;



6)安装YOLOP的开发环境

6.1、先安装conda开发环境

!wget -c https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-x86_64.sh

!chmod +x Miniconda3-py37_4.10.3-Linux-x86_64.sh

%env PYTHONPATH=

!./Miniconda3-py37_4.10.3-Linux-x86_64.sh -b -f -p /usr/local

添加conda环境变量
import sys
_ = (sys.path.append("/usr/local/lib/python3.7/site-packages"))

测试conda环境
!conda env list

6.2、正式安装YOLOP的开发环境

!conda install pytorch==1.7.0 torchvision==0.8.0 cudatoolkit=10.2 -c pytorch

pip install -r requirements.txt

pip install ipykernel


7)推理

默认是CPU进行推理的

!python tools/demo.py  --source inference/images/name.jpg


使用GPU推理图片。
这里的0 是指系统为GPU分配的cuda device号,如果只有一个显卡,默认是0了。
!python tools/demo.py  --source inference/images/name.jpg  --device 0

使用GPU推理视频
!python tools/demo.py --source inference/videos/1.mp4  --device 0


使用相机进行推理

这里的--source 0,是指系统为相机分配的设备号,如果只有一个,默认是0了。

!python tools/demo.py --source 0  --device 0

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。