This commit is contained in:
LouieStark
2024-04-01 11:46:03 +08:00
parent e00c23d09a
commit 565c7957d8
41 changed files with 26 additions and 21 deletions
+3
View File
@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright (c) Alibaba, Inc. and its affiliates.
from .classifier_dataset import ImageClassifyExampleDataset
+260
View File
@@ -0,0 +1,260 @@
ENV:
USE_PL: False
# SET GLOBAL SYSTEM
SOLVER:
# NAME DESCRIPTION: TYPE: default: 'TrainValSolver'
NAME: TrainValSolver
# RESUME_FROM DESCRIPTION: Resume from some state of training! TYPE: str default: ''
RESUME_FROM:
# MAX_EPOCHS DESCRIPTION: Max epochs for training. TYPE: int default: 10
MAX_EPOCHS: 200
# NUM_FOLDS DESCRIPTION: Num folds for training. TYPE: int default: 0
NUM_FOLDS: 1
# WORK_DIR DESCRIPTION: Save dir of the training log or model. TYPE: str default: ''
WORK_DIR: ./exp12/
LOG_FILE: std_log.txt
# EVAL_INTERVAL DESCRIPTION: Eval the model interval. TYPE: int default: 1
EVAL_INTERVAL: 1
ACCU_STEP: 1
# DO_FINAL_EVAL DESCRIPTION: If do final evaluation or not. TYPE: bool default: False
DO_FINAL_EVAL: True
# SAVE_EVAL_DATA DESCRIPTION: If save the evaluation data or not. TYPE: bool default: False
SAVE_EVAL_DATA: True
# EXTRA_KEYS DESCRIPTION: The extra keys for metric. TYPE: list default: []
EXTRA_KEYS: []
# TRAIN_DATA DESCRIPTION: Train data config. TYPE: default: ''
TRAIN_DATA:
# NAME DESCRIPTION: TYPE: default: 'ImageClassifyPublicDataset'
NAME: ImageClassifyExampleDataset
# DATASET DESCRIPTION: the public dataset name TYPE: str default: 'cifar10'
DATASET: cifar10
# DATA_ROOT DESCRIPTION: the download data save path TYPE: str default: ''
DATA_ROOT: cifar10
# MODE DESCRIPTION: test TYPE: str default: test
MODE: train
# PIN_MEMORY DESCRIPTION: pin_memory for data loader TYPE: bool default: False
PIN_MEMORY: True
# BATCH_SIZE DESCRIPTION: batch size for data TYPE: int default: 4
BATCH_SIZE: 96
# NUM_WORKERS DESCRIPTION: num workers for fetching data! TYPE: int default: 1
NUM_WORKERS: 4
# TRANSFORMS DESCRIPTION: TYPE: default:
TRANSFORMS:
# - DESCRIPTION: TYPE: default:
- # NAME DESCRIPTION: TYPE: default: 'RandomResizedCrop'
NAME: RandomResizedCrop
SIZE: 32
# RATIO DESCRIPTION: ratio TYPE: list default: [0.75, 1.3333333333333333]
RATIO: [0.75, 1.33]
# SCALE DESCRIPTION: scale TYPE: list default: [0.08, 1.0]
SCALE: [0.8, 1.0]
# INTERPOLATION DESCRIPTION: interpolation TYPE: str default: 'blilinear'
INTERPOLATION: bilinear
# INPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
INPUT_KEY: img
# OUTPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
OUTPUT_KEY: img
# BACKEND DESCRIPTION: backend, choose from pillow, cv2, torchvision TYPE: str default: 'pillow'
BACKEND: pillow
- # NAME DESCRIPTION: TYPE: default: 'RandomHorizontalFlip'
NAME: RandomHorizontalFlip
# P DESCRIPTION: P TYPE: float default: 0.5
P: 0.5
# INPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
INPUT_KEY: img
# OUTPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
OUTPUT_KEY: img
# BACKEND DESCRIPTION: backend, choose from pillow, cv2, torchvision TYPE: str default: 'pillow'
BACKEND: pillow
- # NAME DESCRIPTION: TYPE: default: 'ImageToTensor'
NAME: ImageToTensor
# INPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
INPUT_KEY: img
# OUTPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
OUTPUT_KEY: img
# BACKEND DESCRIPTION: backend, choose from pillow, cv2, torchvision TYPE: str default: 'pillow'
BACKEND: pillow
- # NAME DESCRIPTION: TYPE: default: 'Normalize'
NAME: Normalize
# MEAN DESCRIPTION: mean TYPE: list default: []
MEAN: [0.4914, 0.4822, 0.4465]
# STD DESCRIPTION: std TYPE: list default: []
STD: [0.2023, 0.1994, 0.2010]
# INPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
INPUT_KEY: img
# OUTPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
OUTPUT_KEY: img
# BACKEND DESCRIPTION: backend, choose from pillow, cv2, torchvision TYPE: str default: 'pillow'
BACKEND: pillow
- NAME: ToTensor
# KEYS DESCRIPTION: keys TYPE: list default: []
KEYS: ["img", "label"]
- # NAME DESCRIPTION: TYPE: default: 'Select'
NAME: Select
# KEYS DESCRIPTION: keys TYPE: list default: []
KEYS: ["img", "label"]
# META_KEYS DESCRIPTION: meta keys TYPE: list default: []
META_KEYS: []
# EVAL_DATA DESCRIPTION: Eval data config. TYPE: default: ''
EVAL_DATA:
# NAME DESCRIPTION: TYPE: default: 'ImageClassifyPublicDataset'
NAME: ImageClassifyPublicDataset
# DATASET DESCRIPTION: the public dataset name TYPE: str default: 'cifar10'
DATASET: cifar10
# DATA_ROOT DESCRIPTION: the download data save path TYPE: str default: ''
DATA_ROOT: ./local_data/cifar10
# MODE DESCRIPTION: test TYPE: str default: test
MODE: test
# PIN_MEMORY DESCRIPTION: pin_memory for data loader TYPE: bool default: False
PIN_MEMORY: True
# BATCH_SIZE DESCRIPTION: batch size for data TYPE: int default: 4
BATCH_SIZE: 96
# NUM_WORKERS DESCRIPTION: num workers for fetching data! TYPE: int default: 1
NUM_WORKERS: 4
# TRANSFORMS DESCRIPTION: TYPE: default:
TRANSFORMS:
# - DESCRIPTION: TYPE: default:
- # NAME DESCRIPTION: TYPE: default: 'Resize'
NAME: Resize
SIZE: 32
# INTERPOLATION DESCRIPTION: interpolation TYPE: str default: 'blilinear'
INTERPOLATION: bilinear
# INPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
INPUT_KEY: img
# OUTPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
OUTPUT_KEY: img
# BACKEND DESCRIPTION: backend, choose from pillow, cv2, torchvision TYPE: str default: 'pillow'
BACKEND: pillow
- # NAME DESCRIPTION: TYPE: default: 'ImageToTensor'
NAME: ImageToTensor
# INPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
INPUT_KEY: img
# OUTPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
OUTPUT_KEY: img
# BACKEND DESCRIPTION: backend, choose from pillow, cv2, torchvision TYPE: str default: 'pillow'
BACKEND: pillow
- # NAME DESCRIPTION: TYPE: default: 'Normalize'
NAME: Normalize
# MEAN DESCRIPTION: mean TYPE: list default: []
MEAN: [0.4914, 0.4822, 0.4465]
# STD DESCRIPTION: std TYPE: list default: []
STD: [0.2023, 0.1994, 0.2010]
# INPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
INPUT_KEY: img
# OUTPUT_KEY DESCRIPTION: input key TYPE: str default: 'img'
OUTPUT_KEY: img
# BACKEND DESCRIPTION: backend, choose from pillow, cv2, torchvision TYPE: str default: 'pillow'
BACKEND: pillow
- NAME: ToTensor
# KEYS DESCRIPTION: keys TYPE: list default: []
KEYS: ["img", "label"]
- # NAME DESCRIPTION: TYPE: default: 'Select'
NAME: Select
# KEYS DESCRIPTION: keys TYPE: list default: []
KEYS: ["img", "label"]
# META_KEYS DESCRIPTION: meta keys TYPE: list default: []
META_KEYS: []
# TRAIN_HOOKS DESCRIPTION: TYPE: default: ''
TRAIN_HOOKS:
- # NAME DESCRIPTION: TYPE: default: 'LogHook'
NAME: LogHook
# LOG_INTERVAL DESCRIPTION: the interval for log print! TYPE: int default: 10
LOG_INTERVAL: 10
# EVAL_HOOKS DESCRIPTION: TYPE: default: ''
EVAL_HOOKS:
- # NAME DESCRIPTION: TYPE: default: 'LogHook'
NAME: LogHook
# LOG_INTERVAL DESCRIPTION: the interval for log print! TYPE: int default: 10
LOG_INTERVAL: 10
# TEST_HOOKS DESCRIPTION: TYPE: default: ''
MODEL:
# NAME DESCRIPTION: TYPE: default: 'Classifier'
NAME: Classifier
# ACT_NAME DESCRIPTION: the activation function for logits, select from [softmax, sigmoid]! TYPE: str default: 'softmax'
ACT_NAME: softmax
# FREEZE_BN DESCRIPTION: if freeze bn of not TYPE: bool default: False
FREEZE_BN: False
# BACKBONE DESCRIPTION: TYPE: default: ''
BACKBONE:
# NAME DESCRIPTION: TYPE: default: 'ResNet'
NAME: ResNet
# DEPTH DESCRIPTION: the depth of network for resnet! TYPE: int default: 18
DEPTH: 18
# PRETRAINED DESCRIPTION: if load the official pretrained model or not. TYPE: bool default: False
PRETRAINED: false
#
KERNEL_SIZE: 3
# USE_RELU DESCRIPTION: use relu or not! TYPE: bool default: True
USE_RELU: True
# USE_MAXPOOL DESCRIPTION: use maxpool or not! TYPE: bool default: True
USE_MAXPOOL: false
# FIRST_CONV_STRIDE DESCRIPTION: first conv stride 1 or 2! TYPE: int default: 1
FIRST_CONV_STRIDE: 1
# FIRST_MAX_POOL_STRIDE DESCRIPTION: first max pool stride 1 or 2! TYPE: int default: 1
FIRST_MAX_POOL_STRIDE: 1
# NECK DESCRIPTION: TYPE: default: ''
NECK:
# NAME DESCRIPTION: TYPE: default: 'GlobalAveragePooling'
NAME: GlobalAveragePooling
# DIM DESCRIPTION: GlobalAveragePooling dim! TYPE: int default: 2
DIM: 2
# HEAD DESCRIPTION: TYPE: default: ''
HEAD:
# NAME DESCRIPTION: TYPE: default: 'ClassifierHead'
NAME: ClassifierHead
# DIM DESCRIPTION: representation dim! TYPE: int default: 512
DIM: 512
# NUM_CLASSES DESCRIPTION: number of classes. TYPE: int default: 10
NUM_CLASSES: 10
# DROPOUT_RATE DESCRIPTION: dropout rate, default 0. TYPE: float default: 0.0
DROPOUT_RATE: 0.0
METRIC:
# NAME DESCRIPTION: TYPE: default: 'AccuracyMetric'
NAME: AccuracyMetric
# TOPK DESCRIPTION: topk accuracy! TYPE: int default: 1
TOPK: 1
# LOSS DESCRIPTION: TYPE: default: ''
LOSS:
# NAME DESCRIPTION: TYPE: default: 'CrossEntropy'
NAME: CrossEntropy
# REDUCE DESCRIPTION: reduce is False, returns a loss per batch element instead and ignores :attr: size_average. Default: True TYPE: NoneType default: None
# REDUCE: None
# SIZE_AVERAGE DESCRIPTION: Deprecated (see :attr: reduction). By default,the losses are averaged over each loss element in the batch. Note that forsome losses, there are multiple elements per sample. If the field :attr: size_averageis set to False, the losses are instead summed for each minibatch. Ignoredwhen :attr: reduce is False. Default: True TYPE: NoneType default: None
# SIZE_AVERAGE: None
# IGNORE_INDEX DESCRIPTION: Specifies a target value that is ignoredand does not contribute to the input gradient. When :attr: size_average isTrue, the loss is averaged over non-ignored targets. Note that:attr: ignore_index is only applicable when the target contains class indices. TYPE: int default: -100
# IGNORE_INDEX: -100
# REDUCTION DESCRIPTION: Specifies the reduction to apply to the output:'none' | 'mean' | 'sum'. 'none': no reduction willbe applied, 'mean': the weighted mean of the output is taken,'sum': the output will be summed. Note: :attr: size_averageand :attr:`reduce` are in the process of being deprecated, and inthe meantime, specifying either of those two args will override:attr:`reduction`. Default: 'mean' TYPE: str default: 'mean'
# REDUCTION: mean
# LABEL_SMOOTHING DESCRIPTION: A float in [0.0, 1.0]. Specifies the amountof smoothing when computing the loss, where 0.0 means no smoothing. TYPE: float default: 0.0
# LABEL_SMOOTHING: 0.0
# OPTIMIZER DESCRIPTION: TYPE: default: ''
OPTIMIZER:
# NAME DESCRIPTION: TYPE: default: 'SGD'
NAME: SGD
# LEARNING_RATE DESCRIPTION: the initial learning rate! TYPE: float default: 0.1
LEARNING_RATE: 0.01
# MOMENTUM DESCRIPTION: the momentum! TYPE: int default: 0
MOMENTUM: 0.9
# DAMPENING DESCRIPTION: the dampening! TYPE: int default: 0
DAMPENING: 0
# WEIGHT_DECAY DESCRIPTION: the weight decay! TYPE: int default: 0
WEIGHT_DECAY: 5e-4
# NESTEROV DESCRIPTION: the nesterov! TYPE: bool default: False
NESTEROV: False
# LR_SCHEDULER DESCRIPTION: TYPE: default: ''
LR_SCHEDULER:
# NAME DESCRIPTION: TYPE: default: 'CosineAnnealingLR'
NAME: CosineAnnealingLR
# T_MAX DESCRIPTION: the T max! TYPE: float default: 1.0
T_MAX: 200.0
# ETA_MIN DESCRIPTION: the eta min! TYPE: int default: 0
ETA_MIN: 0
# LAST_EPOCH DESCRIPTION: the last epoch! TYPE: int default: -1
LAST_EPOCH: -1
# METRICS DESCRIPTION: TYPE: default: ''
METRICS:
- # NAME DESCRIPTION: TYPE: default: 'AccuracyMetric'
NAME: AccuracyMetric
# TOPK DESCRIPTION: topk accuracy! TYPE: int default: 1
TOPK: 1
KEYS: ["logits", "label"]
+80
View File
@@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
# Copyright (c) Alibaba, Inc. and its affiliates.
import numpy as np
import torchvision
from scepter.modules.data.dataset.base_dataset import BaseDataset
from scepter.modules.data.dataset.registry import DATASETS
from scepter.modules.utils.config import dict_to_yaml
@DATASETS.register_class()
class ImageClassifyExampleDataset(BaseDataset):
"""
Dataset for image classification wrapper
Args:
json_path (str): json file which contains all instances, should be a list of dict
which contains img_path and gt_label
image_dir (str or None): image directory, if None, img_path in json_path will be considered as absolute path
classes (list[str] or None): image class description
"""
para_dict = {
'DATASET': {
'value': 'cifar10',
'description': 'the public dataset name'
},
'DATA_ROOT': {
'value': '',
'description': 'the download data save path'
}
}
para_dict.update(BaseDataset.para_dict)
def __init__(self, cfg, logger=None):
super(ImageClassifyExampleDataset, self).__init__(cfg, logger=logger)
self.dataset_name = cfg.DATASET
self.data_root = cfg.DATA_ROOT
self.phase = cfg.MODE
if self.dataset_name == 'cifar10':
self.dataset = torchvision.datasets.CIFAR10(
root=self.data_root,
train=self.phase == 'train',
download=True)
def __len__(self) -> int:
return len(self.dataset)
def _get(self, index: int):
img, target = self.dataset.__getitem__(index)
ret = {
'meta': {},
'label': np.asarray(target, dtype=np.int64),
'img': img
}
return ret
def worker_init_fn(self, worker_id, num_workers=1):
super(ImageClassifyExampleDataset,
self).worker_init_fn(worker_id, num_workers=num_workers)
@staticmethod
def get_config_template():
'''
{ "ENV" :
{ "description" : "",
"A" : {
"value": 1.0,
"description": ""
}
}
}
:return:
'''
return dict_to_yaml('modename_DATA',
__class__.__name__,
ImageClassifyExampleDataset.para_dict,
set_name=True)
+7
View File
@@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
# Copyright (c) Alibaba, Inc. and its affiliates.
from scepter.tools.run_train import run
if __name__ == '__main__':
run()