PaddleDetection 自定义VOC数据集进行目标检测

7 篇文章 2 订阅
7 篇文章 1 订阅

现在百度飞桨的框架越做越火热,pp飞桨的目标检测框架开发套件也发布多时了,本文就利用自定义的VOC数据集来进行目标检测.下面是一些官方资料的参考地址

PaddleDetection Github
PaddleDetection 安装说明
PaddleDetection 数据集准备
PaddleDetection 如何上手
PaddleDetection 支持的数据格式
[PaddleDetection保姆级教程]使用自定义数据集实现吸烟识别预测
PaddleDetection 官方教程文档

先来讲一下目标检测从安装到训练的我的配置:

显卡: RTX 3090 * 2
CUDA版本:11.4
数据集:10W +

1、安装PaddleDetection

1.安装paddlepaddle

首先需要安装paddlepaddle官方库

环境要求
PaddlePaddle 2.2
OS 64位操作系统
Python 3(3.5.1+/3.6/3.7/3.8/3.9),64位版本
pip/pip3(9.0.1+),64位版本
CUDA >= 10.1
cuDNN >= 7.6
PaddleDetection 依赖 PaddlePaddle 版本关系:

在这里插入图片描述

安装paddlepaddle

# CUDA10.1
python -m pip install paddlepaddle-gpu==2.2.0.post101 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

# CPU
python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

由于我的cuda版本是11.4,过高了,所以我直接去官方网站找下载方式:paddlepaddle 官方下载地址

在这里插入图片描述
我选择的计算平台是CUDA11.2,直接复制上方的安装信息到命令行即可。

python -m pip install paddlepaddle-gpu==2.3.0.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

2、安装PaddleDetection

注意: pip安装方式只支持Python3

# 克隆PaddleDetection仓库
cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git

# 安装其他依赖
cd PaddleDetection
pip install -r requirements.txt

# 编译安装paddledet
python setup.py install

安装后确认测试通过:

python ppdet/modeling/tests/test_architectures.py

测试通过后会提示如下信息:

.......
----------------------------------------------------------------------
Ran 7 tests in 12.816s
OK

3、PaddleDetection安装测试

接下来快速体验目标检测效果

# 在GPU上预测一张图片
export CUDA_VISIBLE_DEVICES=0
python tools/infer.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml -o use_gpu=true weights=https://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_1x_coco.pdparams --infer_img=demo/000000014439.jpg

会在output文件夹下生成一个画有预测结果的同名图像。

结果如下图:
在这里插入图片描述

2、自定义VOC数据集

目前#PaddleDetection支持43种数据格式:coco voc widerface。在这里我们主要说明一下如何使用自定义COCO进行目标检测、实例分割;如何使用自定义VOC数据集进行目标检测。

当用户使用VOC数据集进行的,只需要对voc.yml进行修改即可实现正常训练。
我们提供了一个自定义的VOC数据集,并整理成如图如下图所示的形式。用户在voc.yml文件中修改路径即可。

dataset_dir: 表示数据集的路径(该路径下保存数据集、标注文件、标签以及训练验证数据集说明txt文件)
anno_path: 表示训练/验证数据集的说明txt文件路径 (该处填写相对于dataset_dir的相对路径)
label_list: 表示label的txt文件路径(该处填写相对于dataset_dir的相对路径)
在TestDataset的配置中,对于的主要是label_list的路径,确保在测试过程中,有正确的标签

我们只需要更改…/datasets/voc.yml 这个voc文件即可配置我们的数据集
在这里插入图片描述
各个文件说明

label_list.txt 是类别名称列表,文件名必须是 label_list.txt。若使用VOC数据集,config文件中use_default_label为true时不需要这个文件
cat label_list.txt
aeroplane
bicycle

trainval.txt 是训练数据集文件列表
cat trainval.txt
VOCdevkit/VOC2007/JPEGImages/007276.jpg VOCdevkit/VOC2007/Annotations/007276.xml
VOCdevkit/VOC2012/JPEGImages/2011_002612.jpg VOCdevkit/VOC2012/Annotations/2011_002612.xml

test.txt 是测试数据集文件列表
cat test.txt
VOCdevkit/VOC2007/JPEGImages/000001.jpg VOCdevkit/VOC2007/Annotations/000001.xml

label_list.txt voc 类别名称列表
cat label_list.txt
aeroplane
bicycle

VOC数据标注文件介绍
VOC数据是每个图像文件对应一个同名的xml文件,xml文件中标记物体框的坐标和类别等信息。例如图像2007_002055.jpg:

图片对应的xml文件内包含对应图片的基本信息,比如文件名、来源、图像尺寸以及图像中包含的物体区域信息和类别信息等。

xml文件中包含以下字段:

filename,表示图像名称。
size,表示图像尺寸。包括:图像宽度、图像高度、图像深度。

在这里插入图片描述
object字段,表示每个物体。包括:
在这里插入图片描述

在这里插入图片描述

3、配置PaddleDetection训练参数文件

本项目中,使用YOLOv3模型里的yolov3_mobilenet_v3_large_ssld_270e_voc.yml进行训练
从上图看到yolov3_mobilenet_v3_large_ssld_270e_voc.yml配置需要依赖其他的配置文件。在该例子中需要依赖:

在修改文件之前,先给大家解释一下各依赖文件的作用:

在这里插入图片描述

'…/datasets/voc.yml’主要说明了训练数据和验证数据的路径,包括数据格式(coco、voc等)
‘…/runtime.yml’,主要说明了公共的运行状态,比如说是否使用GPU、迭代轮数等等
base/optimizer_270e.yml’,主要说明了学习率和优化器的配置,以及设置epochs。在其他的训练的配置中,学习率和优化器是放在了一个新的配置文件中。 ‘base/yolov3_mobilenet_v3_large.yml’,主要说明模型、和主干网络的情况说明
base/yolov3_reader.yml’, 主要说明了读取后的预处理操作,比如resize、数据增强等等。

介绍一下需要修改的几个地方(画红线的地方):

…/datasets/voc.yml,数据集配置的路径文件
在这里插入图片描述
base/optimizer_270e.yml,这里可以更改训练epoch次数和学习率等参数
在这里插入图片描述
如果训练时发现内存不够,溢出等情况,可以修改base/yolov3_reader.yml文件,可以通过修改batch_size大小
在这里插入图片描述

4、开始训练

PaddleDetection提供了单卡/多卡训练模式,满足用户多种训练需求
首先进入目录

cd PaddleDetection/

1、单卡训练

export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml

首先指定CUDA的环境变量
其中 -c 代表指定配置文件的路径

2、多卡训练

export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 #windows和Mac下不需要执行该命令
python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml

3、训练结果

训练结果如下图,可以看到GPU已经使用了
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
可以看到loss也在逐渐降低的

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码王吴彦祖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值