热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用paddleX进行目标检测详解

前言使用百度开源的paddleX工具,我们可以很容易快速训练出

前言

使用百度开源的paddleX工具,我们可以很容易快速训练出使用我们自己标注的数据的目标检测,图像分类,实例分割,语义分割的深度网络模型,本文,主要记录如何全流程使用pddleX来训练一个简单用于检测猫狗ppyolo_tiny模型。

(一)数据准备

这里的图片,我们直接在百度图片上搜索“猫狗”,随机下载10张图片,存到“JPEGImages文件夹”里。
在这里插入图片描述

(二)使用labelme标注工具进行标注

(1)labelme安装&启动

#前提时安装了anaconda
#安装
conda activate my_paddlex
conda install pyqt
pip install labelme
#启动
conda activate my_paddlex
labelme

(2)目标框标注

  1. 打开矩形框标注工具(右键菜单->Create Rectangle),具体如下图所示
    在这里插入图片描述

  2. 使用拖拉的方式对目标物体进行标识,并在弹出的对话框中写明对应label(当label已存在时点击即可, 此处请注意label勿使用中文),具体如下图所示,当框标注错误时,可点击左侧的“Edit Polygons”再点击标注框,通过拖拉进行修改,也可再点击“Delete Polygon”进行删除。
    在这里插入图片描述

  3. 点击右侧”Save“,将标注结果保存到中创建的文件夹Annotations目录中

(3)更多类型的标注

这部分直接复制了paddleX里的文档 数据标注。

详见文档图像分类数据标注

详见文档目标检测数据标注

详见文档实例分割数据标注

详见文档语义分割数据标注

(三)使用paddlex提供的工具将labelme标注的数据转转换成VOC格式的数据

LabelMe标注后的数据还需要进行转换为PascalVOC或MSCOCO格式,才可以用于目标检测任务的训练,创建D:\dataset_voc目录,在python环境中安装paddlex后,使用如下命令即可

paddlex --data_conversion --source labelme --to PascalVOC \
--pics D:\MyDataset\JPEGImages \
--annotations D:\MyDataset\Annotations \
--save_dir D:\dataset_voc

详细用法,参考官方文档

(四)数据切分

目标检测
使用paddlex命令即可将数据集随机划分成70%训练集,20%验证集和10%测试集:

paddlex --split_dataset --format VOC --dataset_dir D:\MyDataset --val_value 0.2 --test_value 0.1

执行上面命令行,会在D:\MyDataset下生成labels.txt, train_list.txt, val_list.txt和test_list.txt,分别存储类别信息,训练样本列表,验证样本列表,测试样本列表
详细用法,参考官方文档

(五)数据加载

这里介绍的是PascalVOC格式的检测数据集的读取,参考代码在后面的完整代码中,MSCOCO格式的检测数据集与语义分割任务数据集的读取,参考官方文档

(六)数据增强

参考官方文档

(七)模型导入

paddlex.det中的模型

# detection
YOLOv3 = cv.models.YOLOv3
FasterRCNN = cv.models.FasterRCNN
PPYOLO = cv.models.PPYOLO
PPYOLOTiny = cv.models.PPYOLOTiny
PPYOLOv2 = cv.models.PPYOLOv2
# instance segmentation
MaskRCNN = cv.models.MaskRCNN

paddlex.det中的模型

UNet = cv.models.UNet
DeepLabV3P = cv.models.DeepLabV3P
FastSCNN = cv.models.FastSCNN
HRNet = cv.models.HRNet
BiSeNetV2 = cv.models.BiSeNetV2

paddlex.cls中的模型

ResNet18 = cv.models.ResNet18
ResNet34 = cv.models.ResNet34
ResNet50 = cv.models.ResNet50
ResNet101 = cv.models.ResNet101
ResNet152 = cv.models.ResNet152
ResNet18_vd = cv.models.ResNet18_vd
ResNet34_vd = cv.models.ResNet34_vd
ResNet50_vd = cv.models.ResNet50_vd
ResNet50_vd_ssld = cv.models.ResNet50_vd_ssld
ResNet101_vd = cv.models.ResNet101_vd
ResNet101_vd_ssld = cv.models.ResNet101_vd_ssld
ResNet152_vd = cv.models.ResNet152_vd
ResNet200_vd = cv.models.ResNet200_vd
MobileNetV1 = cv.models.MobileNetV1
MobileNetV2 = cv.models.MobileNetV2
MobileNetV3_small = cv.models.MobileNetV3_small
MobileNetV3_small_ssld = cv.models.MobileNetV3_small_ssld
MobileNetV3_large = cv.models.MobileNetV3_large
MobileNetV3_large_ssld = cv.models.MobileNetV3_large_ssld
AlexNet = cv.models.AlexNet
DarkNet53 = cv.models.DarkNet53
DenseNet121 = cv.models.DenseNet121
DenseNet161 = cv.models.DenseNet161
DenseNet169 = cv.models.DenseNet169
DenseNet201 = cv.models.DenseNet201
DenseNet264 = cv.models.DenseNet264
HRNet_W18_C = cv.models.HRNet_W18_C
HRNet_W30_C = cv.models.HRNet_W30_C
HRNet_W32_C = cv.models.HRNet_W32_C
HRNet_W40_C = cv.models.HRNet_W40_C
HRNet_W44_C = cv.models.HRNet_W44_C
HRNet_W48_C = cv.models.HRNet_W48_C
HRNet_W64_C = cv.models.HRNet_W64_C
Xception41 = cv.models.Xception41
Xception65 = cv.models.Xception65
Xception71 = cv.models.Xception71
ShuffleNetV2 = cv.models.ShuffleNetV2
ShuffleNetV2_swish = cv.models.ShuffleNetV2_swish

下面是各类模型的官方文档,后面完整代码中,实例代码
图像分类模型API
目标检测模型API
实例分割模型API
图像分割模型API
模型加载API

(八)模型训练与参数调整

模型训练
训练参数调整

(九)完整代码

import paddlex as pdx
from paddlex import transforms as T
#数据增强
train_transforms = T.Compose([
T.MixupImage(mixup_epoch=-1), T.RandomDistort(),
T.RandomExpand(im_padding_value=[123.675, 116.28, 103.53]), T.RandomCrop(),
T.RandomHorizontalFlip(), T.BatchRandomResize(
target_sizes=[192, 224, 256, 288, 320, 352, 384, 416, 448, 480, 512],
interp='RANDOM'), T.Normalize(
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
eval_transforms = T.Compose([
T.Resize(
target_size=320, interp='CUBIC'), T.Normalize(
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
#数据导入
train_dataset = pdx.datasets.VOCDetection(
data_dir='/home/libufan/桌面/catDog/voc',
file_list='/home/libufan/桌面/catDog/voc/train_list.txt',
label_list='/home/libufan/桌面/catDog/voc/labels.txt',
transforms=train_transforms,
shuffle=True)
eval_dataset = pdx.datasets.VOCDetection(
data_dir='/home/libufan/桌面/catDog/voc',
file_list='/home/libufan/桌面/catDog/voc/val_list.txt',
label_list='/home/libufan/桌面/catDog/voc/labels.txt',
transforms=eval_transforms)
#开始训练
num_classes = len(train_dataset.labels)
model = pdx.det.PPYOLOTiny(num_classes=num_classes)
model.train(
num_epochs=100,
train_dataset=train_dataset,
train_batch_size=1,
eval_dataset=eval_dataset,
pretrain_weights='COCO',
learning_rate=0.005,
warmup_steps=1000,
warmup_start_lr=0.0,
lr_decay_epochs=[130, 540],
lr_decay_gamma=.5,
save_interval_epochs=20,
save_dir='output/ppyolotiny',
use_vdl=True)
#使用模型
model = pdx.load_model('output/ppyolotiny/best_model')
image_name = 'insect_det/JPEGImages/0217.jpg'
result = model.predict(image_name)
pdx.det.visualize(image_name, result, threshold=0.5, save_dir='./output/ppyolotiny')
'''


推荐阅读
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • Python正则表达式详解:掌握数量词用法轻松上手
    Python正则表达式详解:掌握数量词用法轻松上手 ... [详细]
  • 不要急着丢弃旧手机:轻松改装成高效PC游戏性能监控工具
    对于许多PC玩家来说,实时监控游戏过程中的硬件状态是一项常见需求,例如关注游戏帧率、CPU和GPU频率以及温度等关键指标。通常情况下,玩家会借助第三方软件将这些数据展示在屏幕的一角。然而,一种更为创新的方法是利用旧手机改装成高效的性能监控工具,不仅节省成本,还能提供更加便捷和直观的监控体验。通过简单的设置和应用程序安装,旧手机可以变成一个专门的硬件监控设备,实时显示各种重要信息,帮助玩家更好地优化游戏性能。 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构
    开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构 ... [详细]
  • 织梦系统多条件联动筛选功能详细教程及删除操作指南
    多条件联动筛选功能广泛应用于图片展示、装修设计、机械设备和在线商城等场景,通常筛选条件应聚焦于用户最关心的要素,而非涵盖所有可能的选项。在DedeCMS中,多条件筛选的PHP开发并未内置删除已选条件的功能,但通过理解PHP筛选与JS筛选的不同机制,实现这一功能相对简单且易于操作。 ... [详细]
  • 本文介绍了在PHP环境中优化表格列表和表单Label样式的技巧,通过CSS代码提升表单的视觉效果。具体包括为每个标签添加箭头背景,并在标签获得焦点时实现背景高亮的效果。示例代码展示了如何为“姓名”和“邮件”字段应用这些样式,适用于phpStudy开发环境。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 程序员的“语言奇缘”续篇:计算中心管理员小C的非正式编程之旅
    (以下故事纯属虚构,旨在为编程爱好者提供一丝轻松时光,如有雷同,纯属巧合,敬请读者勿过度联想)在操作系统课程中,我们认识了计算中心的管理员小C。小C虽然并非科班出身,却凭借对编程的浓厚兴趣和不懈努力,逐渐在技术领域崭露头角。她不仅熟练掌握了多种编程语言,还经常利用业余时间开发一些实用的小工具,帮助同事提高工作效率,成为了团队中的技术明星。小C的故事激励着每一个热爱编程的人,证明了技术之路不问出处,关键在于不断学习与实践。 ... [详细]
  • 在对TCP段的PDU进行重组的过程中,通过网络抓包技术发现了一个特定的TCP段重组PDU实例。经过查阅相关博客和技术文章,成功找到了有效的解决方案,为类似问题的处理提供了宝贵的参考。 ... [详细]
  • 深入解析 Spring MVC 的核心原理与应用实践
    本文将详细探讨Spring MVC的核心原理及其实际应用,首先从配置web.xml文件入手,解析其在初始化过程中的关键作用,接着深入分析请求处理流程,包括控制器、视图解析器等组件的工作机制,并结合具体案例,展示如何高效利用Spring MVC进行开发,为读者提供全面的技术指导。 ... [详细]
  • 如何在Android应用中设计和实现专业的启动欢迎界面(Splash Screen)
    在Android应用开发中,设计与实现一个专业的启动欢迎界面(Splash Screen)至关重要。尽管Android设计指南对使用Splash Screen的态度存在争议,但一个精心设计的启动界面不仅能提升用户体验,还能增强品牌识别度。本文将探讨如何在遵循最佳实践的同时,通过技术手段实现既美观又高效的启动欢迎界面,包括加载动画、过渡效果以及性能优化等方面。 ... [详细]
author-avatar
gengjiang3_946
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有