diff --git a/docs/images/inference_deployment/cpp_infer_result.png b/docs/images/inference_deployment/cpp_infer_result.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9de1aa43584f1987abd94ad84e64c0d0c78c6a Binary files /dev/null and b/docs/images/inference_deployment/cpp_infer_result.png differ diff --git a/docs/images/inference_deployment/lite_demo_result.png b/docs/images/inference_deployment/lite_demo_result.png new file mode 100644 index 0000000000000000000000000000000000000000..b778f158d24722233bd437829a7acfbd89959e47 Binary files /dev/null and b/docs/images/inference_deployment/lite_demo_result.png differ diff --git a/docs/images/inference_deployment/whl_demo.jpg b/docs/images/inference_deployment/whl_demo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc7bff4453ec837f413b02bc99e7c1fc4eb8bfe6 Binary files /dev/null and b/docs/images/inference_deployment/whl_demo.jpg differ diff --git a/docs/zh_CN_tmp/data_preparation/classification_dataset.md b/docs/zh_CN_tmp/data_preparation/classification_dataset.md index c7efe26b5721cd6512d50a1b7f3cfa8624b80550..9291d0d337f78b5d7c077f1695f4f14853d8b4a2 100644 --- a/docs/zh_CN_tmp/data_preparation/classification_dataset.md +++ b/docs/zh_CN_tmp/data_preparation/classification_dataset.md @@ -1,6 +1,6 @@ # 图像分类任务数据集说明 -本文档将介绍 PaddleClas 所使用的数据集格式,以及图像分类任务的主要数据集,包括 ImageNet1k 和 flowers102 的介绍。 +本文档将介绍 PaddleClas 所使用的图像分类任务数据集格式,以及图像分类领域的常见数据集介绍。 --- @@ -20,13 +20,19 @@ val/ILSVRC2012_val_00000001.JPEG 65 ... ``` -## 2. ImageNet1k 数据集 +## 2. 图像分类任务常见数据集介绍 + +这里整理了常用的图像分类任务数据集,持续更新中,欢迎各位小伙伴补充完善~ + +### 2.1 ImageNet1k + +[ImageNet](https://image-net.org/)项目是一个大型视觉数据库,用于视觉目标识别研究任务,该项目已手动标注了 1400 多万张图像。ImageNet-1k 是 ImageNet 数据集的子集,其包含 1000 个类别。训练集包含 1281167 个图像数据,验证集包含 50000 个图像数据。2010 年以来,ImageNet 项目每年举办一次图像分类竞赛,即 ImageNet 大规模视觉识别挑战赛(ILSVRC)。挑战赛使用的数据集即为 ImageNet-1k。到目前为止,ImageNet-1k 已经成为计算机视觉领域发展的最重要的数据集之一,其促进了整个计算机视觉的发展,很多计算机视觉下游任务的初始化模型都是基于该数据集训练得到的。 数据集 | 训练集大小 | 测试集大小 | 类别数 | 备注| :------:|:---------------:|:---------------------:|:-----------:|:-----------: [ImageNet1k](http://www.image-net.org/challenges/LSVRC/2012/)|1.2M| 50k | 1000 | -从官方下载数据后,按如下组织数据 +从官方下载数据后,按如下格式组织数据,即可在 PaddleClas 中使用 ImageNet1k 数据集进行训练。 ```bash PaddleClas/dataset/ILSVRC2012/ @@ -47,7 +53,7 @@ PaddleClas/dataset/ILSVRC2012/ |_ val_list.txt ``` -## 3. Flowers102 数据集 +### 2.2 Flowers102 数据集 | 训练集大小 | 测试集大小 | 类别数 | 备注| :------:|:---------------:|:---------------------:|:-----------:|:-----------: @@ -81,3 +87,21 @@ PaddleClas/dataset/flowers102/ |_ train_list.txt |_ val_list.txt ``` + +### 2.3 CIFAR10 / CIFAR100 + +CIFAR-10 数据集由 10 个类的 60000 个彩色图像组成,图像分辨率为 32x32,每个类有 6000 个图像,其中训练集 5000 张,验证集 1000 张,10 个不同的类代表飞机、汽车、鸟类、猫、鹿、狗、青蛙、马、轮船和卡车。CIFAR-100 数据集是CIFAR-10的扩展,由 100 个类的 60000 个彩色图像组成,图像分辨率为 32x32,每个类有 600 个图像,其中训练集 500 张,验证集 100 张。 + +数据集地址:http://www.cs.toronto.edu/~kriz/cifar.html + +### 2.4 MNIST + +MMNIST是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会被用作深度学习的入门样例。其包含 60000 张图片数据,50000 张作为训练集,10000 张作为验证集,每张图片的大小为 28 * 28。 + +数据集地址:http://yann.lecun.com/exdb/mnist/ + +### 2.5 NUS-WIDE + +NUS-WIDE 是一个多分类数据集。该数据集包含 269648 张图片, 81 个类别, 每张图片被标记为该 81 个类别中的某一类或某几类。 + +数据集地址:https://lms.comp.nus.edu.sg/wp-content/uploads/2019/research/nuswide/NUS-WIDE.html diff --git a/docs/zh_CN_tmp/data_preparation/commonly_used_dataset.md b/docs/zh_CN_tmp/data_preparation/recognition_dataset.md similarity index 73% rename from docs/zh_CN_tmp/data_preparation/commonly_used_dataset.md rename to docs/zh_CN_tmp/data_preparation/recognition_dataset.md index b96e4268af8655d5a88ee4cd2e348e1334480307..275b6d39740c652c21a54ad2d37c086ddde331bf 100644 --- a/docs/zh_CN_tmp/data_preparation/commonly_used_dataset.md +++ b/docs/zh_CN_tmp/data_preparation/recognition_dataset.md @@ -1,62 +1,53 @@ -# 常用数据集介绍 -这里整理了常用的图像分类和图像识别数据集,持续更新中,欢迎各位小伙伴补充完善~ +# 图像分类任务数据集说明 -* [图像分类数据集](#图像分类) -* [图像识别数据集](#图像识别) +本文档将介绍 PaddleClas 所使用的图像识别任务数据集格式,以及图像识别领域的常见数据集介绍。 - -## 1. 图像分类: - - ImageNet-1k:ImageNet项目是一个大型视觉数据库,用于视觉目标识别研究任务,该项目已手动标注了1400多万张图像。ImageNet-1k是ImageNet数据集的子集,其包含1000个类别。训练集包含1281167个图像数据,验证集包含50000个图像数据。2010年以来,ImageNet项目每年举办一次图像分类竞赛,即ImageNet大规模视觉识别挑战赛(ILSVRC)。挑战赛使用的数据集即为ImageNet-1k。到目前为止,ImageNet-1k已经成为计算机视觉领域发展的最重要的数据集之一,其促进了整个计算机视觉的发展,很多计算机视觉下游任务的初始化模型都是基于该数据集训练得到的。 +--- - 地址: https://image-net.org/ -- CIFAR10 / CIFAR100:CIFAR-10数据集由10个类的60000个彩色图像组成,图像分辨率为32x32,每个类有6000个图像,其中训练集5000张,验证集1000张,10个不同的类代表飞机、汽车、鸟类、猫、鹿、狗、青蛙、马、轮船和卡车。CIFAR-100数据集是CIFAR-10的扩展,由100个类的60000个彩色图像组成,图像分辨率为32x32,每个类有600个图像,其中训练集500张,验证集100张。 +## 1. 数据集格式说明 - 地址: http://www.cs.toronto.edu/~kriz/cifar.html -- MNIST:MMNIST是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会被用作深度学习的入门样例。其包含60000张图片数据,50000张作为训练集,10000张作为验证集,每张图片的大小为28 * 28 +TODO - 地址:http://yann.lecun.com/exdb/mnist/ -- NUS-WIDE: 这是一个多分类数据集。该数据集包含269648张图片, 81个类别, 每张图片被标记为该81个类别中的某一类或某几类 +## 2. 图像识别任务常见数据集介绍 + +这里整理了常用的图像识别任务数据集,持续更新中,欢迎各位小伙伴补充完善~ - 地址:https://lms.comp.nus.edu.sg/wp-content/uploads/2019/research/nuswide/NUS-WIDE.html - - -## 2. 图像识别: ### 2.1 通用图像识别数据集 - SOP: SOP数据集是通用识别研究领域、MetricLearning技术研究方向常用的一个商品数据集, 其包含从eBay.com下载的22,634个产品的120,053张图片。其中, 训练集包含图片59551张, 类别数11318; 验证集包含图片60502张,类别数11316个。 - + 地址: https://cvgl.stanford.edu/projects/lifted_struct/ - + - Cars196: Cars数据集包含了196类汽车的16185张图像。数据被分成8144张训练图像和8041张测试图像,每个类大致以50-50的比例分割。级别通常是在制造,模型,年,例如2012特斯拉模型S或2012宝马M3双门跑车。 - + 地址: https://ai.stanford.edu/~jkrause/cars/car_dataset.html - CUB_200_2011: CUB_200_2011数据集是由加州理工学院在2010年提出的细粒度数据集,也是目前细粒度分类识别研究的基准图像数据集。该数据集共有11788张鸟类图像,包含200类鸟类子类,其中训练数据集有5994张图像,测试集有5794张图像,每张图像均提供了图像类标记信息,图像中鸟的bounding box,鸟的关键part信息,以及鸟类的属性信息,数据集如下图所示。 - + 地址: http://www.vision.caltech.edu/visipedia/CUB-200-2011.html - In-shop Clothes: In-shop Clothes 是DeepFashion数据集的4个子集之一, 它是一个卖家秀图片集,每个商品id,有多张不同角度的卖家秀,放在同一个文件夹内。该数据集共包含7982件商品,共52712张图像,每张图片都有463中属性,Bbox,landmarks,以及店铺描述。 - + 地址: http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion.html ### 2.2 垂类图像识别数据集 #### 2.2.1 动漫人物识别 + iCartoonFace: iCartoonFace是由爱奇艺开放的目前全球最大的手工标注卡通人物检测数据集与识别数据集,它包含超过5013个卡通人物、389678张高质量实景图片。相比于其他数据集,它具有大规模、高质量、多样性丰富、挑战难度大等特点,是目前研究动漫人物识别最常用的数据集之一。 - + 地址: http://challenge.ai.iqiyi.com/detail?raceId=5def69ace9fcf68aef76a75d + Manga109: Manga109是2020.5月发布的一个用于研究卡通人物检测和识别的数据集,其包含21142张图片,官方不允许用于商用。该数据集旗下的子集Manga109-s,可以供工业使用, 主要用于文本检测、基于线稿的任务检索、角色图像生成等任务。 - + 地址:http://www.manga109.org/en/ + IIT-CFW:IIF-CFW数据集共包含8928个带有标注的明星人物卡通头像,覆盖100个人物形象,每个人卡通头像数不等。 另外,其还提供了1000张真实人脸照(100个公众人物,每个人10张真实头像)。该数据集既可以用于研究动漫人物识别,也经常被用于研究跨模态的检索任务。 - + 地址: http://cvit.iiit.ac.in/research/projects/cvit-projects/cartoonfaces #### 2.2.2 商品识别 + AliProduct: AliProduct数据集是目前开源最大的商品数据集,它是一个SKU级别的图像分类数据集, 包含5万类别、300万张商品图像,商品图像的类别和总量均为业界之最。此数据集中涵盖了大量的生活用品、食物等,数据集中没有人工标注,数据较脏,数据分布较不均衡,且有很多相似的商品图片。 - + 地址: https://retailvisionworkshop.github.io/recognition_challenge_2020/ + Product-10k: Products-10k数据集中的所有图片均来自京东商城。数据集中共包含1万个经常购买的SKU。所有SKU组织成一个层次结构。总共有近19万张图片。在实际应用场景中,图像量的分布是不均衡的。所有图像都由生产专家团队手工检查/标记。 @@ -67,7 +58,7 @@ Cars数据集包含了196类汽车的16185张图像。数据被分成8144张训 ### 2.2.3 Logo识别 + Logo-2K+: Logo-2K+是一个仅用于logo图像识别的数据集,其包含10个大类,2341个小类和167140张图片。 - + 地址: https://github.com/msn199959/Logo-2k-plus-Dataset + Tsinghua-Tencent 100K: 该数据集是从10万张腾讯街景全景图中创建的一个大型交通标志基准数据集。它提供包含30000个交通标志实例的100000张图像。这些图像涵盖了照度和天气条件的巨大变化。基准测试中的每个交通标志都标注了类别标签、边界框和像素掩码。 它总共包含222个类别 (0 background + 221 traffic signs) @@ -76,7 +67,7 @@ Cars数据集包含了196类汽车的16185张图像。数据被分成8144张训 ### 2.2.4 车辆识别 + CompCars: 图像主要来自网络和监控数据,其中网络数据包含163个汽车制造商、1716个汽车型号的汽车。共136,726张全车图像,27,618张部分车图像。其中网络汽车数据包含bounding box、视角、5个属性(最大速度、排量、车门数、车座数、汽车类型)。监控数据包含50,000张前视角图像。 - + 地址: http://mmlab.ie.cuhk.edu.hk/datasets/comp_cars/ + BoxCars: 此数据集共包含21250辆车、63750张图像、27个汽车制造商、148个细类别,此数据集全部来自监控数据。 @@ -84,9 +75,5 @@ Cars数据集包含了196类汽车的16185张图像。数据被分成8144张训 地址: https://github.com/JakubSochor/BoxCars + PKU-VD Dataset:该数据集包含了两个大型车辆数据集(VD1和VD2),它们分别从两个城市的真实世界不受限制的场景拍摄图像。其中VD1是从高分辨率交通摄像头获得的,VD2中的图像则是从监视视频中获取的。作者对原始数据执行车辆检测,以确保每个图像仅包含一辆车辆。由于隐私保护的限制,所有车牌号码都已被黑色覆盖遮挡。所有车辆图像均从前视图进行拍摄。 数据集中为每个图像提供了多样化的属性注释,包括身份编号,精确的车辆模型和车辆颜色。VD1原先包含1097649张图像,1232种车俩模型,11种车辆颜色,但删除图像里面有多辆车辆以及从车辆后方拍摄的图片,该数据集仅剩846358张图像,141756辆车辆。 VD2包含807260张图像,79763辆车辆,1112种车辆模型,11种车辆颜色。 - - 地址: https://pkuml.org/resources/pku-vds.html - - - + 地址: https://pkuml.org/resources/pku-vds.html diff --git a/docs/zh_CN_tmp/inference_deployment/cpp_deploy.md b/docs/zh_CN_tmp/inference_deployment/cpp_deploy.md index ec77f735beb389d67e8abbce1d78842a4f64c278..af2641aad8ba68969a30e72b8ccec114c3e173a7 100644 --- a/docs/zh_CN_tmp/inference_deployment/cpp_deploy.md +++ b/docs/zh_CN_tmp/inference_deployment/cpp_deploy.md @@ -9,7 +9,7 @@ - Linux 环境,推荐使用 docker。 - Windows 环境,目前支持基于 `Visual Studio 2019 Community` 进行编译;此外,如果您希望通过生成 `sln解决方案` 的方式进行编译,可以参考该文档:[https://zhuanlan.zhihu.com/p/145446681](https://zhuanlan.zhihu.com/p/145446681) -* 该文档主要介绍基于 Linux 环境下的 PaddleClas C++ 预测流程,如果需要在 Windows 环境下使用预测库进行 C++ 预测,具体编译方法请参考 [Windows下编译教程](./docs/windows_vs2019_build.md)。 +* 该文档主要介绍基于 Linux 环境下的 PaddleClas C++ 预测流程,如果需要在 Windows 环境下使用预测库进行 C++ 预测,具体编译方法请参考 [Windows下编译教程](./cpp_deploy_on_windows.md)。 ### 1.1 编译opencv库 @@ -76,7 +76,7 @@ opencv3/ * 有 2 种方式获取 Paddle 预测库,下面进行详细介绍。 #### 1.2.1 预测库源码编译 -如果希望获取最新预测库特性,可以从 GitHub 上克隆 Paddle 最新代码,从源码编译预测库。对于不同平台的编译流程,请参考[Paddle预测库官网](https://paddleinference.paddlepaddle.org.cn/v2.1/user_guides/source_compile.html)的说明。编译示例如下: +如果希望获取最新预测库特性,可以从 GitHub 上克隆 Paddle 最新代码,从源码编译预测库。对于不同平台的编译流程,请参考 [Paddle预测库官网](https://paddleinference.paddlepaddle.org.cn/v2.1/user_guides/source_compile.html) 的说明。编译示例如下: 1. 使用Git获取源代码: @@ -226,13 +226,13 @@ make * `DPADDLE_LIB`:Paddle 预测库路径,一般使用下载并解压的预编译库路径 `paddle_inference` 即可,或编译生成的预测库的路径 `build/paddle_inference_install_dir`,注意该路径下需要有 `paddle` 和 `third_party` 两个子路径; * `DCMP_STATIC`:是否将 `config lib` 和 `cls lib` 编译为静态链接库(`.a`),默认为 `ON`,如需编译为动态链接库(`.so`),请设置为 `OFF`。 -执行上述命令后,将在目录 `./lib/` 下生成 `config lib` 和 `cls lib` 的动态链接库(`libcls.so` 和 `libconfig.so`)或静态链接库(`libcls.a` 和 `libconfig.a`)。在[编译 PaddleClas C++ 预测 demo](#2.1)中,可以通过指定编译选项 `DCLS_LIB` 和 `DCONFIG_LIB` 指定已有链接库的路径,链接库同样也可用于二次开发。 +执行上述命令后,将在目录 `./lib/` 下生成 `config lib` 和 `cls lib` 的动态链接库(`libcls.so` 和 `libconfig.so`)或静态链接库(`libcls.a` 和 `libconfig.a`)。在[2.1 编译 PaddleClas C++ 预测 demo](#2.1)中,可以通过指定编译选项 `DCLS_LIB` 和 `DCONFIG_LIB` 指定已有链接库的路径,链接库同样也可用于二次开发。 ## 3. 运行 demo ### 3.1 准备 inference model -首先需要准备 inference model,关于将模型导出为 inference model 的具体步骤,可以参考[模型导出](../../docs/zh_CN/tutorials/getting_started.md#4-使用inference模型进行模型推理)文档。假设导出的预测模型文件放在`./inference`目录下,则目录结构如下。 +首先需要准备 inference model,关于将模型导出为 inference model 的具体步骤,可以参考 [模型导出](./export_model.md) 文档。假设导出的预测模型文件放在 `./inference` 目录下,则目录结构如下。 ``` inference/ @@ -270,7 +270,7 @@ sh tools/run.sh * 最终屏幕上会输出结果,如下图所示。
- +
-其中`class id`表示置信度最高的类别对应的id,score表示图片属于该类别的概率。 +其中 `class id` 表示置信度最高的类别对应的 id,score 表示图片属于该类别的概率。 diff --git a/docs/zh_CN_tmp/inference_deployment/cpp_deploy_on_windows.md b/docs/zh_CN_tmp/inference_deployment/cpp_deploy_on_windows.md index 56efe4d6bf7ed37af29f428f96b55b900e42661a..a51df747762259ae6e602978c08745f8b750ac47 100755 --- a/docs/zh_CN_tmp/inference_deployment/cpp_deploy_on_windows.md +++ b/docs/zh_CN_tmp/inference_deployment/cpp_deploy_on_windows.md @@ -14,9 +14,10 @@ PaddleClas 在 Windows 平台下基于 `Visual Studio 2019 Community` 进行了 以下示例基于 `Visual Studio 2019 Community` 版本,以工作目录为 `D:\projects` 进行演示。 + ### 1.1 下载 PaddlePaddle C++ 预测库 paddle_inference_install_dir -PaddlePaddle C++ 预测库针对不同的 `CPU `和 `CUDA` 版本提供了不同的预编译版本,请根据实际情况下载: [C++预测库下载列表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_inference_deployment/inference/windows_cpp_inference.html),建议选择 `2.1.1` 版本。 +PaddlePaddle C++ 预测库针对不同的 `CPU `和 `CUDA` 版本提供了不同的预编译版本,请根据实际情况下载: [C++预测库下载列表](https://paddleinference.paddlepaddle.org.cn/user_guides/download_lib.html#windows),建议选择 `2.1.1` 版本。 **注意**:在选择预测库时,所选预测库版本需要与后续编译选项一致: * CPU 预测库仅可用于 GPU 预测,具体又分为 `mkl` 和 `openblas`,分别对应其低层实现基于 `MKL` 数学运算库 和 `OpenBLAS` 数学运算库; @@ -97,13 +98,13 @@ paddle_inference_install_dir ![step6](../../images/inference_deployment/vs2019_step6.png) -在编译完成后,会生成可执行文件 `clas_system.exe`。并且,如未设置 `DCONFIG_LIB` 与 `DCLS_LIB`,则会在 `.\lib\` 目录下生成 `config lib` 和 `cls lib` 两个静态链接库文件(`libconfig.a`、`libcls.a`)。类似地,你也可以仅编译生成 `config lib` 和 `cls lib` 两个静态链接库文件,只需打开路径为 `D:\projects\PaddleClas\deploy\cpp\lib\CMakeList.txt` 的 `CMake` 文件并进行编译即可,具体参考[使用 Visual Studio 2019 编译](#2),完成编译后,同样可在 `.\lib\` 目录下生成静态链接库文件,静态链接库文件可用于二次开发。 +在编译完成后,会生成可执行文件 `clas_system.exe`。并且,如未设置 `DCONFIG_LIB` 与 `DCLS_LIB`,则会在 `.\lib\` 目录下生成 `config lib` 和 `cls lib` 两个静态链接库文件(`libconfig.a`、`libcls.a`)。类似地,你也可以仅编译生成 `config lib` 和 `cls lib` 两个静态链接库文件,只需打开路径为 `D:\projects\PaddleClas\deploy\cpp\lib\CMakeList.txt` 的 `CMake` 文件并进行编译即可,具体参考[2. 使用 Visual Studio 2019 编译](#2),完成编译后,同样可在 `.\lib\` 目录下生成静态链接库文件,静态链接库文件可用于二次开发。 ## 3. 预测 ### 3.1 准备 inference model -首先需要准备 inference model,关于将模型导出为 inference model 的具体步骤,可以参考[模型导出](../../docs/zh_CN/tutorials/getting_started.md#4-使用inference模型进行模型推理)文档。假设导出的预测模型文件放在`./inference`目录下,则目录结构如下。 +首先需要准备 inference model,关于将模型导出为 inference model 的具体步骤,可以参考 [模型导出](./export_model.md) 文档。假设导出的预测模型文件放在 `./inference` 目录下,则目录结构如下。 ``` inference/ @@ -146,4 +147,4 @@ cd D:\projects\PaddleClas\deploy\cpp\out\build\x64-Release ### 4. 注意事项 * 在 Windows 下的终端中执行文件 exe 时,可能会发生乱码的现象,此时需要在终端中输入 `CHCP 65001`,将终端的编码方式由 GBK 编码(默认)改为 UTF-8 编码,更加具体的解释可以参考这篇博客:[https://blog.csdn.net/qq_35038153/article/details/78430359](https://blog.csdn.net/qq_35038153/article/details/78430359); * 如果需要使用 CPU 预测,PaddlePaddle 在 Windows 上仅支持 avx 的 CPU 预测,目前不支持 noavx 的 CPU 预测; -* 在使用生成的 `clas_system.exe` 进行预测时,如提示 `由于找不到paddle_fluid.dll,无法继续执行代码。重新安装程序可能会解决此问题`,请检查是否将 Paddle 预测库路径添加到系统环境变量,详见[Step1: 下载PaddlePaddle C++ 预测库 paddle_inference_install_dir](#step1-下载paddlepaddle-c-预测库-paddle_inference_install_dir)。 +* 在使用生成的 `clas_system.exe` 进行预测时,如提示 `由于找不到paddle_fluid.dll,无法继续执行代码。重新安装程序可能会解决此问题`,请检查是否将 Paddle 预测库路径添加到系统环境变量,详见[1.1 下载 PaddlePaddle C++ 预测库 paddle_inference_install_dir](#1.1)。 diff --git a/docs/zh_CN_tmp/inference_deployment/paddle_hub_serving_deploy.md b/docs/zh_CN_tmp/inference_deployment/paddle_hub_serving_deploy.md index d214668d24cbb4a1c856286dac0290ef20dc61ca..2784aed8b66f91cc1b7c00cd90b40645ad37bfdc 100644 --- a/docs/zh_CN_tmp/inference_deployment/paddle_hub_serving_deploy.md +++ b/docs/zh_CN_tmp/inference_deployment/paddle_hub_serving_deploy.md @@ -37,7 +37,7 @@ pip3 install paddlehub==2.1.0 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/sim ``` 需要注意, * 模型文件(包括 `.pdmodel` 与 `.pdiparams`)名称必须为`inference`。 - * 我们也提供了大量基于ImageNet-1k数据集的预训练模型,模型列表及下载地址详见[模型库概览](../../docs/zh_CN/models/models_intro.md),也可以使用自己训练转换好的模型。 + * 我们也提供了大量基于ImageNet-1k数据集的预训练模型,模型列表及下载地址详见[模型库概览](../models/models_intro.md),也可以使用自己训练转换好的模型。 ## 4. 安装服务模块 @@ -186,7 +186,7 @@ list: 返回结果 ```hub serving start -m clas_system``` **注意**: -常用参数可在 [params.py](./clas/params.py) 中修改: +常用参数可在 `PaddleClas/deploy/hubserving/clas/params.py` 中修改: * 更换模型,需要修改模型文件路径参数: ```python "inference_model_dir": @@ -200,4 +200,4 @@ list: 返回结果 'class_id_map_file': ``` -为了避免不必要的延时以及能够以 batch_size 进行预测,数据预处理逻辑(包括 `resize`、`crop` 等操作)均在客户端完成,因此需要在 [test_hubserving.py](./test_hubserving.py#L35-L52) 中修改。 +为了避免不必要的延时以及能够以 batch_size 进行预测,数据预处理逻辑(包括 `resize`、`crop` 等操作)均在客户端完成,因此需要在 `PaddleClas/deploy/hubserving/test_hubserving.py#L35-L52`中修改。 diff --git a/docs/zh_CN_tmp/inference_deployment/paddle_lite_deploy.md b/docs/zh_CN_tmp/inference_deployment/paddle_lite_deploy.md index 7d4ac340f762c4506cefc67e60a7c477eade9fb1..3971369b3bed17b2345db1b2ea0097d7c70b0ebc 100644 --- a/docs/zh_CN_tmp/inference_deployment/paddle_lite_deploy.md +++ b/docs/zh_CN_tmp/inference_deployment/paddle_lite_deploy.md @@ -2,7 +2,9 @@ 本教程将介绍基于[Paddle Lite](https://github.com/PaddlePaddle/Paddle-Lite)在移动端部署 PaddleClas 分类模型的详细步骤。 -Paddle Lite是飞桨轻量化推理引擎,为手机、IOT端提供高效推理能力,并广泛整合跨平台硬件,为端侧部署及应用落地问题提供轻量化的部署方案。如果希望直接测试速度,可以参考[Paddle-Lite移动端benchmark测试教程](../../docs/zh_CN/extension/paddle_mobile_inference.md)。 +Paddle Lite是飞桨轻量化推理引擎,为手机、IOT端提供高效推理能力,并广泛整合跨平台硬件,为端侧部署及应用落地问题提供轻量化的部署方案。 + + --- @@ -15,11 +17,7 @@ Paddle Lite 目前支持以下平台部署: ### 1.1 准备交叉编译环境 交叉编译环境用于编译 Paddle Lite 和 PaddleClas 的 C++ demo。 -支持多种开发环境,不同开发环境的编译流程请参考对应文档。 - -1. [Docker](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#docker) -2. [Linux](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#linux) -3. [MAC OS](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#mac-os) +支持多种开发环境,关于 Docker、Linux、macOS、Windows 等不同开发环境的编译流程请参考[文档](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html)。 ### 1.2 准备预测库 @@ -44,7 +42,8 @@ cd Paddle-Lite git checkout develop ./lite/tools/build_android.sh --arch=armv8 --with_cv=ON --with_extra=ON ``` - + + **注意**:编译Paddle-Lite获得预测库时,需要打开`--with_cv=ON --with_extra=ON`两个选项,`--arch`表示`arm`版本,这里指定为armv8,更多编译命令介绍请参考[链接](https://paddle-lite.readthedocs.io/zh/latest/user_guides/Compile/Android.html#id2)。 直接下载预测库并解压后,可以得到`inference_lite_lib.android.armv8/`文件夹,通过编译Paddle-Lite得到的预测库位于`Paddle-Lite/build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/`文件夹下。 @@ -197,7 +196,7 @@ cp ../../../cxx/lib/libpaddle_light_api_shared.so ./debug/ ``` `prepare.sh` 以 `PaddleClas/deploy/lite/imgs/tabby_cat.jpg` 作为测试图像,将测试图像复制到 `demo/cxx/clas/debug/` 文件夹下。 -将 `paddle_lite_opt` 工具优化后的模型文件放置到 `/{lite prediction library path}/inference_lite_lib.android.armv8/demo/cxx/clas/debug/` 文件夹下。本例中,使用 [2.1.3](#2.1.3) 生成的 `MobileNetV3_large_x1_0.nb` 模型文件。 +将 `paddle_lite_opt` 工具优化后的模型文件放置到 `/{lite prediction library path}/inference_lite_lib.android.armv8/demo/cxx/clas/debug/` 文件夹下。本例中,使用 [2.1.3 转换示例](#2.1.3) 生成的 `MobileNetV3_large_x1_0.nb` 模型文件。 执行完成后,clas 文件夹下将有如下文件格式: @@ -253,7 +252,7 @@ export LD_LIBRARY_PATH=/data/local/tmp/debug:$LD_LIBRARY_PATH 运行效果如下:
- +
## FAQ diff --git a/docs/zh_CN_tmp/inference_deployment/whl_deploy.md b/docs/zh_CN_tmp/inference_deployment/whl_deploy.md index ad5d691aeaf5caa31775def11ca0932eeb4c49c5..2799f762d05ea465842925d1d4d3abd7aa90d032 100644 --- a/docs/zh_CN_tmp/inference_deployment/whl_deploy.md +++ b/docs/zh_CN_tmp/inference_deployment/whl_deploy.md @@ -21,10 +21,10 @@ pip3 install dist/* ## 2. 快速开始 -* 使用`ResNet50`模型,以下图(`'docs/images/whl/demo.jpg'`)为例进行说明。 +* 使用`ResNet50`模型,以下图(`PaddleClas/docs/images/inference_deployment/whl_demo.jpg`)为例进行说明。
- +
@@ -32,7 +32,7 @@ pip3 install dist/* ```python from paddleclas import PaddleClas clas = PaddleClas(model_name='ResNet50') -infer_imgs='docs/images/whl/demo.jpg' +infer_imgs='docs/images/inference_deployment/whl_demo.jpg' result=clas.predict(infer_imgs) print(next(result)) ``` @@ -46,12 +46,12 @@ print(next(result)) * 在命令行中使用 ```bash -paddleclas --model_name=ResNet50 --infer_imgs="docs/images/whl/demo.jpg" +paddleclas --model_name=ResNet50 --infer_imgs="docs/images/inference_deployment/whl_demo.jpg" ``` ``` >>> result -filename: docs/images/whl/demo.jpg, top-5, class_ids: [8, 7, 136, 80, 84], scores: [0.79368, 0.16329, 0.01853, 0.00959, 0.00239], label_names: ['hen', 'cock', 'European gallinule, Porphyrio porphyrio', 'black grouse', 'peacock'] +filename: docs/images/inference_deployment/whl_demo.jpg, top-5, class_ids: [8, 7, 136, 80, 84], scores: [0.79368, 0.16329, 0.01853, 0.00959, 0.00239], label_names: ['hen', 'cock', 'European gallinule, Porphyrio porphyrio', 'black grouse', 'peacock'] Predict complete! ``` @@ -77,7 +77,7 @@ Predict complete! * 命令行中 ```bash from paddleclas import PaddleClas, get_default_confg -paddleclas --model_name=ViT_base_patch16_384 --infer_imgs='docs/images/whl/demo.jpg' --resize_short=384 --crop_size=384 +paddleclas --model_name=ViT_base_patch16_384 --infer_imgs='docs/images/inference_deployment/whl_demo.jpg' --resize_short=384 --crop_size=384 ``` * Python代码中 @@ -109,14 +109,14 @@ paddleclas -h ```python from paddleclas import PaddleClas clas = PaddleClas(model_name='ResNet50') -infer_imgs = 'docs/images/whl/demo.jpg' +infer_imgs = 'docs/images/inference_deployment/whl_demo.jpg' result=clas.predict(infer_imgs) print(next(result)) ``` * CLI ```bash -paddleclas --model_name='ResNet50' --infer_imgs='docs/images/whl/demo.jpg' +paddleclas --model_name='ResNet50' --infer_imgs='docs/images/inference_deployment/whl_demo.jpg' ``` @@ -127,14 +127,14 @@ paddleclas --model_name='ResNet50' --infer_imgs='docs/images/whl/demo.jpg' ```python from paddleclas import PaddleClas clas = PaddleClas(inference_model_dir='./inference/') -infer_imgs = 'docs/images/whl/demo.jpg' +infer_imgs = 'docs/images/inference_deployment/whl_demo.jpg' result=clas.predict(infer_imgs) print(next(result)) ``` * CLI ```bash -paddleclas --inference_model_dir='./inference/' --infer_imgs='docs/images/whl/demo.jpg' +paddleclas --inference_model_dir='./inference/' --infer_imgs='docs/images/inference_deployment/whl_demo.jpg' ``` @@ -164,14 +164,14 @@ paddleclas --model_name='ResNet50' --infer_imgs='docs/images/' --batch_size 2 ```python from paddleclas import PaddleClas clas = PaddleClas(model_name='ResNet50') -infer_imgs = 'https://raw.githubusercontent.com/paddlepaddle/paddleclas/release/2.2/docs/images/whl/demo.jpg' +infer_imgs = 'https://raw.githubusercontent.com/paddlepaddle/paddleclas/release/2.2/docs/images/inference_deployment/whl_demo.jpg' result=clas.predict(infer_imgs) print(next(result)) ``` * CLI ```bash -paddleclas --model_name='ResNet50' --infer_imgs='https://raw.githubusercontent.com/paddlepaddle/paddleclas/release/2.2/docs/images/whl/demo.jpg' +paddleclas --model_name='ResNet50' --infer_imgs='https://raw.githubusercontent.com/paddlepaddle/paddleclas/release/2.2/docs/images/inference_deployment/whl_demo.jpg' ``` @@ -183,7 +183,7 @@ paddleclas --model_name='ResNet50' --infer_imgs='https://raw.githubusercontent.c import cv2 from paddleclas import PaddleClas clas = PaddleClas(model_name='ResNet50') -infer_imgs = cv2.imread("docs/images/whl/demo.jpg") +infer_imgs = cv2.imread("docs/images/inference_deployment/whl_demo.jpg") result=clas.predict(infer_imgs) print(next(result)) ``` @@ -229,12 +229,12 @@ class_idclass_name<\n> ```python from paddleclas import PaddleClas clas = PaddleClas(model_name='ResNet50', class_id_map_file='./ppcls/utils/imagenet1k_label_list.txt') -infer_imgs = 'docs/images/whl/demo.jpg' +infer_imgs = 'docs/images/inference_deployment/whl_demo.jpg' result=clas.predict(infer_imgs) print(next(result)) ``` * CLI ```bash -paddleclas --model_name='ResNet50' --infer_imgs='docs/images/whl/demo.jpg' --class_id_map_file='./ppcls/utils/imagenet1k_label_list.txt' +paddleclas --model_name='ResNet50' --infer_imgs='docs/images/inference_deployment/whl_demo.jpg' --class_id_map_file='./ppcls/utils/imagenet1k_label_list.txt' ``` diff --git a/docs/zh_CN_tmp/installation/install_paddle.md b/docs/zh_CN_tmp/installation/install_paddle.md index deb1ad60dcee76108a7bdf7b4ca3615d142ef8f9..827de5ce27cc3c03a85799f781653dfe76725ad6 100644 --- a/docs/zh_CN_tmp/installation/install_paddle.md +++ b/docs/zh_CN_tmp/installation/install_paddle.md @@ -2,7 +2,7 @@ --- -目前, **PaddleClas** 要求 **PaddlePaddle** 版本 `>=2.0`。建议使用我们提供的 Docker 运行 PaddleClas,有关 Docker、nvidia-docker 的相关使用教程可以参考[链接](https://www.runoob.com/Docker/Docker-tutorial.html)。如果不使用 Docker,可以直接跳过 [2.1](#2.1) 部分内容,从 [2.2](#2.2) 部分开始。 +目前, **PaddleClas** 要求 **PaddlePaddle** 版本 `>=2.0`。建议使用我们提供的 Docker 运行 PaddleClas,有关 Docker、nvidia-docker 的相关使用教程可以参考[链接](https://www.runoob.com/Docker/Docker-tutorial.html)。如果不使用 Docker,可以直接跳过 [2.(建议)使用 Docker 环境](#2) 部分内容,从 [3. 通过 pip 安装 PaddlePaddle](#3) 部分开始。 ## 1. 环境要求 @@ -18,6 +18,8 @@ * 当 CUDA 版本为 10.2 时,显卡驱动版本 `>= 440.33`; * 更多 CUDA 版本与要求的显卡驱动版本可以参考[链接](https://docs.nvidia.com/deploy/cuda-compatibility/index.html)。 + + ## 2.(建议)使用 Docker 环境 * 切换到工作目录下 @@ -40,16 +42,18 @@ sudo docker run --name ppcls -v $PWD:/paddle --shm-size=8G --network=host -it pa **注意**: * 首次使用该镜像时,下述命令会自动下载该镜像文件,下载需要一定的时间,请耐心等待; -* 下述命令会创建一个 Docker 容器,之后再次使用该容器时无需再次运行该命令; -* 参数 `--shm-size=8G` 将设置容器的共享内存为8G,如机器环境允许,建议将该参数设置较大,如 `64G`。 -* 您也可以访问 [DockerHub](https://hub.Docker.com/r/paddlepaddle/paddle/tags/)获取与您机器适配的镜像。 +* 上述命令会创建一个名为 ppcls 的 Docker 容器,之后再次使用该容器时无需再次运行该命令; +* 参数 `--shm-size=8G` 将设置容器的共享内存为8G,如机器环境允许,建议将该参数设置较大,如 `64G`; +* 您也可以访问 [DockerHub](https://hub.Docker.com/r/paddlepaddle/paddle/tags/) 获取与您机器适配的镜像; +* 退出/进入 docker 容器: + * 在进入 Docker 容器后,可使用组合键 `Ctrl + P + Q` 退出当前容器,同时不关闭该容器; + * 如需再次进入容器,可使用下述命令: -* 退出/进入 docker 容器 -在进入 Docker 容器后,可使用组合键 `Ctrl + P + Q` 退出当前容器,同时不关闭该容器。如需再次进入容器,可使用下述命令: + ```shell + sudo Docker exec -it ppcls /bin/bash + ``` -```shell -sudo Docker exec -it ppcls /bin/bash -``` + ## 3. 通过 pip 安装 PaddlePaddle @@ -65,7 +69,7 @@ pip3 install paddlepaddle-gpu --upgrade -i https://mirror.baidu.com/pypi/simple **注意:** * 如果先安装了 CPU 版本的 PaddlePaddle,之后想切换到 GPU 版本,那么需要使用 pip 先卸载 CPU 版本的 PaddlePaddle,再安装 GPU 版本的 PaddlePaddle,否则容易导致 PaddlePaddle 冲突。 -* 您也可以从源码编译安装 PaddlePaddle,请参照[PaddlePaddle 安装文档](http://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。 +* 您也可以从源码编译安装 PaddlePaddle,请参照 [PaddlePaddle 安装文档](http://www.paddlepaddle.org.cn/install/quick) 中的说明进行操作。 ## 4. 验证安装 @@ -83,6 +87,6 @@ python -c "import paddle; print(paddle.__version__)" ``` **注意**: -- 从源码编译的 PaddlePaddle 版本号为 `0.0.0`,请确保使用了 PaddlePaddle 2.0 及之后的源码编译; -- PaddleClas 基于 PaddlePaddle 高性能的分布式训练能力,若您从源码编译,请确保打开编译选项 `WITH_DISTRIBUTE=ON`。具体编译选项参考[编译选项表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/Tables.html#id3); -- 在 Docker 中运行时,为保证 Docker 容器有足够的共享内存用于 Paddle 的数据读取加速,在创建Docker 容器时,请设置参数 `--shm_size=8g`,条件允许的话可以设置为更大的值。 +- 从源码编译的 PaddlePaddle 版本号为 `0.0.0`,请确保使用 PaddlePaddle 2.0 及之后的源码进行编译; +- PaddleClas 基于 PaddlePaddle 高性能的分布式训练能力,若您从源码编译,请确保打开编译选项 `WITH_DISTRIBUTE=ON`。具体编译选项参考 [编译选项表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/Tables.html#bianyixuanxiangbiao); +- 在 Docker 中运行时,为保证 Docker 容器有足够的共享内存用于 Paddle 的数据读取加速,在创建 Docker 容器时,请设置参数 `--shm_size=8g`,条件允许的话可以设置为更大的值。 diff --git a/docs/zh_CN_tmp/quick_start/quick_start_classification.md b/docs/zh_CN_tmp/quick_start/quick_start_classification.md index a16dcb413d46a0141bb151a8e6e5c9eb1a6b30bc..dfa89c5891a04c7e45ef9d0631ffad4cbe215ef0 100644 --- a/docs/zh_CN_tmp/quick_start/quick_start_classification.md +++ b/docs/zh_CN_tmp/quick_start/quick_start_classification.md @@ -74,6 +74,8 @@ cd ../../ ## 4. 模型训练 + + ### 4.1 使用CPU进行模型训练 由于使用CPU来进行模型训练,计算速度较慢,因此,此处以 ShuffleNetV2_x0_25 为例。此模型计算量较小,在 CPU 上计算速度较快。但是也因为模型较小,训练好的模型精度也不会太高。 @@ -137,7 +139,7 @@ python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml -o Arch.pretrained=True ``` -**注**:此训练脚本使用 GPU,如使用 CPU 可按照上文中[使用CPU进行模型训练](#使用CPU进行模型训练)所示,进行修改。 +**注**:此训练脚本使用 GPU,如使用 CPU 可按照上文中[4.1 使用CPU进行模型训练](#4.1)所示,进行修改。 验证集的 `Top1 Acc` 曲线如下所示,最高准确率为 `0.9402`,加载预训练模型之后,flowers102 数据集精度大幅提升,绝对精度涨幅超过 65%。