草庐IT

小熊飞桨练习册-08PaddleX底特律街景

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

小熊飞桨练习册-08PaddleX底特律街景

简介

小熊飞桨练习册-08PaddleX底特律街景,是学习图像分割小项目,本项目开发和测试均在 Ubuntu 20.04 系统下进行。
项目最新代码查看主页:小熊飞桨练习册
百度飞桨 AI Studio 主页:小熊飞桨练习册-08PaddleX底特律街景
Ubuntu 系统安装 CUDA 参考:Ubuntu 百度飞桨和 CUDA 的安装

  • 锯齿狼牙的预测结果,模型:BiSeNetV2


文件说明

文件 说明
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 预测结果保存目录

环境依赖

数据集

数据集来源于自己收集标注的百度飞桨公共数据集:锯齿狼牙的底特律街景

数据集包含训练集,验证集,测试集,包含 MASK 掩膜 和 COCO 格式数据集,适用图像分割,语义分割,实例分割学习。

如何自己标注数据

  • 使用标注工具:EISeg
  • 中文界面,支持 MASK 掩膜 和 COCO 格式

一键获取数据

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

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

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

bash onekey.sh

配置模块

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

开始训练

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

  • 示例
python3 run/train.py \
    --dataset ./dataset/detroit_streetscape \
    --epochs 32 \
    --batch_size 1 \
    --learning_rate 0.01 \
    --model BiSeNetV2 \
    --pretrain_weights "CITYSCAPES"
  • 参数
  -h, --help            show this help message and exit
  --cpu                 是否使用 cpu 计算,默认使用 CUDA
  --num_workers         线程数量,默认 auto,为CPU核数的一半
  --epochs              训练几轮,默认 4 轮
  --batch_size          一批次数量,默认 16
  --learning_rate       学习率,默认 0.025
  --early_stop          是否使用提前终止训练策略。默认为 False
  --early_stop_patience 
                        当使用提前终止训练策略时,如果验证集精度在early_stop_patience 个 epoch
                        内连续下降或持平,则终止训练。默认为 5
  --save_interval_epochs 
                        模型保存间隔(单位: 迭代轮数)。默认为 1
  --log_interval_steps 
                        训练日志输出间隔(单位:迭代次数)。默认为 10
  --resume_checkpoint   恢复训练时指定上次训练保存的模型路径, 默认不会恢复训练
  --save_dir            模型保存路径。默认为 ./output/
  --dataset             数据集目录,默认 ./dataset/
  --train_list          训练集列表,默认 '--dataset' 参数目录下的 train_list.txt
  --eval_list           评估集列表,默认 '--dataset' 参数目录下的 val_list.txt
  --label_list          分类标签列表,默认 '--dataset' 参数目录下的 labels.txt
  --lr_decay_power      默认优化器学习率衰减指数。默认为 0.9
  --use_mixed_loss      是否使用混合损失函数。如果为True,混合使用CrossEntropyLoss和LovaszSoftmaxLoss,权重分别为0
                        .8和0.2。如果为False,则仅使用CrossEntropyLoss。也可以以列表的形式自定义混合损失函数,列表的每一个元素
                        为(损失函数类型,权重)元组,损失函数类型取值范围为['CrossEntropyLoss', 'DiceLoss',
                        'LovaszSoftmaxLoss']。默认为False。
  --align_corners       是网络中对特征图进行插值时是否将四个角落像素的中心对齐。若特征图尺寸为偶数,建议设为True。若特征图尺寸为奇数,建议设为Fal
                        se。默认为False。
  --backbone            图像分割模型 DeepLabV3P 的 backbone 网络,取值范围为['ResNet50_vd',
                        'ResNet101_vd'],默认为'ResNet50_vd'。
  --hrnet_width         图像分割模型 HRNet 的 width 网络,高分辨率分支中特征层的通道数量。默认为48。可选择取值为[18, 48]。
  --pretrain_weights    若指定为'.pdparams'文件时,则从文件加载模型权重;若为字符串'CITYSCAPES',则自动下载在CITYSCAPES
                        图片数据上预训练的模型权重;若为字符串'PascalVOC',则自动下载在PascalVOC图片数据上预训练的模型权重;若为字符
                        串'IMAGENET',则自动下载在ImageNet图片数据上预训练的模型权重;若为None,则不使用预训练模型。默认为'CIT
                        YSCAPES'。
  --model               PaddleX 模型名称
  --model_list          输出 PaddleX 模型名称,默认不输出,选择后只输出信息,不会开启训练

查看支持的模型

  • 运行命令
python3 run/train.py --model_list
  • 结果
PaddleX 图像分割模型
['DeepLabV3P', 'BiSeNetV2', 'UNet', 'HRNet', 'FastSCNN']
DeepLabV3P backbone 网络
['ResNet50_vd', 'ResNet101_vd']

模型裁剪

  • 运行 prune.py 文件,查看命令行参数加 -h。
  • 注意:有的模型不支持裁剪。
  • 裁剪后的精度大部分会降低。
  • 参考文档:模型裁剪
  • 示例
python3 run/prune.py \
    --dataset ./dataset/detroit_streetscape \
    --epochs 16 \
    --batch_size 1 \
    --learning_rate 0.001 \
    --model_dir ./output/best_model \
    --save_dir ./output/prune \
    --pruned_flops 0.2
  • 参数
  -h, --help            show this help message and exit
  --cpu                 是否使用 cpu 计算,默认使用 CUDA
  --num_workers         线程数量,默认 auto,为CPU核数的一半
  --epochs              训练几轮,默认 4 轮
  --batch_size          一批次数量,默认 16
  --learning_rate       学习率,默认 0.025
  --early_stop          是否使用提前终止训练策略。默认为 False
  --early_stop_patience 
                        当使用提前终止训练策略时,如果验证集精度在early_stop_patience 个 epoch 内连续下降或持平,则终止训练。默认为 5
  --save_interval_epochs 
                        模型保存间隔(单位: 迭代轮数)。默认为 1
  --log_interval_steps 
                        训练日志输出间隔(单位:迭代次数)。默认为 10
  --resume_checkpoint   恢复训练时指定上次训练保存的模型路径, 默认不会恢复训练
  --save_dir            模型保存路径。默认为 ./output/
  --dataset             数据集目录,默认 ./dataset/
  --train_list          训练集列表,默认 '--dataset' 参数目录下的 train_list.txt
  --eval_list           评估集列表,默认 '--dataset' 参数目录下的 val_list.txt
  --label_list          分类标签列表,默认 '--dataset' 参数目录下的 labels.txt
  --lr_decay_power      默认优化器学习率衰减指数。默认为 0.9
  --model_dir           模型读取路径。默认为 ./output/best_model
  --skip_analyze        是否跳过分析模型各层参数在不同的裁剪比例下的敏感度,默认不跳过
  --pruned_flops        根据选择的 FLOPS 减小比例对模型进行裁剪。默认为 0.2

模型量化

  • 运行 quant.py 文件,查看命令行参数加 -h
  • model_dir 是正常训练后的模型保存目录。
  • 参考文档:模型量化
  • 示例
python3 run/quant.py \
    --dataset ./dataset/detroit_streetscape \
    --epochs 16 \
    --batch_size 1 \
    --learning_rate 0.001 \
    --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
  --early_stop          是否使用提前终止训练策略。默认为 False
  --early_stop_patience 
                        当使用提前终止训练策略时,如果验证集精度在early_stop_patience 个 epoch 内连续下降或持平,则终止训练。默认为 5
  --save_interval_epochs 
                        模型保存间隔(单位: 迭代轮数)。默认为 1
  --log_interval_steps 
                        训练日志输出间隔(单位:迭代次数)。默认为 10
  --resume_checkpoint   恢复训练时指定上次训练保存的模型路径, 默认不会恢复训练
  --save_dir            模型保存路径。默认为 ./output/
  --dataset             数据集目录,默认 ./dataset/
  --train_list          训练集列表,默认 '--dataset' 参数目录下的 train_list.txt
  --eval_list           评估集列表,默认 '--dataset' 参数目录下的 val_list.txt
  --label_list          分类标签列表,默认 '--dataset' 参数目录下的 labels.txt
  --lr_decay_power      默认优化器学习率衰减指数。默认为 0.9
  --model_dir           模型读取路径。默认为 ./output/best_model

预测模型

  • 运行 infer.py 文件,查看命令行参数加 -h
  • 示例
python3 run/infer.py --model_dir ./output/best_model \
    --predict_image ./dataset/detroit_streetscape/0183.jpg
  • 参数
  -h, --help            show this help message and exit
  --model_dir           读取模型的目录,默认 './output/best_model'
  --predict_image       预测的图像文件
  --predict_image_dir   预测的图像目录
  --weight              mask可视化结果与原图权重因子,weight表示原图的权重,默认 0.6
  --result_dir          预测结果可视化的保存目录,默认 './result'

关于图像宽高

  • 由于原始图像是 1920x1080 在训练前填充为 1920 的正方形图像,然后调整为 1024x1024,参见 seg-train.py
T.Padding(target_size=1920, pad_mode=0, im_padding_value=[0, 0, 0]),
T.Resize(target_size=1024),

关于预测可视化的结果颜色

  • EISeg 颜色通道顺序为 RGB,paddlex.seg.visualize 颜色通道顺序为 BGR

部署模型导出

  • 图像分割的 --fixed_input_shape 参数无效
  • 参考文档:部署模型导出
  • 示例
paddlex --export_inference --model_dir=./output/best_model/ --save_dir=./output/inference_model

VisualDL 可视化分析工具

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

有关小熊飞桨练习册-08PaddleX底特律街景的更多相关文章

  1. 牛客网专项练习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值小于等

  2. AT24C04、AT24C08、AT24C16系列EEPROM芯片单片机读写驱动程序 - 2

    一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress位数/字节数备注AT24C044k5123216A2A149/1WordAddress使用P0位AT24C088k1024

  3. 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

  4. javascript - Eloquent JavaScript 2nd Edition 递归练习解答 - 2

    我试图解决在线书籍eloquentjavascript2ndedition的递归练习:问题是这样的:We’veseenthat%(theremainderoperator)canbeusedtotestwhetheranumberisevenoroddbyusing%2tocheckifit’sdivisiblebytwo.Here’sanotherwaytodefinewhethera(positive,whole)numberisevenorodd:Zeroiseven.Oneisodd.ForanyothernumberN,itsevennessisthesameasN-2.De

  5. javascript - 对javascript练习的困惑 - 2

    我刚拿到DouglasCrockford的Javascript:TheGoodParts,我在理解他关于原型(prototype)的示例之一时遇到了一些困难。书中代码如下:if(typeofObject.create!=="function"){Object.create=function(o){varF=function(){}F.prototype=o;returnnewF;};}我假设此代码用于定位函数的原型(prototype)。但为什么要使用如此复杂的方法呢?为什么不直接使用variable.prototype?Crockford是Javascript方面的领先专家,因此我确

  6. javascript - IE8 : parseInt ('07' ) vs parseInt ('08' ) - 2

    这个问题在这里已经有了答案:JavascriptparseInt()withleadingzeros(7个答案)关闭8年前。在IE8中发现了一件奇怪的事情:parseInt('01')//1parseInt('02')//2parseInt('03')//3/*...*/parseInt('07')//7parseInt('08')//0!!!parseIntr('09')//9ok谁能澄清一下?

  7. javascript - 练习 Javascript 的最佳环境 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我目前有Notepad++和AptanaStudio。是否有任何其他开发环境可以简化javascript代码的编写?谢谢。

  8. Javascript 练习 - 反转二维数组 - 2

    反转二维数组的值,可以扩展n次。[1,[2,[3,...[n,null]]]]给定:所有数组的长度始终为2列表中的最后一个数组将包含一个null索引1示例:[1,[2,[3,null]]]将输出[3,[2,[1,null]]][1,[2,[3,[4,null]]]]会输出[4,[3,[2,[1,null]]]]我不确定我描述的是否正确,但我今天遇到了这个练习并想出了一个相当明显的解决方案。varars=[1,[2,[3,null]]],rev=null;functionr(x){rev=(rev==null)?[x[0]]:[x[0],rev];if(x[1]!==null)r(x[1

  9. javascript - 为什么 parseInt ("08") = 0, parseInt ("07") = 7 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:JavaScriptfunctionparseInt()doesn'tparsenumberswithleading0correctly在JS中解析时出现奇怪的问题。parseInt("08")//Theresultis:0parseInt("07")//Theresultis:7为什么会这样?

  10. 华为eNSP网络配置综合练习一(vlan +MSTP+VLANif+VRRP+ 静态路由+单臂路由+STP+BFD) - 2

    综合练习一题目要求:实验范图实现PC机之间互通配置思路:配置过程:配置终端设备及3700交换机实现此案例需要按照如下步骤进行。1)配置PC的IP地址和网关2)配置SW1/5/6的vlan为10/20/30,交换机之间的链路为Trunk,与PC间为Access3)配置SW2/3/7的vlan为40/50,交换机之间的链路为Trunk,与PC间为Access4)配置SW4/8/9的vlan为60/70/80,交换机之间的链路为Trunk,与PC间为Access5)配置R1/R2/R3的接口IP地址6)配置每个VLAN的网关接口IP地址SW1为vlan10/20/30的网关设备:interfacev

随机推荐