未验证 提交 6791753c 编写于 作者: D dyning 提交者: GitHub

Merge pull request #33 from shippingwang/master

add data doc
mode: 'train'
architecture: 'ResNet50_vd'
pretrained_model:
model_save_dir: "./output/"
classes_num: 102
total_images: 1020
save_interval: 10
validate: True
valid_interval: 1
epochs: 40
topk: 5
image_shape: [3, 224, 224]
ls_epsilon: 0.1
LEARNING_RATE:
function: 'Cosine'
params:
lr: 0.00375
OPTIMIZER:
function: 'Momentum'
params:
momentum: 0.9
regularizer:
function: 'L2'
factor: 0.000001
TRAIN:
batch_size: 32
num_workers: 1
file_list: "./dataset/flower102/train_list.txt"
data_dir: "./dataset/flower102"
shuffle_seed: 0
transforms:
- DecodeImage:
to_rgb: True
to_np: False
channel_first: False
- RandCropImage:
size: 224
- RandFlipImage:
flip_code: 1
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- ToCHWImage:
#mix:
# - MixupOperator:
# alpha: 0.2
VALID:
batch_size: 64
num_workers: 1
file_list: "./dataset/flower102/val_list.txt"
data_dir: "./dataset/flower102/"
shuffle_seed: 0
transforms:
- DecodeImage:
to_rgb: True
to_np: False
channel_first: False
- ResizeImage:
resize_short: 256
- CropImage:
size: 224
- NormalizeImage:
scale: 1.0/255.0
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- ToCHWImage:
import scipy.io
import numpy as np
import os
import sys
""".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
"""
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])
print(message)
# 数据说明
---
## 1.简介
本文档介绍ImageNet1k和Flower102数据准备过程。
以及PaddleClas提供了丰富的[预训练模型](../models/models_intro.md)
## 2.数据集准备
数据集 | 训练集大小 | 测试集大小 | 类别数 | 备注|
:------:|:---------------:|:---------------------:|:-----------:|:-----------:
[Flower102](https://www.robots.ox.ac.uk/~vgg/data/flowers/102/)|1k | 6k | 102 |
[ImageNet1k](http://www.image-net.org/challenges/LSVRC/2012/)|1.2M| 50k | 1000 |
数据格式
按照如下结构组织数据,其中train_list.txt 和val_list.txt的格式形如
```
#每一行采用"空格"分隔图像路径与标注
ILSVRC2012_val_00000001.JPEG 65
...
```
### ImageNet1k
从官方下载数据后,按如下组织数据
```bash
PaddleClas/dataset/imagenet/
|_ train/
| |_ n01440764
| | |_ n01440764_10026.JPEG
| | |_ ...
| |_ ...
| |
| |_ n15075141
| |_ ...
| |_ n15075141_9993.JPEG
|_ val/
| |_ ILSVRC2012_val_00000001.JPEG
| |_ ...
| |_ ILSVRC2012_val_00050000.JPEG
|_ train_list.txt
|_ val_list.txt
```
### Flower
[VGG官方网站](https://www.robots.ox.ac.uk/~vgg/data/flowers/102/)下载后的数据,解压后包括
jpg/
setid.mat
imagelabels.mat
将以上文件放置在PaddleClas/dataset/flower102/下
通过运行generate_flower_list.py生成train_list.txt和val_list.txt
```bash
python generate_flower_list.py jpg train > train_list.txt
python generate_flower_list.py jpg valid > val_list.txt
```
按照如下结构组织数据:
```bash
PaddleClas/dataset/flower102/
|_ jpg/
| |_ image_03601.jpg
| |_ ...
| |_ image_02355.jpg
|_ train_list.txt
|_ val_list.txt
```
## 3.下载预训练模型
通过tools/download.py下载所需要的预训练模型。
```bash
python tools/download.py -a ResNet50_vd -p ./pretrained -d True
```
参数说明:
+ `architecture`(简写 a):模型结构
+ `path`(简写 p):下载路径
+ `decompress` (简写 d):是否解压
# 开始使用
---
请事先参考[安装指南](install.md)配置运行环境
有关模型库的基本信息请参考[README](https://github.com/PaddlePaddle/PaddleClas/blob/master/README.md)
## 一、设置环境变量
......@@ -15,15 +16,17 @@ export PYTHONPATH=path_to_PaddleClas:$PYTHONPATH
PaddleClas 提供模型训练与评估脚本:tools/train.py和tools/eval.py
### 2.1 模型训练
以flower102数据为例按如下方式启动模型训练,flower数据集准备请参考[数据集准备](./data.md)
```bash
# PaddleClas通过launch方式启动多卡多进程训练
# 通过设置FLAGS_selected_gpus 指定GPU运行卡号
python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=log_ResNet50 \
--log_dir=log_ResNet50_vd \
tools/train.py \
-c ./configs/ResNet/ResNet50.yaml
-c ./configs/flower.yaml
```
- 输出日志示例如下:
......@@ -39,7 +42,7 @@ python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=log_ResNet50_vd \
tools/train.py \
-c ./configs/ResNet/ResNet50_vd.yaml \
-c ./configs/flower.yaml \
-o use_mix=1
```
......@@ -54,18 +57,40 @@ epoch:0 train step:522 loss:1.6330 lr:0.100000 elapse:0.210
### 2.3 模型微调
您可以通过如下命令进行模型微调,通过指定--pretrained_model参数加载预训练模型
以ResNet50_vd和ResNet50_vd_ssld预训练模型对flower102数据集进行微调
ResNet50_vd: 在ImageNet1k数据集上训练 top1 acc:79.1% 模型详细信息参考[模型库](https://paddleclas.readthedocs.io/zh_CN/latest/models/ResNet_and_vd.html)
ResNet50_vd_ssld: 在ImageNet1k数据集训练的蒸馏模型 top1: 82.4% 模型详细信息参考[模型库](https://paddleclas.readthedocs.io/zh_CN/latest/models/ResNet_and_vd.html)
flower数据集相关信息参考[数据文档](data.md)
指定pretrained_model参数初始化预训练模型
ResNet50_vd:
```bash
python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=log_ResNet50_vd \
train.py \
-c ../configs/ResNet/ResNet50_vd.yaml \
-o pretrained_model= 预训练模型路径\
--selected_gpus="0" \
tools/train.py \
-c ./configs/finetune/ResNet50_vd_finetune.yaml
-o pretrained_model= ResNet50_vd预训练模型
```
ResNet50_vd_ssld:
```bash
python -m paddle.distributed.launch \
--selected_gpus="0" \
tools/train.py \
-c ./configs/finetune/ResNet50_vd_ssld_finetune.yaml
-o pretrained_model= ResNet50_vd_ssld预训练模型
```
在使用ResNet50_vd预训练模型对flower102数据进行模型微调后,top1 acc 达到 92.71%
在使用ResNet50_vd_ssld预训练模型对flower102数据进行模型微调后,top1 acc 达到94.96%
### 2.2 模型评估
```bash
......
......@@ -7,3 +7,4 @@
install.md
getting_started.md
config.md
data.md
......@@ -4,33 +4,43 @@
## 1.简介
本章将介绍如何安装PaddleClas及其依赖项,准备ImageNet1k图像分类数据集和下载预训练模型。
本章将介绍如何安装PaddleClas及其依赖项.
有关模型库的基本信息请参考[README](https://github.com/PaddlePaddle/PaddleClas/blob/master/README.md)
## 2.安装PaddlePaddle
运行PaddleClas需要PaddlePaddle Fluid v1.7或更高版本。请按照[安装文档](http://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。
运行PaddleClas需要PaddlePaddle Fluid v1.7或更高版本。
使用以下命令进行验证。
pip安装最新GPU版本PaddlePaddle
```bash
pip install paddlepaddle-gpu --upgrade
```
# 在您的Python解释器中确认PaddlePaddle安装成功
>>> import paddle.fluid as fluid
>>> fluid.install_check.run_check()
# 确认PaddlePaddle版本
python -c "import paddle; print(paddle.__version__)"
或是从源码安装PaddlePaddle,具体参照[安装文档](http://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。
使用以下命令验证
```python
import paddle.fluid as fluid
fluid.install_check.run_check()
```
查看PaddlePaddle版本
```bash
python -c "import paddle; print(paddle.__version__)"
```
注意:
- 从源码编译的PaddlePaddle版本号为0.0.0,请确保使用了Fluid v1.7之后的源码编译。
- PaddleClas基于PaddlePaddle高性能的分布式训练能力,若您从源码编译,请确保打开编译选项,**WITH_DISTRIBUTE=ON**
- PaddleClas基于PaddlePaddle高性能的分布式训练能力,若您从源码编译,请确保打开编译选项,**WITH_DISTRIBUTE=ON**。具体编译选项参考[编译选项表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/Tables.html#id3)
**环境需求:**
**运行环境需求:**
- Python2(官方已不提供更新维护)或Python3 (windows系统仅支持Python3)
- CUDA >= 8.0
- CUDA >= 9.0
- cuDNN >= 5.0
- nccl >= 2.1.2
......@@ -53,40 +63,12 @@ pip install --upgrade -r requirements.txt
```
## 4.下载ImageNet1K图像分类数据集
## 4.数据集和预训练模型
PaddleClas默认支持ImageNet1000分类任务。
在Linux系统下通过如下方式进行数据准备:
```
cd dataset/ILSVRC2012/
sh download_imagenet2012.sh
```
```download_imagenet2012.sh```脚本中,通过下面三步来准备数据:
PaddleClas加载PaddleClas/dataset/中数据进行训练,请参照[数据文档](./data.md)进行准备。
PaddleClas提供丰富的预训练模型,请参照[数据文档](./data.md)进行准备。
**步骤一:** 首先在```image-net.org```网站上完成注册,用于获得一对```Username``````AccessKey```
**步骤二:** 从ImageNet官网下载ImageNet-2012的图像数据。训练以及验证数据集会分别被下载到"train" 和 "val" 目录中。注意,ImageNet数据的大小超过140GB,下载非常耗时;已经自行下载ImageNet的用户可以直接将数据按"train" 和 "val" 目录放到```dataset/ILSVRC2012```
## 5.开始使用
**步骤三:** 下载训练与验证集合对应的标签文件。
* train_list.txt: ImageNet-2012训练集合的标签文件,每一行采用"空格"分隔图像路径与标注,例如:
```
train/n02483708/n02483708_2436.jpeg 369
```
* val_list.txt: ImageNet-2012验证集合的标签文件,每一行采用"空格"分隔图像路径与标注,例如:
```
val/ILSVRC2012_val_00000001.jpeg 65
```
**Windows系统下请用户自行下载ImageNet数据,[label下载链接](http://paddle-imagenet-models.bj.bcebos.com/ImageNet_label.tgz)**
## 5.下载预训练模型
PaddleClas 提供了丰富的预训练模型,支持的模型列表请参考[模型库](../models/models_intro.md)
通过tools/download.py可以下载所需要的预训练模型。
```bash
python tools/download.py -a ResNet50_vd -p ./pretrained -d True
```
请参照[开始使用](./getting_started.md)文档
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册