深度学习框架
百度-飞桨
谷歌 的 TensorFlow 和
Facebook 的 PyTorch
华为 的全栈全场景 AI 计算框架 MindSpore
Amazon 主导的 MXNet
微软背书的 CNTK /Microsoft Cognitive Toolkit(CNTK)
https://github.com/PaddlePaddle/Paddle
Pascal VOC采用的[x1,y1,x2,y2] 表示物体的bounding box, COCO采用的[x1,y1,w,h] 表示物体的bounding box.
飞桨框架
架构--API Reference
数据集定义和加载
数据预处理
模型组网
模型训练与评估
模型保存和载入
模型推理
paddle.amp 目录下包含飞桨框架支持的动态图自动混合精度(AMP)相关的 API
paddle.callbacks 目录下包含飞桨框架支持的回调函数相关的 API
paddle.fft 目录下包含飞桨框架支持的快速傅里叶变换的相关 API
paddle.nn 目录下包含飞桨框架支持的神经网络层和相关函数的相关 API
具体内容
01.数据集定义和加载与数据预处理
paddle.io.Dataset paddle.io.DataLoader
paddle.vision.datasets paddle.vision.transforms
paddle.tensor
02.模型组网-framework
paddle.nn paddle.optimizer paddle.autograd paddle.jit
03.模型训练-评估-推理
04.模型部署
保存和载入
paddle.Model.prepare 完成训练的配置准备工作。 包括损失函数、优化器和评价指标等。
paddle.optimizer 下提供了优化器算法相关 API,
paddle.nn Loss层 提供了损失函数相关 API,
paddle.metric 下提供了评价指标相关 API。
使用 paddle.Model 封装模型。 将网络结构组合成可快速使用 飞桨高层 API 进行训练、评估、推理的实例,方便后续操作。
paddle.Model.prepare
paddle.Model.fit 配置循环参数并启动训练。 配置参数包括指定训练的数据源 train_dataset、训练的批大小 batch_size、训练轮数 epochs 等,执行后将自动完成模型的训练循环。
paddle.Model.evaluate ,使用预先定义的测试数据集,来评估训练好的模型效果,评估完成后将输出模型在测试集上的损失函数值 loss 和精度 acc
paddle.Model.save 保存模型
paddle.Model.load 加载模型
飞桨后缀
###文件后缀
.pdparams .pdopt .pdmodel
# 保存Layer参数
paddle.save(layer.state_dict(), "linear_net.pdparams")
# 保存优化器参数
paddle.save(adam.state_dict(), "adam.pdopt")
# 保存检查点checkpoint信息
paddle.save(final_checkpoint, "final_checkpoint.pkl")
###说明
对于 Layer.state_dict() (模型参数),推荐使用后缀 .pdparams ;
对于 Optimizer.state_dict() (优化器参数),推荐使用后缀 .pdopt 。
如果想要保存整个静态图模型(含模型结构和参数),除了 state_dict 还需要保存 Program
# 保存模型结构(program)
paddle.save(prog, "temp/model.pdmodel")
https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/beginner/model_save_load_cn.html
下载镜像
docker pull paddlepaddle/paddle:2.4.2-gpu-cuda11.2-cudnn8.2-trt8.0
docker pull paddlepaddle/paddle:2.4.0-gpu-cuda11.2-cudnn8.1-trt8.0
创建容器
docker run -it \
--gpus all \
-v /data/cloud:/data/cloud \
--name paddle-base \
paddlepaddle/paddle:2.4.0-gpu-cuda11.2-cudnn8.1-trt8.0 /bin/bash
验证
which python3
The Python Package Index(PyPI)是 Python 的包管理器。
python3 -c "import platform;print(platform.architecture()[0]);print(platform.machine())"
python3 -c "import paddle;print(paddle.utils.run_check(); print(paddle.__version__))"
验证安装
安装完成后您可以使用 python3 进入 python 解释器,输入import paddle ,再输入 paddle.utils.run_check()
#python3 -m pip install paddlepaddle-gpu==2.4.1.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
工具包使用
克隆PaddleClas模型库-pip3 install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple
飞桨图像识别套件PaddleClas是飞桨为工业界和学术界所准备的一个图像识别和图像分类任务的工具集
PaddleClas :主要基于paddlepaddle框架的分类工具包
- benchmark: 文件夹下存放了一些 shell 脚本,主要是为了测试 PaddleClas 中不同模型的速度指标,如单卡训练速度指标、多卡训练速度指标等。
- dataset:主要用来放置数据集-文件夹下存放数据集和用于处理数据集的脚本。脚本负责将数据集处理为适合 Dataloader 处理的格式。
- deploy: 主要用来放置模型输出所需要的文件-文件夹存放的是部署工具,支持 python/cpp inference、Hub Serveing、Paddle Lite、Slim 离线量化等多种部署方式。
- ppcls: paddlepaddle class的主要框架文件,包含网络模型结构、基础配置文件、优化器、loss等结构文件
PaddleClas/ppcls/configs/
实际来修改配置文件里的内容,比如epoch,image_size, 网络模型,类别数,batchsize, 数据集路径等
ImageNet/MobileNetV1/MobileNetV1.yaml
Global
# model architecture # loss function config for traing/eval process #Optimizer:
# data loader for train and eval
#Infer: Metric:
PaddleClas/ppcls/loss 中,包含了 CELoss, JSDivLoss, TripletLoss, CenterLoss 等损失函数,均定义在 ppcls/loss 中
- log:用于放置评测输出的log
- tests: 模型从训练到预测的全链路测试,验证各功能是否能够正常使用。
- tools: 训练、评估、预测、模型动转静导出的入口函数和脚本均在该文件下。
应用:
01.了解数据集,将数据转换为PaddleClas支持读取的文件格式
02.划分训练集和验证集
03.修改数据
ResNet50_vd.yaml, 主要修改里面的几个参数:分类数、训练集和验证集数量、训练集和验证集列表文件以及路径
04.下载预训练模型并加载预训练模型进行训练
# for multi-cards train
export CUDA_VISIBLE_DEVICES=0,1,2,3
python3.7 -m paddle.distributed.launch --gpus="0,1,2,3" tools/train.py -c ./ppcls/configs/ImageNet/ResNet/ResNet50.yaml
05.使用inference模型进行模型推理 使用python predict.py进行模型推
###说明
prettytable
ujson
opencv-python==4.4.0.46
pillow
tqdm
PyYAML
visualdl >= 2.2.0
scipy
scikit-learn==0.23.2
gast==0.3.3
faiss-cpu==1.7.1.post2
## 模式1:lite_train_infer,模式2:whole_infer 模式3:infer 不训练 模式4:whole_train_infer
最终在tests/output目录下生成.log后缀的日志文件
PaddleDetection
1、配置文件的作用
配置文件在PaddleDetection中,主要是为模型训练,评估,测试提供相应参数配置,方便超参数管理,提高代码的可读性。
2、配置文件简介
配置文件可以由多个*.yml文件构成,
每一个yaml文件管理某一项特定作用的配置,然后再通过一个配置文件管理各个功能独立的配置文件。
比如:dataset.yml,
optimizer.yml,reader.yml,network.yml;
其中,dataset.yml配置数据集相关信息,optimizer.yml配置优化策略,学习率等,reader.yml配置数据的预处理过程,也就是数据增强部分;network.yml定义网络结构
源码阅读
配置系统的大多数功能由 ppdet.core.workspace 模块提供
参考
PaddleClas全流程极快极简代码实践AI图像分类 https://aistudio.baidu.com/aistudio/projectdetail/1636154
https://blog.csdn.net/weixin_46604911/article/details/122235332
PaddleClas 就是一个超强的图像分类任务的工具集
https://github.com/PaddlePaddle/PaddleDetection
https://github.com/PaddlePaddle/PaddleClas
https://github.com/PaddlePaddle/PaddleYOLO
https://github.com/PaddlePaddle/PaddleDetection#%E6%A8%A1%E5%9E%8B%E5%BA%93