草庐IT

小熊飞桨练习册-07PaddleX寻找火箭车车

小熊宝宝啊 2023-03-28 原文

小熊飞桨练习册-07PaddleX寻找火箭车车

简介

小熊飞桨练习册-07PaddleX寻找火箭车车,是学习目标检测小项目,本项目开发和测试均在 Ubuntu 20.04 系统下进行。
项目最新代码查看主页:小熊飞桨练习册
百度飞桨 AI Studio 主页:小熊飞桨练习册-07PaddleX寻找火箭车车
Ubuntu 系统安装 CUDA 参考:Ubuntu 百度飞桨和 CUDA 的安装

  • FC游戏火箭车,游戏演示

文件说明

文件 说明
train.py 训练程序
prune.py 裁剪程序
quant.py 量化程序
infer.py 预测程序
onekey.sh 一键获取数据到 dataset 目录下
onetasks.sh 一键训练,量化脚本
get_data.sh 获取数据到 dataset 目录下
check_data.sh 检查 dataset 目录下的数据是否存在
mod/args.py 命令行参数解析
mod/pdxconfig.py PaddleX 配置
mod/config.py 配置
mod/utils.py 杂项
mod/report.py 结果报表
dataset 数据集目录
doc 文档目录
output 训练参数保存目录
result 预测结果保存目录

环境依赖

数据集

数据集来源于自己收集标注的百度飞桨公共数据集:寻找火箭车车

数据集包含训练集,验证集,测试集,相应的 VOC 格式标注文件。

如何自己标注数据

  • 使用标注工具:labelImg

  • 中文界面,支持 VOC 格式,COCO 格式

  • 打开图像目录

  • W 是标注

  • D 是下一张

  • A 是上一张

  • labelImg 演示

一键获取数据

  • 运行脚本,包含以下步骤:获取数据,生成图像路径和标签的文本文件,检查数据。
  • 详情查看 onekey.sh

如果运行在本地计算机,下载完数据,文件放到 dataset 目录下,在项目目录下运行下面脚本。

如果运行在百度 AI Studio 环境,查看 data 目录是否有数据,在项目目录下运行下面脚本。

bash onekey.sh

配置模块

可以查看修改 mod/pdxconfig.py 文件,有详细的说明

开始训练

运行 train.py 文件,查看命令行参数加 -h

  • 示例
python3 run/train.py \
    --dataset ./dataset/road_fighter_car \
    --epochs 32 \
    --batch_size 1 \
    --learning_rate 0.01 \
    --model PicoDet \
    --backbone MobileNetV3 \
    --save_interval_epochs 4 \
    --pretrain_weights "" \
    --save_dir ./output
  • 参数
  -h, --help            show this help message and exit
  --cpu                 是否使用 cpu 计算,默认使用 CUDA
  --num_workers         线程数量,默认 auto,为CPU核数的一半
  --epochs              训练几轮,默认 4 轮
  --batch_size          一批次数量,默认 16
  --learning_rate       学习率,默认 0.025
  --warmup_steps        默认优化器的warmup步数,学习率将在设定的步数内,从warmup_start_lr线性增长至设定的learning_rate
                        ,默认为0。
  --warmup_start_lr     默认优化器的warmup起始学习率,默认为0.0。
  --lr_decay_epochs     默认优化器的学习率衰减轮数。默认为 30 60 90
  --lr_decay_gamma      默认优化器的学习率衰减率。默认为0.1
  --save_interval_epochs 
                        模型保存间隔(单位: 迭代轮数)。默认为1
  --save_dir            模型保存路径。默认为 ./output/
  --dataset             数据集目录,默认 ./dataset/
  --resume_checkpoint   恢复训练时指定上次训练保存的模型路径, 默认不会恢复训练
  --train_list          训练集列表,默认 '--dataset' 参数目录下的 train_list.txt
  --eval_list           评估集列表,默认 '--dataset' 参数目录下的 val_list.txt
  --label_list          分类标签列表,默认 '--dataset' 参数目录下的 labels.txt
  --pretrain_weights    若指定为'.pdparams'文件时,从文件加载模型权重;若为字符串’IMAGENET’,则自动下载在ImageNet图片数据上
                        预训练的模型权重;若为字符串’COCO’,则自动下载在COCO数据集上预训练的模型权重;若为None,则不使用预训练模型。默认为
                        'IMAGENET'。
  --model               PaddleX 模型名称
  --model_list          输出 PaddleX 模型名称,默认不输出,选择后只输出信息,不会开启训练
  --backbone            目标检测模型的 backbone 网络

查看支持的模型

  • 运行命令
python3 run/train.py --model_list
  • 结果
PaddleX 目标检测模型
['PPYOLOv2', 'PPYOLO', 'PPYOLOTiny', 'PicoDet', 'YOLOv3', 'FasterRCNN']
PPYOLOv2 backbone 网络
['ResNet50_vd_dcn', 'ResNet101_vd_dcn']
PPYOLO backbone 网络
['ResNet50_vd_dcn', 'ResNet18_vd', 'MobileNetV3_large', 'MobileNetV3_small']
PPYOLOTiny backbone 网络
['MobileNetV3']
PicoDet backbone 网络
['ESNet_s', 'ESNet_m', 'ESNet_l', 'LCNet', 'MobileNetV3', 'ResNet18_vd']
YOLOv3 backbone 网络
['MobileNetV1', 'MobileNetV1_ssld', 'MobileNetV3', 'MobileNetV3_ssld', 'DarkNet53', 'ResNet50_vd_dcn', 'ResNet34']
FasterRCNN backbone 网络
['ResNet50', 'ResNet50_vd', 'ResNet50_vd_ssld', 'ResNet34', 'ResNet34_vd', 'ResNet101', 'ResNet101_vd', 'HRNet_W18']

模型裁剪

  • 运行 prune.py 文件,查看命令行参数加 -h。
  • 注意:有的模型不支持裁剪。
  • 参数 --pretrain_weights 必须为空 "",裁剪后的精度大部分会降低。
  • 参考文档:模型裁剪
  • 示例
python3 run/prune.py \
    --dataset ./dataset/road_fighter_car \
    --epochs 32 \
    --batch_size 1 --learning_rate 0.001 \
    --save_interval_epochs 4 \
    --model_dir ./output/best_model \
    --save_dir ./output/prune \
    --pruned_flops 0.2 \
    --pretrain_weights ""
  • 参数
  -h, --help            show this help message and exit
  --cpu                 是否使用 cpu 计算,默认使用 CUDA
  --num_workers         线程数量,默认 auto,为CPU核数的一半
  --epochs              训练几轮,默认 4 轮
  --batch_size          一批次数量,默认 16
  --learning_rate       学习率,默认 0.025
  --warmup_steps        默认优化器的warmup步数,学习率将在设定的步数内,从warmup_start_lr线性增长至设定的learning_rate
                        ,默认为0。
  --warmup_start_lr     默认优化器的warmup起始学习率,默认为0.0。
  --lr_decay_epochs     默认优化器的学习率衰减轮数。默认为 30 60 90
  --lr_decay_gamma      默认优化器的学习率衰减率。默认为0.1
  --save_interval_epochs 
                        模型保存间隔(单位: 迭代轮数)。默认为1
  --save_dir            模型保存路径。默认为 ./output/
  --dataset             数据集目录,默认 ./dataset/
  --resume_checkpoint   恢复训练时指定上次训练保存的模型路径, 默认不会恢复训练
  --train_list          训练集列表,默认 '--dataset' 参数目录下的 train_list.txt
  --eval_list           评估集列表,默认 '--dataset' 参数目录下的 val_list.txt
  --label_list          分类标签列表,默认 '--dataset' 参数目录下的 labels.txt
  --model_dir           模型读取路径。默认为 ./output/best_model
  --skip_analyze        是否跳过分析模型各层参数在不同的裁剪比例下的敏感度,默认不跳过
  --pruned_flops        根据选择的FLOPs减小比例对模型进行裁剪。默认为 0.2

模型量化

  • 运行 quant.py 文件,查看命令行参数加 -h
  • model_dir 是正常训练后的模型保存目录。
  • 参考文档:模型量化
  • 示例
python3 run/quant.py \
    --dataset ./dataset/road_fighter_car \
    --epochs 32 \
    --batch_size 1 \
    --learning_rate 0.001 \
    --save_interval_epochs 4 \
    --model_dir ./output/best_model \
    --save_dir ./output/quant
  • 参数
  -h, --help            show this help message and exit
  --cpu                 是否使用 cpu 计算,默认使用 CUDA
  --num_workers         线程数量,默认 auto,为CPU核数的一半
  --epochs              训练几轮,默认 4 轮
  --batch_size          一批次数量,默认 16
  --learning_rate       学习率,默认 0.025
  --warmup_steps        默认优化器的warmup步数,学习率将在设定的步数内,从warmup_start_lr线性增长至设定的learning_rate
                        ,默认为0。
  --warmup_start_lr     默认优化器的warmup起始学习率,默认为0.0。
  --lr_decay_epochs     默认优化器的学习率衰减轮数。默认为 30 60 90
  --lr_decay_gamma      默认优化器的学习率衰减率。默认为0.1
  --save_interval_epochs 
                        模型保存间隔(单位: 迭代轮数)。默认为1
  --save_dir            模型保存路径。默认为 ./output/
  --dataset             数据集目录,默认 ./dataset/
  --resume_checkpoint   恢复训练时指定上次训练保存的模型路径, 默认不会恢复训练
  --train_list          训练集列表,默认 '--dataset' 参数目录下的 train_list.txt
  --eval_list           评估集列表,默认 '--dataset' 参数目录下的 val_list.txt
  --label_list          分类标签列表,默认 '--dataset' 参数目录下的 labels.txt
  --model_dir           模型读取路径。默认为 ./output/best_model

预测模型

  • 运行 infer.py 文件,查看命令行参数加 -h
  • show_result 本地计算机运行有效
  • 示例
python3 run/infer.py --model_dir ./output/best_model \
    --predict_image ./dataset/road_fighter_car/JPEGImages/0297.jpg
  • 参数
  -h, --help        show this help message and exit
  --model_dir       读取模型的目录,默认 './output/best_model'
  --predict_image   预测的图像文件
  --threshold       score阈值,将Box置信度低于该阈值的框过滤,默认 0.5
  --result_list     预测的结果列表文件,默认 './result/result.txt'
  --result_dir      预测结果可视化的保存目录,默认 './result'
  --show_result     显示预测结果的图像
  • 结果演示

部署模型导出

--fixed_input_shape 来指定输入大小[w,h]或者是[n,c,w,h]

paddlex --export_inference --model_dir=./output/best_model/ --save_dir=./output/inference_model --fixed_input_shape=[-1,3,608,608]

VisualDL 可视化分析工具

  • 安装和使用说明参考:VisualDL
  • 如果是 AI Studio 环境训练的把 output/vdl_log 目录下载下来,解压缩后放到本地项目目录下 output/vdl_log 目录
  • 在项目目录下运行下面命令
  • 然后根据提示的网址,打开浏览器访问提示的网址即可
visualdl --logdir ./output/vdl_log

有关小熊飞桨练习册-07PaddleX寻找火箭车车的更多相关文章

  1. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  2. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  3. ruby - 寻找纯 Ruby 的图像处理库 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我找到的大多数库/代码都是针对RoR而不是纯ruby​​。即使我在谷歌上搜索纯ruby​​图片上传,我也会得到PureRubyOnRails;)所以...我正在寻找一个gem/library/code来做一些简单的事情:检查它是否是一个有效的图像文件将图像调整为预定义的值将其保存为jpg(来自jpeg、jpg、png、gif、bmp)

  4. ruby - 寻找产品和商店的最佳组合以最小化成本的算法 - 2

    你好,Stackoverflow的人们,我经营一个网站,为用户寻找最便宜的书籍购买地点。这对于单本书来说很容易,但对于多本书来说,有时在一家商店购买一本书而在另一家商店购买另一本书会更便宜。目前我找到了销售用户列表中所有书籍的最便宜的商店,但我想要一个更智能的系统。这里有更多信息:一本书的价格对于一家商店来说是不变的。运费可能会有所不同,具体取决于书籍的数量或书籍的总值(value)。每个商店对象都可以获取一组书籍并返回运费。通常,并非每家书店都出售每一本书。不确定在这里链接到我的站点是否很酷,但它列在我的用户配置文件中。我希望能够找到最便宜的商店和书籍组合。我担心这需要一种蛮力方法-

  5. ruby-on-rails - 寻找具有错误检查功能的法拉第中间件示例 - 2

    我正在寻找FaradayMiddleware的示例,它可以处理请求中的http(状态代码)错误以及网络超时。在阅读了Faraday及其中间件的文档后,我了解到这是中间件的用例之一……我只是不知道实现应该是什么样子。谢谢 最佳答案 Faraday默认有一个错误处理中间件:faraday.useFaraday::Response::RaiseError例如:require'faraday'conn=Faraday.new('https://github.com/')do|c|c.useFaraday::Response::RaiseEr

  6. ruby-on-rails - Rails for Zombies Lab 4 > 练习 3 - 2

    我在第三个练习中停留在第四个RailsforZombies实验室。这是我的任务:创建将创建新僵尸的操作,然后重定向到创建的僵尸的显示页面。我有以下参数数组:params={:zombie=>{:name=>"Greg",:graveyard=>"TBA"}}我写了下面的代码作为解决方案:defcreate@zombie=Zombie.create@zombie.name=params[:zombie[:name]]@zombie.graveyard=params[:zombie[:graveyard]]@zombie.saveredirect_to(create_zombie_path

  7. ruby - 寻找 "real"使用延续的例子 - 2

    我试图掌握延续的概念,我从Wikipediaarticle中找到了几个像这样的小教学示例。:(definethe-continuation#f)(define(test)(let((i0));call/cccallsitsfirstfunctionargument,passing;acontinuationvariablerepresentingthispointin;theprogramastheargumenttothatfunction.;;Inthiscase,thefunctionargumentassignsthat;continuationtothevariablethe

  8. ruby - 寻找 gem 根 - 2

    有没有办法知道我的gem的根路径?我正在尝试从gems路径中的yaml加载默认配置。如何使用ruby​​获取gems根目录? 最佳答案 给定以下项目结构:your_gem/lib/your_gem.rb这是我的做法:#your_gem.rbmoduleYourGemdefself.rootFile.expand_path'../..',__FILE__endendRuby2.0引入了Kernel#__dir__方法;它提供了一个相当短的解决方案:#your_gem.rbmoduleYourGemdefself.rootFile.di

  9. ruby-on-rails - 寻找在 Ruby on Rails 中构建安全 REST API 的建议 - 2

    我开始为我正在从事的项目构建RESTAPI,这让我对使用RoR构建API的最佳方法进行了一些研究。我很快发现,默认情况下,模型对世界开放,可以通过URL调用,只需在URL末尾放置一个“.xml”并传递适当的参数。那么接下来的问题来了。如何保护我的应用程序以防止未经授权的更改?在做一些研究时,我发现了几篇关于attr_accessible的文章。和attr_protected以及如何使用它们。我发现谈论这些的特定URL于07年5月发布(here)。与ruby​​的所有事物一样,我确信从那时起事物已经发生了变化。所以我的问题是,这仍然是在RoR中保护RESTAPI的最佳方式吗?如果不是,您

  10. ruby - 哈希火箭被弃用了吗? - 2

    被广泛引用的RIPHashrocketpost似乎暗示HashRocket语法(:foo=>"bar")被弃用,取而代之的是新的RubyJSON风格的哈希(foo:"bar"),但我找不到任何明确的引用资料说明HashRocket形式实际上在Ruby1.9中已被弃用/不建议使用。 最佳答案 该博文的作者过于戏剧化和愚蠢,=>是stillquitenecessary.特别是:对于不是有效标签的符号,您必须使用火箭::$set=>x有效,但$set:x无效。在Ruby2.2+中,您可以使用引号解决此问题:'$set':xwilldoTh

随机推荐