当前位置:   article > 正文

【PP-YOLOE+】第18届全国大学生智能汽车竞赛百度完全模型组线上资格_智能车比赛小车模型

智能车比赛小车模型

★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>


第十八届全国大学生智能汽车竞赛-百度完全模型组-线上资格赛基线

1、比赛背景介绍

  全国大学生智能汽车竞赛是以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程的实践活动,是教育部倡导的大学生A类科技竞赛之一。竞赛以立足培养,重在参与,鼓励探索,追求卓越为指导思想,培养大学生的创意性科技竞赛能力。

  本次比赛数据由赛曙科技(SASU)提供,模型和基线相关技术支持由深度学习技术平台部提供,一站式AI开发平台AI Studio由百度AI技术生态部提供。要求在统一的计算资源下,能够对农业相关物体的具体位置和类别进行快速精准的识别。期待参赛者们能够以此为契机,共同推进智慧农业的发展。

  比赛链接

2、基线程序说明

  1. 采用官方PaddlePaddle-GPU v2.3的环境,使用PaddleDetection-develop的框架进行训练、推理、结果生成

  2. 基线程序旨在全流程完成检测、后处理部分,为参赛选手提供流程上的帮助,按照此流程进行训练和处理,F1-score理论上可以达到0.95以上

  3. 提供将voc格式的数据集转成coco格式的示例,两者只是dataloader的方式不同,训练所得模型精度并无差异

3、比赛环境配置

3.1 安装PaddleDetection

(此步骤已经完成,在此基线环境内,不需要再次进行)

# %cd /home/aistudio/work/
# # 从github上下载PaddleDetection
# # !git clone https://github.com/PaddlePaddle/PaddleDetection.git -b develop

# # 使用提前准备好的PaddleDetection代码包
# !wget https://bj.bcebos.com/v1/paddledet/code/PaddleDetection-release-2.5.zip
# !unzip -q PaddleDetection-release-2.5.zip
# !mv PaddleDetection-release-2.5 PaddleDetection
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.2 安装依赖

(每次启动环境都要运行!)

%cd ~
%cd work/PaddleDetection
# 安装相关依赖
!pip install -r requirements.txt

# 编译安装paddledet
!python setup.py install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4、比赛数据准备

4.1 解压数据

(注意数据集中路径名、文件名尽量不要使用中文,避免中文编码问题导致出错)

# 将官方数据集解压缩至/home/aistudio/data
!unzip -oq /home/aistudio/data/data191561/DatasetVocSASU_ForIcarM2023.zip -d /home/aistudio/data/
  • 1
  • 2

4.2 分析数据

  官方数据集一共包含4770张带有标签的图片,均为目标检测voc格式。目录如下:

├── Annotations
│   ├── 4770个xml文件
├── Images
│   ├── 4770张jpg图片
├── label_list.txt
├── random_split.py
├── train.txt
├── trainval.txt
└── val.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

  数据集为智能车视角拍摄的照片,照片格式为jpg,大小均为320 x 240,每张照片对应有一个同名标注文件,标注文件格式为 xml

序号数据名称采样说明
1拖拉机-tractor>远景、近景、蓝色底布背景;
2谷仓-granary> 远景、近景、蓝色底布背景;
3玉米-corn> 远景、近景、蓝色底布背景;
4猪-pig> 远景、近景、蓝色底布背景;
5拱桥-bridge> 远景、近景、蓝色底布背景;
6锥桶-cone> 远景、近景、蓝色底布背景;
7减速带-bump> 远景、近景、蓝色底布背景;
8斑马线-CrossWalk> 远景、近景、蓝色底布背景;

  统计官方数据集里每个类别的数量,如果有些类别的实例数量比较少,我们可以考虑使用离线数据增强等方法缓解数据不均衡的问题。

import os
from unicodedata import name
import xml.etree.ElementTree as ET
import glob

def count_num(indir):
    # 提取xml文件列表
    os.chdir(indir)
    annotations = os.listdir('.')
    annotations = glob.glob(f'{str(annotations)}*.xml')

    dict = {} # 新建字典,用于存放各类标签名及其对应的数目
    for file in annotations: # 遍历xml文件
        # 开始解析xml文件
        in_file = open(file, encoding = 'utf-8')
        tree = ET.parse(in_file)
        root = tree.getroot()

        # 遍历文件的所有标签
        for obj in root.iter('object'):
            name = obj.find('name').text
            if name in dict: dict[name] += 1 # 如果标签不是第一次出现,则+1
            else: dict[name] = 1 # 如果标签是第一次出现,则将该标签名对应的value初始化为1

    # 打印结果
    print("各类标签的数量分别为:")
    for key in dict: 
        print(f'{key}: {str(dict[key])}')            

indir='/home/aistudio/data/DatasetVocSASU_ForIcarM2023/DatasetVocSASU_ForIcarM2023/Annotations/'   # xml文件所在的目录
count_num(indir) # 调用函数统计各类标签数目
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

4.3 转换数据

  原始数据集为LabelImage标注的xml格式,这里我们对其进行预处理,得到PP-YOLOE+常用的coco格式。其中,PaddleDetection提供了x2coco.py用于将voc, widerface, labelme 或者 cityscape转换为COCO格式。在转换之前我们需要提供训练集和验证集标签的id文件

# 生成训练集和验证集标签的id文件
# 随机划分数据集(可在代码中修改train_ratio的值从而改变训练集的划分比例)
!python /home/aistudio/work/voc2coco/random_split_ids.py
  • 1
  • 2
  • 3
# voc转coco格式,得到train.json
!python /home/aistudio/work/PaddleDetection/tools/x2coco.py \
    --dataset_type=voc \
    --voc_anno_dir='/home/aistudio/data/DatasetVocSASU_ForIcarM2023/DatasetVocSASU_ForIcarM2023/Annotations' \
    --voc_anno_list='/home/aistudio/work/voc2coco/train_ann_ids.txt' \
    --voc_label_list='/home/aistudio/data/DatasetVocSASU_ForIcarM2023/DatasetVocSASU_ForIcarM2023/label_list.txt' \
    --output_dir='/home/aistudio/data/DatasetVocSASU_ForIcarM2023/DatasetVocSASU_ForIcarM2023/' \
    --voc_out_name=train.json
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
# voc转coco格式,得到val.json
!python /home/aistudio/work/PaddleDetection/tools/x2coco.py \
    --dataset_type=voc \
    --voc_anno_dir='/home/aistudio/data/DatasetVocSASU_ForIcarM2023/DatasetVocSASU_ForIcarM2023/Annotations' \
    --voc_anno_list='/home/aistudio/work/voc2coco/val_ann_ids.txt' \
    --voc_label_list='/home/aistudio/data/DatasetVocSASU_ForIcarM2023/DatasetVocSASU_ForIcarM2023/label_list.txt' \
    --output_dir='/home/aistudio/data/DatasetVocSASU_ForIcarM2023/DatasetVocSASU_ForIcarM2023/' \
    --voc_out_name=val.json
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5、模型训练

5.1 模型选择

  这里我们选择使用PaddleDetection(GitHub传送门)套件中的PP-YOLOE+进行训练,PP-YOLOE是一款高精度推理速度快的检测模型,包含骨干网络CSPRepResNet,特征融合CSPPAN,轻量级ETHead,改进的动态匹配算法TAL等模块, 并且根据不同的应用场景设计了一系列模型,即s/m/l/x。PP-YOLOE+是PP-YOLOE的升级版本,升级主要包括:

  • 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/52074
推荐阅读
相关标签