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

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

简介

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

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

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

文件说明

文件 说明 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'

关于图像宽高

  • 由于原始图像是 1920×1080 在训练前填充为 1920 的正方形图像,然后调整为 1024×1024,参见 *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

Original: https://www.cnblogs.com/cnhemiya/p/16390528.html
Author: 小熊宝宝啊
Title: 小熊飞桨练习册-08PaddleX底特律街景

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/710866/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • bilibili弹幕爬虫

    import random import requests import jieba import numpy as np from lxml import etree class…

    技术杂谈 2023年7月24日
    098
  • shopify下单让客户输入自定义内容

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/ytkah/p/15769928.htmlAuthor:…

    技术杂谈 2023年5月31日
    078
  • 世界顶级畅销书500本

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    082
  • K8s-二进制安装

    K8S-二进制安装使用 1.IP总规划 服务类型 ip地址 组件 k8s-master01 etcd集群节点1 192.168.80.20 kube-apiserver、kube-…

    技术杂谈 2023年7月11日
    071
  • 当前国际主流bgp路由劫持解决方案——RPKI

    个人博客地址 http://www.darkghost.life 摘抄自APNIC一段定义 RPKI 资源认证是一种安全框架,用于证明特定 IP 地址块或 AS 号码与这些互联网号…

    技术杂谈 2023年7月25日
    071
  • 技术管理进阶——空降Leader如何开展工作?

    原创不易,求分享、求一键三连 前几天有个粉丝咨询了一个的问题: 最近遇到一个 空降Leader,挺苦恼的:新Leader技术很厉害,但平时根本就不管我们,也不愿意了解业务,更像是一…

    技术杂谈 2023年6月1日
    081
  • 自然数的公理化理论体系定义的新方法

    目前,我们人类可通过皮亚诺的五个命题和在此基础上的三个公理来定义自然数的公理化理论体系. 现在,我们用π来定义自然数的公理化理论体系. 几年前,美国人用2π代替π,看起来,似乎已经…

    技术杂谈 2023年5月31日
    0114
  • cron 表达式

    cron 表达式 1.简介:一个cron表达式最少有5个空格来分割时间元素,总共有7个元素,分别如下: ① 秒(0-59) ② 分钟(0-59) ③ 小时(0-23) ④ 天(月的…

    技术杂谈 2023年7月24日
    095
  • java内存区域模型和详解

    一,概述 java虚拟机运行时数据区模型图: 主要包括:程序计数器,java虚拟机栈,本地方法栈,java 堆,方法区(元空间)。 其中堆和方法区由所有线程共享的数据区;程序计数器…

    技术杂谈 2023年7月11日
    074
  • DeepHyperX代码理解-HamidaEtAl

    代码复现自论文《3-D Deep Learning Approach for Remote Sensing Image Classification》 先对部分基础知识做一些整理:…

    技术杂谈 2023年6月21日
    086
  • Java多线程记录(包含案例)

    线程是程序的执行单元,执行路径。是程序使用CPU的最基本单位 多线程 — 程序有多条执行路径,提高应用进程的使用率 进程中线程越多,抢到CPU执行权概率越高。线程的执行…

    技术杂谈 2023年6月21日
    0102
  • Spring mvc源码分析系列–前言

    距离上次写文章已经过去接近两个月了,Spring mvc系列其实一直都想写,但是却不知道如何下笔,原因有如下几点: 现在项目开发前后端分离的趋势不可阻挡。Spring mvc这一套…

    技术杂谈 2023年7月25日
    075
  • GPS的调试与报文解析

    GPS的调试与报文解析 来源 https://zhuanlan.zhihu.com/p/450203417 1.驱动与软件 直接用串口助手的话,可看到GPS发送的信息。当然串口可以…

    技术杂谈 2023年5月30日
    0106
  • 多线程

    public class 多线程 { static boolean flag = true; static class t1 implements Runnable{ @Overr…

    技术杂谈 2023年7月23日
    076
  • Codeforces1573B

    问题描述 给你两个数组,a数组里面是1 – 2n中的奇数任意顺序排列组成,b数组里面是1 – 2n中的奇数任意顺序排列组成。 问你最少需要多少次操作能让a的…

    技术杂谈 2023年7月24日
    065
  • Oracle 11g default profile 默认启用密码过期180天 ORA-28001错误处理

    问题描述:客户反映客户端不能登录应用程序时不能连接。环境:AIX 5.3 + Oracle 11gR2解决:远程Telnet到数据库主机,sqlplus / as sysdba 连…

    技术杂谈 2023年6月1日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球