From af25eaf799ab8c63b2ee92d755d2fab20138b033 Mon Sep 17 00:00:00 2001 From: gaotingquan <gaotingquan@baidu.com> Date: Tue, 9 Nov 2021 10:15:21 +0000 Subject: [PATCH] docs: update flower102 label map list --- dataset/{flowers102/__init__.py => .gitkeep} | 0 .../flowers102/generate_flowers102_list.py | 39 ------------------- .../quick_start_classification_new_user.md | 30 ++++++++------ .../quick_start/MobileNetV3_large_x1_0.yaml | 2 +- ppcls/configs/quick_start/ResNet50_vd.yaml | 2 +- .../new_user/ShuffleNetV2_x0_25.yaml | 1 + 6 files changed, 21 insertions(+), 53 deletions(-) rename dataset/{flowers102/__init__.py => .gitkeep} (100%) delete mode 100644 dataset/flowers102/generate_flowers102_list.py diff --git a/dataset/flowers102/__init__.py b/dataset/.gitkeep similarity index 100% rename from dataset/flowers102/__init__.py rename to dataset/.gitkeep diff --git a/dataset/flowers102/generate_flowers102_list.py b/dataset/flowers102/generate_flowers102_list.py deleted file mode 100644 index 90066d750..000000000 --- a/dataset/flowers102/generate_flowers102_list.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -.mat files data format -imagelabel.mat -jpg_name 1 2 3 ... -label 32 12 66 ... - -setid.mat -jpg_name(10 records in a class) 24 6 100 65 32 ... -label 4 ... -""" -""" -Usage: - python generate_flower_list.py prefix_folder mode - python generate_flower_list.py jpg train > train_list.txt - python generate_flower_list.py jpg valid > val_list.txt -""" - -import scipy.io -import numpy as np -import os -import sys - -data_path = sys.argv[1] -imagelabels_path = './imagelabels.mat' -setid_path = './setid.mat' - -labels = scipy.io.loadmat(imagelabels_path) -labels = np.array(labels['labels'][0]) -setid = scipy.io.loadmat(setid_path) - -d = {} -d['train'] = np.array(setid['trnid'][0]) -d['valid'] = np.array(setid['valid'][0]) -d['test'] = np.array(setid['tstid'][0]) - -for id in d[sys.argv[2]]: - message = str(data_path) + "/image_" + str(id).zfill(5) + ".jpg " + str( - labels[id - 1] - 1) - print(message) diff --git a/docs/zh_CN/quick_start/quick_start_classification_new_user.md b/docs/zh_CN/quick_start/quick_start_classification_new_user.md index dfa89c589..faaecf19e 100644 --- a/docs/zh_CN/quick_start/quick_start_classification_new_user.md +++ b/docs/zh_CN/quick_start/quick_start_classification_new_user.md @@ -47,18 +47,18 @@ cd $path_to_PaddleClas ```shell # linux or mac -cd dataset/flowers102 +cd dataset/ # 如果希望从浏览器中直接下载,可以复制该链接并访问,然后下载解压即可 wget https://paddle-imagenet-models-name.bj.bcebos.com/data/flowers102.zip # 解压 unzip flowers102.zip ``` -没有安装 `wget` 命令或者在 Windows 中下载的话,需要将地址拷贝到浏览器中下载,并进行解压到 PaddleClas 的根目录即可。 +没有安装 `wget` 命令或者在 Windows 中下载的话,需要将地址拷贝到浏览器中下载,并进行解压到目录 `PaddleClas/dataset/` 下面即可。 -解压完成后,在文件夹下已经生成用于训练和测试的三个 `.txt` 文件:`train_list.txt`(训练集,1020张图)、`val_list.txt`(验证集,1020张图)、`train_extra_list.txt`(更大的训练集,7169张图)。文件中每行格式:**图像相对路径** **图像的label_id**(注意:中间有空格)。 +解压完成后,在目录 `PaddleClas/dataset/flowers102` 下有用于训练和测试的三个 `.txt` 文件:`train_list.txt`(训练集,1020张图)、`val_list.txt`(验证集,1020张图)、`train_extra_list.txt`(更大的训练集,7169张图)。文件中每行格式:**图像相对路径** **图像的label_id**(注意:中间有空格),此外还有flowers102数据集 label id 与类别名称的映射文件:`flowers102_label_list.txt`。 -此时flowers102数据集存放在**dataset/flowers102/jpg** 文件夹中,图像示例如下: +flowers102数据集的图像文件存放在 `dataset/flowers102/jpg` 目录中,图像示例如下: <div align="center"> <img src="../../images/quick_start/Examples-Flower-102.png" width = "800" /> @@ -122,7 +122,7 @@ python tools/train.py -c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25 #### 不使用预训练模型 ```shell -python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml +python tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml ``` 训练完成后,验证集的`Top1 Acc`曲线如下所示,最高准确率为0.2735。训练精度曲线下图所示 @@ -136,7 +136,7 @@ python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml 基于 ImageNet1k 分类预训练模型进行微调,训练脚本如下所示 ```shell -python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml -o Arch.pretrained=True +python tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml -o Arch.pretrained=True ``` **注**:此训练脚本使用 GPU,如使用 CPU 可按照上文中[4.1 使用CPU进行模型训练](#4.1)所示,进行修改。 @@ -149,20 +149,26 @@ python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml -o Arch.p ## 5. 模型预测 -训练完成后预测代码如下: +训练完成后,可以使用训练好的模型进行预测,以训练的 ResNet50_vd 模型为例,预测代码如下: ```shell cd $path_to_PaddleClas -python3 tools/infer.py -c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml -o Infer.infer_imgs=dataset/flowers102/jpg/image_00001.jpg -o Global.pretrained_model=output/ShuffleNetV2_x0_25/best_model +python tools/infer.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml -o Infer.infer_imgs=dataset/flowers102/jpg/image_00001.jpg -o Global.pretrained_model=output/ResNet50_vd/best_model ``` `-i` 输入为单张图像路径,运行成功后,示例结果如下: -`[{'class_ids': [76, 65, 34, 9, 69], 'scores': [0.91762, 0.01801, 0.00833, 0.0071, 0.00669], 'file_name': 'dataset/flowers102/jpg/image_00001.jpg', 'label_names': []}]` +`[{'class_ids': [76, 51, 37, 33, 9], 'scores': [0.99998, 0.0, 0.0, 0.0, 0.0], 'file_name': 'dataset/flowers102/jpg/image_00001.jpg', 'label_names': ['passion flower', 'wild pansy', 'great masterwort', 'mexican aster', 'globe thistle']}]` -`-i` 输入为图像集所在目录,运行成功后,示例结果如下: +当然也可以使用训练的 ShuffleNetV2_x0_25 模型进行预测,代码如下: -```txt -[{'class_ids': [76, 65, 34, 9, 69], 'scores': [0.91762, 0.01801, 0.00833, 0.0071, 0.00669], 'file_name': 'dataset/flowers102/jpg/image_00001.jpg', 'label_names': []}, {'class_ids': [76, 69, 34, 28, 9], 'scores': [0.77122, 0.06295, 0.02537, 0.02531, 0.0251], 'file_name': 'dataset/flowers102/jpg/image_00002.jpg', 'label_names': []}, {'class_ids': [99, 76, 81, 85, 16], 'scores': [0.26374, 0.20423, 0.07818, 0.06042, 0.05499], 'file_name': 'dataset/flowers102/jpg/image_00003.jpg', 'label_names': []}, {'class_ids': [9, 37, 34, 24, 76], 'scores': [0.17784, 0.16651, 0.14539, 0.12096, 0.04816], 'file_name': 'dataset/flowers102/jpg/image_00004.jpg', 'label_names': []}, {'class_ids': [76, 66, 91, 16, 13], 'scores': [0.95494, 0.00688, 0.00596, 0.00352, 0.00308], 'file_name': 'dataset/flowers102/jpg/image_00005.jpg', 'label_names': []}, {'class_ids': [76, 66, 34, 8, 43], 'scores': [0.44425, 0.07487, 0.05609, 0.05609, 0.03667], 'file_name': 'dataset/flowers102/jpg/image_00006.jpg', 'label_names': []}, {'class_ids': [86, 93, 81, 22, 21], 'scores': [0.44714, 0.13582, 0.07997, 0.0514, 0.03497], 'file_name': 'dataset/flowers102/jpg/image_00007.jpg', 'label_names': []}, {'class_ids': [13, 76, 81, 18, 97], 'scores': [0.26771, 0.1734, 0.06576, 0.0451, 0.03986], 'file_name': 'dataset/flowers102/jpg/image_00008.jpg', 'label_names': []}, {'class_ids': [34, 76, 8, 5, 9], 'scores': [0.67224, 0.31896, 0.00241, 0.00227, 0.00102], 'file_name': 'dataset/flowers102/jpg/image_00009.jpg', 'label_names': []}, {'class_ids': [76, 34, 69, 65, 66], 'scores': [0.95185, 0.01101, 0.00875, 0.00452, 0.00406], 'file_name': 'dataset/flowers102/jpg/image_00010.jpg', 'label_names': []}] +```shell +cd $path_to_PaddleClas +python tools/infer.py -c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml -o Infer.infer_imgs=dataset/flowers102/jpg/image_00001.jpg -o Global.pretrained_model=output/ShuffleNetV2_x0_25/best_model ``` + +`-i` 参数也可以为待测图像文件所在目录(`dataset/flowers102/jpg/`),运行成功后,部分示例结果如下: + +`[{'class_ids': [76, 51, 37, 33, 9], 'scores': [0.99998, 0.0, 0.0, 0.0, 0.0], 'file_name': 'dataset/flowers102/jpg/image_00001.jpg', 'label_names': ['passion flower', 'wild pansy', 'great masterwort', 'mexican aster', 'globe thistle']}, {'class_ids': [76, 51, 37, 33, 32], 'scores': [0.99999, 0.0, 0.0, 0.0, 0.0], 'file_name': 'dataset/flowers102/jpg/image_00002.jpg', 'label_names': ['passion flower', 'wild pansy', 'great masterwort', 'mexican aster', 'love in the mist']}, {'class_ids': [76, 12, 39, 73, 78], 'scores': [0.99998, 0.0, 0.0, 0.0, 0.0], 'file_name': 'dataset/flowers102/jpg/image_00003.jpg', 'label_names': ['passion flower', 'king protea', 'lenten rose', 'rose', 'toad lily']}, {'class_ids': [76, 37, 34, 12, 9], 'scores': [0.86282, 0.11177, 0.00717, 0.00599, 0.00397], 'file_name': 'dataset/flowers102/jpg/image_00004.jpg', 'label_names': ['passion flower', 'great masterwort', 'alpine sea holly', 'king protea', 'globe thistle']}, {'class_ids': [76, 37, 33, 51, 69], 'scores': [0.9999, 1e-05, 1e-05, 0.0, 0.0], 'file_name': 'dataset/flowers102/jpg/image_00005.jpg', 'label_names': ['passion flower', 'great masterwort', 'mexican aster', 'wild pansy', 'tree poppy']}, {'class_ids': [76, 37, 51, 33, 73], 'scores': [0.99999, 0.0, 0.0, 0.0, 0.0], 'file_name': 'dataset/flowers102/jpg/image_00006.jpg', 'label_names': ['passion flower', 'great masterwort', 'wild pansy', 'mexican aster', 'rose']}, {'class_ids': [76, 37, 12, 91, 30], 'scores': [0.98746, 0.00211, 0.00201, 0.00136, 0.0007], 'file_name': 'dataset/flowers102/jpg/image_00007.jpg', 'label_names': ['passion flower', 'great masterwort', 'king protea', 'bee balm', 'carnation']}, {'class_ids': [76, 37, 81, 77, 72], 'scores': [0.99976, 3e-05, 2e-05, 2e-05, 1e-05], 'file_name': 'dataset/flowers102/jpg/image_00008.jpg', 'label_names': ['passion flower', 'great masterwort', 'clematis', 'lotus', 'water lily']}, {'class_ids': [76, 37, 13, 12, 34], 'scores': [0.99646, 0.00144, 0.00092, 0.00035, 0.00027], 'file_name': 'dataset/flowers102/jpg/image_00009.jpg', 'label_names': ['passion flower', 'great masterwort', 'spear thistle', 'king protea', 'alpine sea holly']}, {'class_ids': [76, 37, 34, 33, 51], 'scores': [0.99999, 0.0, 0.0, 0.0, 0.0], 'file_name': 'dataset/flowers102/jpg/image_00010.jpg', 'label_names': ['passion flower', 'great masterwort', 'alpine sea holly', 'mexican aster', 'wild pansy']}]` + 其中,列表的长度为 batch_size 的大小。 diff --git a/ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml b/ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml index 394f201cc..7b7c1d592 100644 --- a/ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml +++ b/ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml @@ -119,7 +119,7 @@ Infer: PostProcess: name: Topk topk: 5 - class_id_map_file: ppcls/utils/imagenet1k_label_list.txt + class_id_map_file: ./dataset/flowers102/flowers102_label_list.txt Metric: Train: diff --git a/ppcls/configs/quick_start/ResNet50_vd.yaml b/ppcls/configs/quick_start/ResNet50_vd.yaml index 1b4e844fa..d18f8dcb7 100644 --- a/ppcls/configs/quick_start/ResNet50_vd.yaml +++ b/ppcls/configs/quick_start/ResNet50_vd.yaml @@ -118,7 +118,7 @@ Infer: PostProcess: name: Topk topk: 5 - class_id_map_file: ppcls/utils/imagenet1k_label_list.txt + class_id_map_file: ./dataset/flowers102/flowers102_label_list.txt Metric: Train: diff --git a/ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml b/ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml index f58522c1e..26bef7fc5 100644 --- a/ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml +++ b/ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml @@ -118,6 +118,7 @@ Infer: PostProcess: name: Topk topk: 5 + class_id_map_file: ./dataset/flowers102/flowers102_label_list.txt Metric: Train: