快速在 PaddleLabel 标注的花朵分类数据集上展示如何应用 PaddleX 训练 MobileNetV3_ssld 网络

简介: 快速在 PaddleLabel 标注的花朵分类数据集上展示如何应用 PaddleX 训练 MobileNetV3_ssld 网络

一、图像分类(快速在 PaddleLabel 标注的花朵分类数据集上展示如何应用 PaddleX 训练 MobileNetV3_ssld 网络)


PaddleLabel 标注数据+PaddleX 训练预测=快速完成一次图像分类的任务


1. 数据准备


  • 首先使用PaddleLabel对自制的花朵数据集进行标注,其次使用Split Dataset功能分割数据集,最后导出数据集


  • PaddleLabel导出后的内容全部放到自己的建立的文件夹下,例如dataset/flower_clas_dataset,其目录结构如下:
├── flower_clas_dataset
│   ├── image
│   │   ├── flower1.jpg
│   │   ├── flower2.jpg
│   │   ├── ...
│   ├── labels.txt
│   ├── test_list.txt
│   ├── train_list.txt
│   ├── val_list.txt


2. 训练


2.1 安装必备的库


2.1.1 安装 paddlepaddle


# 您的机器安装的是 CUDA9 或 CUDA10,请运行以下命令安装
pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
# 您的机器是CPU,请运行以下命令安装
# pip install paddlepaddle


2.1.2 安装 PaddleX 以及依赖项


pip install "paddlex<=2.0.0"
pip install scikit-image
pip install threadpoolctl==2.0.0 -i https://mirror.baidu.com/pypi/simple
pip install scikit-learn==0.23.2


2.2 准备训练


2.2.1 配置 GPU


# jupyter中使用paddlex需要设置matplotlib
import matplotlib
matplotlib.use('Agg')
# 设置使用0号GPU卡(如无GPU,执行此代码后仍然会使用CPU训练模型)
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
import paddlex as pdx


2.2.2 定义图像处理流程 transforms


定义训练和验证过程中,图像的处理流程,其中训练过程包括了部分数据增强操作(验证时不需要),如在本示例中,训练过程使用了RandomCropRandomHorizontalFlip两种数据增强方式,更多图像预处理流程 transforms 的使用可参见paddlex.cls.transforms

from paddlex import transforms as T
train_transforms = T.Compose([
    T.RandomCrop(crop_size=224),
    T.RandomHorizontalFlip(),
    T.Normalize()])
eval_transforms = T.Compose([
    T.ResizeByShort(short_size=256),
    T.CenterCrop(crop_size=224),
    T.Normalize()
])


2.2.3 定义数据集 Dataset


使用 PaddleX 内置的数据集读取器读取训练和验证数据集。在图像分类中使用ImageNet格式的数据集,因此这里采用pdx.datasets.ImageNet来加载数据集,该接口的介绍可参见文档paddlex.datasets.ImageNet

train_dataset = pdx.datasets.ImageNet(
    data_dir='./dataset/flower_clas_dataset',
    file_list='./dataset/flower_clas_dataset/train_list.txt',
    label_list='./dataset/flower_clas_dataset/labels.txt',
    transforms=train_transforms)
eval_dataset = pdx.datasets.ImageNet(
    data_dir='./dataset/flower_clas_dataset',
    file_list='./dataset/flower_clas_dataset/val_list.txt',
    label_list='./dataset/flower_clas_dataset/labels.txt',
    transforms=eval_transforms)


2.3 模型开始训练


在定义好数据集后,即可选择分类模型(这里使用了MobileNetV3_large_ssld型),开始进行训练。 更多模型训练参数介绍可参见文档paddlex.cls.MobileNetV3_large_ssld,在如下代码中,模型训练过程每间隔save_interval_epochs轮会保存一次模型在save_dir目录下,同时在保存的过程中也会在验证数据集上计算相关指标,模型训练过程中相关日志的含义可参见文档

num_classes = len(train_dataset.labels)
model = pdx.cls.MobileNetV3_large_ssld(num_classes=num_classes)
model.train(num_epochs=12,
            train_dataset=train_dataset,
            train_batch_size=32,
            eval_dataset=eval_dataset,
            lr_decay_epochs=[6, 8],
            save_interval_epochs=3,
            learning_rate=0.00625,
            save_dir='output/mobilenetv3_large_ssld'
            )


3. 预测


3.1 预测


import paddlex as pdx
model = pdx.load_model('./output/mobilenetv3_large_ssld/best_model')
image_path = './dataset/flower_clas_dataset/image/1008566138_6927679c8a.jpg'
result = model.predict(image_path)
print("Predict Result:", result)

预测的样例图片是:

image.png

预测的结果是:

Predict Result: [{'category_id': 0, 'category': 'sunflower', 'score': 0.9999815}] 最终结论:预测正确 ✔


二、目标检测(快速在 PaddleLabel 标注的道路标志检测数据集上展示如何应用 PaddleX 训练 YOLOv3 网络


PaddleLabel 标注数据+PaddleX 训练预测=快速完成一次目标检测的任务


1. 数据准备


  • 首先使用PaddleLabel对自制的路标数据集进行标注,其次使用Split Dataset功能分割数据集,最后导出数据集
  • PaddleLabel导出后的内容全部放到自己的建立的文件夹下,例如dataset/roadsign_det_dataset,其目录结构如下:
├── roadsign_det_dataset
│   ├── Annotations
│   ├── JPEGImages
│   ├── labels.txt
│   ├── test_list.txt
│   ├── train_list.txt
│   ├── val_list.txt


2. 训练


2.1 安装必备的库


2.1.1 安装 paddlepaddle


# 您的机器安装的是 CUDA9 或 CUDA10,请运行以下命令安装
pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
# 您的机器是CPU,请运行以下命令安装
# pip install paddlepaddle


2.1.2 安装 PaddleX


pip install "paddlex<=2.0.0" -i https://mirror.baidu.com/pypi/simple


2.2 准备训练


2.2.1 配置 GPU


# 设置使用0号GPU卡(如无GPU,执行此代码后仍然会使用CPU训练模型)
import matplotlib
matplotlib.use('Agg')
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
import paddlex as pdx


2.2.2 定义图像处理流程 transforms


定义数据处理流程,其中训练和测试需分别定义,训练过程包括了部分测试过程中不需要的数据增强操作,如在本示例中,训练过程使用了MixupImageRandomDistortRandomExpandRandomCropRandomHorizontalFlip共 5 种数据增强方式,更多图像预处理流paddlex.det.transforms

from paddlex import transforms as T
train_transforms = T.Compose([
    T.MixupImage(mixup_epoch=250),
    T.RandomDistort(),
    T.RandomExpand(),
    T.RandomCrop(),
    T.Resize(target_size=608, interp='RANDOM'),
    T.RandomHorizontalFlip(),
    T.Normalize()])
eval_transforms = T.Compose([
    T.Resize(target_size=608, interp='CUBIC'),
    T.Normalize()
])


2.2.3 定义数据集 Dataset


目标检测可使用VOCDetection格式和COCODetection两种数据集,此处由于数据集为 VOC 格式,因此采用 pdx.datasets.VOCDetection来加载数据集,该接口的介绍可参见文档paddlex.datasets.VOCDetection

train_dataset = pdx.datasets.VOCDetection(
    data_dir='./dataset/roadsign_det_dataset',
    file_list='./dataset/roadsign_det_dataset/train_list.txt',
    label_list='./dataset/roadsign_det_dataset/labels.txt',
    transforms=train_transforms,
    shuffle=True)
eval_dataset = pdx.datasets.VOCDetection(
    data_dir='./dataset/roadsign_det_dataset',
    file_list='./dataset/roadsign_det_dataset/val_list.txt',
    label_list='./dataset/roadsign_det_dataset/labels.txt',
    transforms=eval_transforms)


2.3 模型开始训练


在定义好数据集后,即可选择检测模型(这里使用了yolov3_darknet53模型),开始进行训练。 关于检测模型训练,更多参数介绍可参见文档paddlex.det.YOLOv3,在如下代码中,模型训练过程每间隔save_interval_epochs轮会保存一次模型在save_dir目录下,同时在保存的过程中也会在验证数据集上计算相关指标,模型训练过程中相关日志的含义可参见文档

num_classes = len(train_dataset.labels)
model = pdx.det.YOLOv3(num_classes=num_classes, backbone='DarkNet53')
model.train(
    num_epochs=10,
    train_dataset=train_dataset,
    train_batch_size=8,
    eval_dataset=eval_dataset,
    learning_rate=0.000125,
    lr_decay_epochs=[210, 240],
    save_interval_epochs=20,
    save_dir='output/yolov3_darknet53')


3. 预测


3.1 预测


使用模型进行预测,同时使用pdx.det.visualize将结果可视化,可视化结果将保存到./output/yolov3_mobilenetv1下,其中threshold代表Box的置信度阈值,将Box置信度低于该阈值的框过滤不进行可视化

import paddlex as pdx
model = pdx.load_model('output/yolov3_darknet53/best_model')
image_path = './dataset/roadsign_det_dataset/JPEGImages/road554.png'
result = model.predict(image_path)
pdx.det.visualize(image_path, result, threshold=0.5, save_dir='./output/yolov3_darknet53')

预测的样例图片如下图:

image.png

预测的结果是:

speedlimit 0.77 预测正确 ✔


三、图像分割(快速在 PaddleLabel 标注的狗子分割数据集上展示如何应用 PaddleX 训练 DeepLabV3 网络)


PaddleLabel 标注数据+PaddleX 训练预测=快速完成一次图像语义分割的任务


1. 数据准备


  • 首先使用PaddleLabel对自制的狗子数据集进行标注,其次使用Split Dataset功能分割数据集,最后导出数据集
  • PaddleLabel导出后的内容全部放到自己的建立的文件夹下,例如dataset/dog_seg_dataset,其目录结构如下:
├── dog_seg_dataset
│   ├── Annotations
│   ├── JPEGImages
│   ├── labels.txt
│   ├── test_list.txt
│   ├── train_list.txt
│   ├── val_list.txt


2. 训练


2.1 安装必备的库


2.1.1 安装 paddlepaddle


# 您的机器安装的是 CUDA9 或 CUDA10,请运行以下命令安装
pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
# 您的机器是CPU,请运行以下命令安装
# pip install paddlepaddle


2.1.2 安装 PaddleX


pip install "paddlex<=2.0.0" -i https://mirror.baidu.com/pypi/simple


2.2 准备训练


2.2.1 配置 GPU


# 设置使用0号GPU卡(如无GPU,执行此代码后仍然会使用CPU训练模型)
import matplotlib
matplotlib.use('Agg')
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
import paddlex as pdx


2.2.2 定义图像处理流程 transforms


定义数据处理流程,其中训练和测试需分别定义,训练过程包括了部分测试过程中不需要的数据增强操作,如在本示例中,训练过程使用了RandomHorizontalFlip这种数据增强方式,更多图像预处理流程 transforms 的使用可参见paddlex.seg.transforms

from paddlex import transforms as T
train_transforms = T.Compose([
    T.RandomHorizontalFlip(),
    T.Resize(target_size=512),
    T.Normalize()
])
eval_transforms = T.Compose([
    T.Resize(target_size=512),
    T.Normalize()
])


2.2.3 定义数据集 Dataset语义分割使用SegDataset格式的数据集,因此采用pdx.datasets.SegDataset来加载数据集,该接口的介绍可参见文档paddlex.datasets.SegDataset

train_dataset = pdx.datasets.SegDataset(
    data_dir='./dataset/dog_seg_dataset',
    file_list='./dataset/dog_seg_dataset/train_list.txt',
    label_list='./dataset/dog_seg_dataset/labels.txt',
    transforms=train_transforms,
    shuffle=True)
eval_dataset = pdx.datasets.SegDataset(
    data_dir='./dataset/dog_seg_dataset',
    file_list='./dataset/dog_seg_dataset/val_list.txt',
    label_list='./dataset/dog_seg_dataset/labels.txt',
    transforms=eval_transforms)


2.3 模型开始训练


在定义好数据集后,即可选择分割模型(这里使用了deeplabv3模型),开始进行训练。

更多训练模型的参数介绍可参见文档paddlex.seg.DeepLabv3,在如下代码中,模型训练过程每间隔save_interval_epochs轮会保存一次模型在save_dir目录下,同时在保存的过程中也会在验证数据集上计算相关指标,模型训练过程中相关日志的含义可参见文档

num_classes = len(train_dataset.labels)
model = pdx.seg.DeepLabV3P(num_classes=num_classes, backbone='ResNet50_vd')
model.train(
    num_epochs=40,
    train_dataset=train_dataset,
    train_batch_size=4,
    eval_dataset=eval_dataset,
    learning_rate=0.01,
    save_interval_epochs=1,
    save_dir='output/deeplab',
    use_vdl=True)


3. 预测


3.1 预测


使用模型进行预测,同时使用pdx.seg.visualize将结果可视化,可视化结果将保存到./output/deeplab下,其中weight代表原图的权重,即 mask 可视化结果与原图权重因子。

import paddlex as pdx
model = pdx.load_model('output/deeplab/best_model')
image_name = './dataset/dog_seg_dataset/JPEGImages/e619b17a9c1b9f085dc2712eb603171f.jpeg'
result = model.predict(image_name)
pdx.seg.visualize(image_name, result, weight=0.4, save_dir='./output/deeplab')

可视化结果如下所示:

image.pngimage.png


AI Studio 第三方教程推荐


快速体验演示案例


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
7天前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
30天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
65 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
8天前
|
负载均衡 容灾 Cloud Native
云原生应用网关进阶:阿里云网络ALB Ingress 全能增强
在过去半年,ALB Ingress Controller推出了多项高级特性,包括支持AScript自定义脚本、慢启动、连接优雅中断等功能,增强了产品的灵活性和用户体验。此外,还推出了ingress2Albconfig工具,方便用户从Nginx Ingress迁移到ALB Ingress,以及通过Webhook服务实现更智能的配置校验,减少错误配置带来的影响。在容灾部署方面,支持了多集群网关,提高了系统的高可用性和容灾能力。这些改进旨在为用户提供更强大、更安全的云原生网关解决方案。
134 8
|
10天前
|
数据采集 JavaScript 前端开发
异步请求在TypeScript网络爬虫中的应用
异步请求在TypeScript网络爬虫中的应用
|
1月前
|
存储 安全 网络安全
网络安全的盾与剑:漏洞防御与加密技术的实战应用
在数字化浪潮中,网络安全成为保护信息资产的重中之重。本文将深入探讨网络安全的两个关键领域——安全漏洞的防御策略和加密技术的应用,通过具体案例分析常见的安全威胁,并提供实用的防护措施。同时,我们将展示如何利用Python编程语言实现简单的加密算法,增强读者的安全意识和技术能力。文章旨在为非专业读者提供一扇了解网络安全复杂世界的窗口,以及为专业人士提供可立即投入使用的技术参考。
|
2月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
84 8
|
1月前
|
机器学习/深度学习 Serverless 索引
分类网络中one-hot编码的作用
在分类任务中,使用神经网络时,通常需要将类别标签转换为一种合适的输入格式。这时候,one-hot编码(one-hot encoding)是一种常见且有效的方法。one-hot编码将类别标签表示为向量形式,其中只有一个元素为1,其他元素为0。
46 2
|
2月前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
58 2
|
2月前
|
机器学习/深度学习 人工智能 安全
探索人工智能在网络安全中的创新应用
探索人工智能在网络安全中的创新应用
114 0
|
25天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
62 17