Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0010d4282a | ||
|
|
8a9b791e3f | ||
|
|
ee7fe888f2 | ||
|
|
36b259b4b4 | ||
|
|
92c849412e | ||
|
|
2a7e026f84 | ||
|
|
cdba82baf8 | ||
|
|
565c7957d8 | ||
|
|
e00c23d09a | ||
|
|
bf53829530 | ||
|
|
35aada8ce8 | ||
|
|
d3ce651bf7 | ||
|
|
7a58c91940 | ||
|
|
4e1606af2d | ||
|
|
09459c11b7 | ||
|
|
d9a48268d5 | ||
|
|
9f1847501d | ||
|
|
8214227098 | ||
|
|
2e69b2b116 | ||
|
|
3440ec7c38 | ||
|
|
9999e0e1f9 | ||
|
|
01c03683e8 | ||
|
|
9adb273e4b | ||
|
|
2249ff37c9 | ||
|
|
9a65674797 | ||
|
|
10646eda6b | ||
|
|
3526e1cc47 | ||
|
|
d69979cb5a | ||
|
|
c038beef2b | ||
|
|
ed1afa07e3 | ||
|
|
2d7a0cfb89 | ||
|
|
47c528360d |
@@ -3,14 +3,12 @@
|
|||||||
*.pt
|
*.pt
|
||||||
*.pkl
|
*.pkl
|
||||||
*.ckpt
|
*.ckpt
|
||||||
*.png
|
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
*__pycache__*
|
*__pycache__*
|
||||||
*.cache*
|
*.cache*
|
||||||
*.bin
|
*.bin
|
||||||
*.idea
|
*.idea
|
||||||
*.csv
|
*.csv
|
||||||
#*.txt
|
|
||||||
build
|
build
|
||||||
dist
|
dist
|
||||||
dev
|
dev
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
repos:
|
||||||
|
- repo: https://github.com/pycqa/flake8.git
|
||||||
|
rev: 4.0.0
|
||||||
|
hooks:
|
||||||
|
- id: flake8
|
||||||
|
args: ['--max-line-length=120', '--per-file-ignores=__init__.py:F401']
|
||||||
|
- repo: https://github.com/PyCQA/isort.git
|
||||||
|
rev: 4.3.21
|
||||||
|
hooks:
|
||||||
|
- id: isort
|
||||||
|
- repo: https://github.com/pre-commit/mirrors-yapf.git
|
||||||
|
rev: v0.30.0
|
||||||
|
hooks:
|
||||||
|
- id: yapf
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks.git
|
||||||
|
rev: v3.1.0
|
||||||
|
hooks:
|
||||||
|
- id: trailing-whitespace
|
||||||
|
- id: check-yaml
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
- id: requirements-txt-fixer
|
||||||
|
- id: double-quote-string-fixer
|
||||||
|
- id: check-merge-conflict
|
||||||
|
- id: fix-encoding-pragma
|
||||||
|
- id: mixed-line-ending
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
recursive-include scepter *.yaml
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
|||||||
|
After Width: | Height: | Size: 881 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 222 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 103 KiB |
@@ -356,7 +356,7 @@ Used to instantiate a standard logging instance for printing information.
|
|||||||
```python
|
```python
|
||||||
from scepter.utils.logger import get_logger, init_logger
|
from scepter.utils.logger import get_logger, init_logger
|
||||||
|
|
||||||
std_logger = get_logger(name="std_torch")
|
std_logger = get_logger(name="scepter")
|
||||||
init_logger(std_logger, log_file="", dist_launcher="pytorch")
|
init_logger(std_logger, log_file="", dist_launcher="pytorch")
|
||||||
```
|
```
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|||||||
@@ -358,7 +358,7 @@ input_type 一一对应。
|
|||||||
```python
|
```python
|
||||||
from scepter.utils.logger import get_logger, init_logger
|
from scepter.utils.logger import get_logger, init_logger
|
||||||
|
|
||||||
std_logger = get_logger(name="std_torch")
|
std_logger = get_logger(name="scepter")
|
||||||
init_logger(std_logger, log_file="", dist_launcher="pytorch")
|
init_logger(std_logger, log_file="", dist_launcher="pytorch")
|
||||||
```
|
```
|
||||||
<hr/>
|
<hr/>
|
||||||
@@ -914,7 +914,7 @@ data = {
|
|||||||
_model(data)
|
_model(data)
|
||||||
probe = _model.probe_data()
|
probe = _model.probe_data()
|
||||||
for key in probe:
|
for key in probe:
|
||||||
print(key, probe[key].to_log(prefix=f"xxx/dev_easytorch/{key}"))
|
print(key, probe[key].to_log(prefix=f"xxx/{key}"))
|
||||||
```
|
```
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
from .classifier_dataset import ImageClassifyExampleDataset
|
||||||
@@ -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"]
|
||||||
@@ -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)
|
||||||
@@ -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()
|
||||||
@@ -3,16 +3,30 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://img.shields.io/badge/python-%E2%89%A53.8-5be.svg">
|
<img src="https://img.shields.io/badge/python-%E2%89%A53.8-5be.svg">
|
||||||
<img src="https://img.shields.io/badge/pytorch-%E2%89%A51.12%20%7C%20%E2%89%A52.0-orange.svg">
|
<img src="https://img.shields.io/badge/pytorch-%E2%89%A51.12%20%7C%20%E2%89%A52.0-orange.svg">
|
||||||
|
<a href="https://pypi.org/project/scepter/"><img src="https://badge.fury.io/py/scepter.svg"></a>
|
||||||
|
<a href="https://github.com/modelscope/scepter/blob/main/LICENSE"><img src="https://img.shields.io/github/license/modelscope/scepter"></a>
|
||||||
<a href="https://github.com/modelscope/scepter/"><img src="https://img.shields.io/badge/scepter-Build from source-6FEBB9.svg"></a>
|
<a href="https://github.com/modelscope/scepter/"><img src="https://img.shields.io/badge/scepter-Build from source-6FEBB9.svg"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## 📖 Table of Contents
|
## 📖 Table of Contents
|
||||||
- [Introduction](#-introduction)
|
|
||||||
- [News](#-news)
|
- [News](#-news)
|
||||||
- [Installation](#-installation)
|
- [Introduction](#-introduction)
|
||||||
|
- [Installation](#%EF%B8%8F-installation)
|
||||||
- [Getting Started](#-getting-started)
|
- [Getting Started](#-getting-started)
|
||||||
|
- [SCEPTER Studio](#%EF%B8%8F-scepter-studio)
|
||||||
|
- [Gallery](#%EF%B8%8F-gallery)
|
||||||
|
- [Features](#-features)
|
||||||
- [Learn More](#-learn-more)
|
- [Learn More](#-learn-more)
|
||||||
- [License](#license)
|
- [License](#license)
|
||||||
|
- [Acknowledgement](#acknowledgement)
|
||||||
|
|
||||||
|
## 🎉 News
|
||||||
|
- [2024.03]: We optimize the training UI and checkpoint management. New [LAR-Gen](https://arxiv.org/abs/2403.19534) model has been added on SCEPTER Studio, supporting `zoom-out`, `virtual try on`, `inpainting`.
|
||||||
|
- [2024.02]: We release new SCEdit controllable image synthesis models for SD v2.1 and SD XL. Multiple strategies applied to accelerate inference time for SCEPTER Studio.
|
||||||
|
- [2024.01]: We release **SCEPTER Studio**, an integrated toolkit for data management, model training and inference based on [Gradio](https://www.gradio.app/).
|
||||||
|
- [2024.01]: [SCEdit](https://arxiv.org/abs/2312.11392) support controllable image synthesis for training and inference.
|
||||||
|
- [2023.12]: We propose [SCEdit](https://arxiv.org/abs/2312.11392), an efficient and controllable generation framework.
|
||||||
|
- [2023.12]: We release [🪄SCEPTER](https://github.com/modelscope/scepter/) library.
|
||||||
|
|
||||||
## 📝 Introduction
|
## 📝 Introduction
|
||||||
|
|
||||||
@@ -20,24 +34,24 @@ SCEPTER is an open-source code repository dedicated to generative training, fine
|
|||||||
|
|
||||||
Main Feature:
|
Main Feature:
|
||||||
|
|
||||||
- Training:
|
- Task:
|
||||||
- distribute: DDP / FSDP / FairScale
|
- Text-to-image generation
|
||||||
- Inference
|
- Controllable image synthesis
|
||||||
- text-to-image generation
|
- Image editing
|
||||||
- controllable image synthesis (TODO)
|
- Training / Inference:
|
||||||
- Deploy-Gradio (TODO)
|
- Distribute: DDP / FSDP / FairScale / Xformers
|
||||||
- fine-tuning
|
- File system: Local / Http / OSS / Modelscope
|
||||||
- inference
|
- Deploy:
|
||||||
|
- Data management
|
||||||
|
- Training
|
||||||
|
- Inference
|
||||||
|
|
||||||
Currently supported approches (and counting):
|
Currently supported approaches (and counting):
|
||||||
|
|
||||||
1. SD Series: [Stable Diffusion v1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) / [Stable Diffusion v2.1](https://huggingface.co/runwayml/stable-diffusion-v1-5) / [Stable Diffusion XL](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)
|
1. SD Series: [Stable Diffusion v1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) / [Stable Diffusion v2.1](https://huggingface.co/runwayml/stable-diffusion-v1-5) / [Stable Diffusion XL](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)
|
||||||
2. SCEdit: [SCEdit: Efficient and Controllable Image Diffusion Generation via Skip Connection Editing](https://arxiv.org/abs/2312.11392) [](https://arxiv.org/abs/2312.11392) [](https://scedit.github.io/)
|
2. SCEdit(CVPR2024): [SCEdit: Efficient and Controllable Image Diffusion Generation via Skip Connection Editing](https://arxiv.org/abs/2312.11392) [](https://arxiv.org/abs/2312.11392) [](https://scedit.github.io/)
|
||||||
3. Res-Tuning(TODO): [Res-Tuning: A Flexible and Efficient Tuning Paradigm via Unbinding Tuner from Backbone](https://arxiv.org/abs/2310.19859) [](https://arxiv.org/abs/2310.19859) [](https://res-tuning.github.io/)
|
3. Res-Tuning(NeurIPS2023 TODO): [Res-Tuning: A Flexible and Efficient Tuning Paradigm via Unbinding Tuner from Backbone](https://arxiv.org/abs/2310.19859) [](https://arxiv.org/abs/2310.19859) [](https://res-tuning.github.io/)
|
||||||
|
4. LAR-Gen: [Locate, Assign, Refine: Taming Customized Image Inpainting with Text-Subject Guidance](https://arxiv.org/abs/2403.19534) [](https://arxiv.org/abs/2403.19534) [](https://ali-vilab.github.io/largen-page/)
|
||||||
## 🎉 News
|
|
||||||
- [2023.12]: We propose [SCEdit](https://arxiv.org/abs/2312.11392), an efficient and controllable generation framework.
|
|
||||||
- [2023.12]: We release [🪄SCEPTER](https://github.com/modelscope/scepter/) library.
|
|
||||||
|
|
||||||
## 🛠️ Installation
|
## 🛠️ Installation
|
||||||
|
|
||||||
@@ -47,18 +61,23 @@ Currently supported approches (and counting):
|
|||||||
conda env create -f environment.yaml
|
conda env create -f environment.yaml
|
||||||
conda activate scepter
|
conda activate scepter
|
||||||
```
|
```
|
||||||
|
- We recommend installing the specific version of PyTorch and accelerate toolbox [xFormers](https://pypi.org/project/xformers/). You can install these recommended version by pip:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
pip install -r requirements/recommended.txt
|
||||||
|
```
|
||||||
|
|
||||||
- Install SCEPTER by the `pip` command:
|
- Install SCEPTER by the `pip` command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
pip install -e .
|
pip install scepter
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🚀 Getting Started
|
## 🚀 Getting Started
|
||||||
|
|
||||||
### Dataset
|
### Dataset
|
||||||
|
|
||||||
#### Text-to-Image generation
|
#### Modelscope Format
|
||||||
|
|
||||||
We use a [custom-stylized dataset](https://modelscope.cn/datasets/damo/style_custom_dataset/summary), which included classes 3D, anime, flat illustration, oil painting, sketch, and watercolor, each with 30 image-text pairs.
|
We use a [custom-stylized dataset](https://modelscope.cn/datasets/damo/style_custom_dataset/summary), which included classes 3D, anime, flat illustration, oil painting, sketch, and watercolor, each with 30 image-text pairs.
|
||||||
|
|
||||||
@@ -69,54 +88,301 @@ ms_train_dataset = MsDataset.load('style_custom_dataset', namespace='damo', subs
|
|||||||
print(next(iter(ms_train_dataset)))
|
print(next(iter(ms_train_dataset)))
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### CSV Format
|
||||||
|
|
||||||
|
For the data format used by SCEPTER Studio, please refer to [3D_example_csv.zip](https://modelscope.cn/api/v1/models/damo/scepter/repo?Revision=master&FilePath=datasets/3D_example_csv.zip).
|
||||||
|
|
||||||
|
#### TXT Format
|
||||||
|
|
||||||
|
To facilitate starting training in command-line mode, you can use a dataset in text format, please refer to [3D_example_txt.zip](https://modelscope.cn/api/v1/models/damo/scepter/repo?Revision=master&FilePath=datasets/3D_example_txt.zip)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mkdir -p cache/datasets/ && wget 'https://modelscope.cn/api/v1/models/damo/scepter_scedit/repo?Revision=master&FilePath=dataset/3D_example_txt.zip' -O cache/datasets/3D_example_txt.zip && unzip cache/datasets/3D_example_txt.zip -d cache/datasets/ && rm cache/datasets/3D_example_txt.zip
|
||||||
|
```
|
||||||
|
|
||||||
### Training
|
### Training
|
||||||
|
|
||||||
#### Text-to-Image generation
|
We provide a framework for training and inference, so the script below is just for illustration purposes. To achieve better results, you can modify the corresponding parameters as needed.
|
||||||
|
|
||||||
|
#### Text-to-Image Generation
|
||||||
|
|
||||||
|
- SCEdit
|
||||||
|
```python
|
||||||
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/t2i/sd15_512_sce_t2i.yaml # SD v1.5
|
||||||
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/t2i/sd21_768_sce_t2i.yaml # SD v2.1
|
||||||
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/t2i/sdxl_1024_sce_t2i.yaml # SD XL
|
||||||
|
```
|
||||||
|
|
||||||
|
- Existing Tuning Strategies
|
||||||
|
```python
|
||||||
|
python scepter/tools/run_train.py --cfg scepter/methods/examples/generation/stable_diffusion_1.5_512.yaml # fully-tuning on SD v1.5
|
||||||
|
python scepter/tools/run_train.py --cfg scepter/methods/examples/generation/stable_diffusion_2.1_768_lora.yaml # lora-tuning on SD v2.1
|
||||||
|
```
|
||||||
|
|
||||||
|
- Data Text Format
|
||||||
|
```python
|
||||||
|
# Download the 3D_example_txt.zip as previously mentioned
|
||||||
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/t2i/sdxl_1024_sce_t2i_datatxt.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Controllable Image Synthesis
|
||||||
|
|
||||||
- SCEdit
|
- SCEdit
|
||||||
|
|
||||||
|
The YAML configuration can be modified to combine different base models and conditions. The following is provided as an example.
|
||||||
```python
|
```python
|
||||||
# SD v1.5
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/ctr/sd15_512_sce_ctr_hed.yaml # SD v1.5 + hed
|
||||||
python scepter/tools/run_train.py --cfg scepter/methods/SCEdit/t2i_sd15_512_sce.yaml
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/ctr/sd21_768_sce_ctr_canny.yaml # SD v2.1 + canny
|
||||||
# SD v2.1
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/ctr/sd21_768_sce_ctr_pose.yaml # SD v2.1 + pose
|
||||||
python scepter/tools/run_train.py --cfg scepter/methods/SCEdit/t2i_sd21_768_sce.yaml
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/ctr/sdxl_1024_sce_ctr_depth.yaml # SD XL + depth
|
||||||
# SD XL
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/ctr/sdxl_1024_sce_ctr_color.yaml # SD XL + color
|
||||||
python scepter/tools/run_train.py --cfg scepter/methods/SCEdit/t2i_sdxl_1024_sce.yaml
|
|
||||||
```
|
```
|
||||||
|
|
||||||
- Existing strategies
|
- Data Text Format
|
||||||
```python
|
```python
|
||||||
# fully-tuning on SD v1.5
|
# Download the 3D_example_txt.zip as previously mentioned
|
||||||
python scepter/tools/run_train.py --cfg scepter/methods/examples/generation/stable_diffusion_1.5_512.yaml
|
python scepter/tools/run_train.py --cfg scepter/methods/scedit/ctr/sdxl_1024_sce_ctr_color_datatxt.yaml
|
||||||
# lora-tuning on SD v2.1
|
|
||||||
python scepter/tools/run_train.py --cfg scepter/methods/examples/generation/stable_diffusion_2.1_768_lora.yaml
|
|
||||||
```
|
```
|
||||||
#### Controllable Image Synthesis
|
|
||||||
|
|
||||||
TODO
|
|
||||||
|
|
||||||
### Inference
|
### Inference
|
||||||
|
|
||||||
|
#### Base Model Inference
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# generation on SD v1.5
|
python scepter/tools/run_inference.py --cfg scepter/methods/examples/generation/stable_diffusion_1.5_512.yaml --prompt 'a cute dog' --save_folder 'inference' # generation on SD v1.5
|
||||||
python scepter/tools/run_inference.py --cfg scepter/methods/examples/generation/stable_diffusion_1.5_512.yaml --prompt 'a cute dog' --save_folder 'inference'
|
python scepter/tools/run_inference.py --cfg scepter/methods/examples/generation/stable_diffusion_2.1_768.yaml --prompt 'a cute dog' --save_folder 'inference' # generation on SD v2.1
|
||||||
# generation on SD v2.1
|
python scepter/tools/run_inference.py --cfg scepter/methods/examples/generation/stable_diffusion_xl_1024.yaml --prompt 'a cute dog' --save_folder 'inference' # generation on SD XL
|
||||||
python scepter/tools/run_inference.py --cfg scepter/methods/examples/generation/stable_diffusion_2.1_768.yaml --prompt 'a cute dog' --save_folder 'inference'
|
```
|
||||||
# generation on SD XL
|
|
||||||
python scepter/tools/run_inference.py --cfg scepter/methods/examples/generation/stable_diffusion_xl_1024.yaml --prompt 'a cute dog' --save_folder 'inference'
|
#### Fine-tuned Model Inference
|
||||||
|
|
||||||
|
```python
|
||||||
|
python scepter/tools/run_inference.py --cfg scepter/methods/scedit/t2i/sd15_512_sce_t2i_swift.yaml --pretrained_model 'cache/save_data/sd15_512_sce_t2i_swift/checkpoints/ldm_step-100.pth' --prompt 'A close up of a small rabbit wearing a hat and scarf' --save_folder 'trained_test_prompt_rabbit'
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Controllable Image Synthesis Inference
|
||||||
|
|
||||||
|
- SCEdit
|
||||||
|
```python
|
||||||
|
python scepter/tools/run_inference.py --cfg scepter/methods/scedit/ctr/sd21_768_sce_ctr_canny.yaml --num_samples 1 --prompt 'a single flower is shown in front of a tree' --save_folder 'test_flower_canny' --image_size 768 --task control --image 'asset/images/flower.jpg' --control_mode canny --pretrained_model ms://damo/scepter_scedit@controllable_model/SD2.1/canny_control/0_SwiftSCETuning/pytorch_model.bin # canny
|
||||||
|
python scepter/tools/run_inference.py --cfg scepter/methods/scedit/ctr/sd21_768_sce_ctr_pose.yaml --num_samples 1 --prompt 'super mario' --save_folder 'test_mario_pose' --image_size 768 --task control --image 'asset/images/pose_source.png' --control_mode source --pretrained_model ms://damo/scepter_scedit@controllable_model/SD2.1/pose_control/0_SwiftSCETuning/pytorch_model.bin # pose
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customize Modules
|
||||||
|
Refer to `example`, build the modules of your task in `example/{task}`.
|
||||||
|
```python
|
||||||
|
cd example/classifier
|
||||||
|
python run.py --cfg classifier.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 🖥️ SCEPTER Studio
|
||||||
|
|
||||||
|
### Launch
|
||||||
|
|
||||||
|
To fully experience **SCEPTER Studio**, you can launch the following command line:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
pip install scepter
|
||||||
|
python -m scepter.tools.webui
|
||||||
|
```
|
||||||
|
or run after clone repo code
|
||||||
|
```shell
|
||||||
|
git clone https://github.com/modelscope/scepter.git
|
||||||
|
PYTHONPATH=. python scepter/tools/webui.py --cfg scepter/methods/studio/scepter_ui.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
The startup of **SCEPTER Studio** eliminates the need for manual downloading and organizing of models; it will automatically load the corresponding models and store them in a local directory.
|
||||||
|
Depending on the network and hardware situation, the initial startup usually requires 15-60 minutes, primarily involving the download and processing of SDv1.5, SDv2.1, and SDXL models.
|
||||||
|
Therefore, subsequent startups will become much faster (about one minute) as downloading is no longer required.
|
||||||
|
|
||||||
|
* LAR-Gen: we release `zoom-out`, `virtual try on`, `inpainting(text guided)`, `inpainting(text + reference image guided)` image editing capabilities.
|
||||||
|
Please note that the **Data Preprocess** button must be clicked before clicking the **Generate** button.
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://raw.githubusercontent.com/ali-vilab/largen-page/main/public/images/largen.gif">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
### Modelscope Studio
|
||||||
|
|
||||||
|
We deploy a work studio on Modelscope that includes only the inference tab, please refer to [ms_scepter_studio](https://www.modelscope.cn/studios/damo/scepter_studio/summary)
|
||||||
|
|
||||||
|
## 🖼️ Gallery
|
||||||
|
|
||||||
|
### LAR-Gen: Zoom Out
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Origin Image</strong><br>Prompt: a temple on fire</td>
|
||||||
|
<td><strong>Zoom-Out</strong><br>CenterAround:0.75</td>
|
||||||
|
<td><strong>Zoom-Out</strong><br>CenterAround:0.75</td>
|
||||||
|
<td><strong>Zoom-Out</strong><br>CenterAround:0.75</td>
|
||||||
|
<td><strong>Zoom-Out</strong><br>CenterAround:0.75</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src="asset/images/zoom_out/ex1_scene_im.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/zoom_out/ex1_zoom_out1.jpg" width="240"></td>
|
||||||
|
<td><img src="./asset/images/zoom_out/ex1_zoom_out2.jpg" width="240"></td>
|
||||||
|
<td><img src="./asset/images/zoom_out/ex1_zoom_out3.jpg" width="240"></td>
|
||||||
|
<td><img src="./asset/images/zoom_out/ex1_zoom_out4.jpg" width="240"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### LAR-Gen: Virtual Try-on
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Model Image</strong></td>
|
||||||
|
<td><strong>Model Mask</strong></td>
|
||||||
|
<td><strong>Clothing Image</strong></td>
|
||||||
|
<td><strong>Clothing Mask</strong></td>
|
||||||
|
<td><strong>Try-on Output</strong></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src="asset/images/virtual_try_on/model.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/virtual_try_on/ex2_scene_mask.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/virtual_try_on/tshirt.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/virtual_try_on/ex2_subject_mask.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/virtual_try_on/try_on_out.jpg" width="240"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### LAR-Gen: Inpainting (Text guided)
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Origin Image</strong><br>Prompt: a blue and white porcelain</td>
|
||||||
|
<td><strong>Inpainting Mask1</strong></td>
|
||||||
|
<td><strong>Inpainting Output1</strong></td>
|
||||||
|
<td><strong>Inpainting Mask2</strong><br>Prompt: a clock</td>
|
||||||
|
<td><strong>Inpainting Output2</strong></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src="asset/images/inpainting_text/ex3_scene_im.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/inpainting_text/ex3_scene_mask.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/inpainting_text/inpainting_text.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/inpainting_text/ex3_scene_mask2.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/inpainting_text/inpainting_text2.jpg" width="240"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### LAR-Gen: Inpainting (Text and Subject guided)
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Origin Image</strong><br>Prompt: a dog wearing sunglasses</td>
|
||||||
|
<td><strong>Origin Mask</strong></td>
|
||||||
|
<td><strong>Reference Image</strong></td>
|
||||||
|
<td><strong>Reference Mask</strong></td>
|
||||||
|
<td><strong>Inpainting Output</strong></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src="asset/images/inpainting_text_ref/ex4_scene_im.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/inpainting_text_ref/ex4_scene_mask.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/inpainting_text_ref/ex4_subject_im.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/inpainting_text_ref/ex4_subject_mask.jpg" width="240"></td>
|
||||||
|
<td><img src="asset/images/inpainting_text_ref/inpainting_text_ref.jpg" width="240"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### Dragon Year Special: Dragon Tuner
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Gold Dragon Tuner</strong></td>
|
||||||
|
<td><strong>Sloppy Dragon Tuner</strong></td>
|
||||||
|
<td><strong>Red Dragon Tuner</strong><br> + Papercraft Mantra</td>
|
||||||
|
<td><strong>Azure Dragon Tuner</strong><br> + Pose Control</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src="https://github.com/hanzhn/datas/blob/main/scepter/readme/tuner_gold_dragon.jpeg?raw=true" width="300"></td>
|
||||||
|
<td><img src="https://github.com/hanzhn/datas/blob/main/scepter/readme/tuner_sloppy_dragon.jpeg?raw=true" width="300"></td>
|
||||||
|
<td><img src="https://github.com/hanzhn/datas/blob/main/scepter/readme/tuner_mantra_papercraft_dragon.jpeg?raw=true" width="300"></td>
|
||||||
|
<td><img src="https://github.com/hanzhn/datas/blob/main/scepter/readme/tuner_pose.jpeg?raw=true" width="300"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### Text Effect Image
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><strong>Conditional Image</strong></td>
|
||||||
|
<td><strong>Midas Control</strong><br>"Race track, top view"</td>
|
||||||
|
<td><strong>Midas Control</strong><br> + Watercolor Mantra<br>"white lilies"</td>
|
||||||
|
<td><strong>Midas Control</strong><br> + Dragon Tuner<br>"Spring Festival, Chinese dragon"</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src="https://github.com/hanzhn/datas/blob/main/scepter/readme/word_condition.png?raw=true" width="300"></td>
|
||||||
|
<td><img src="https://github.com/hanzhn/datas/blob/main/scepter/readme/word_race.jpeg?raw=true" width="300"></td>
|
||||||
|
<td><img src="https://github.com/hanzhn/datas/blob/main/scepter/readme/word_lilies.jpeg?raw=true" width="300"></td>
|
||||||
|
<td><img src="https://github.com/hanzhn/datas/blob/main/scepter/readme/word_festival.jpeg?raw=true" width="300"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## ✨ Features
|
||||||
|
|
||||||
|
### Text-to-Image Generation
|
||||||
|
|
||||||
|
| **Model** | **SCEdit** | **Full** | **LoRA** |
|
||||||
|
|:---------:|:----------:|:--------:|:--------:|
|
||||||
|
| SD 1.5 | 🪄 | ✅ | ✅ |
|
||||||
|
| SD 2.1 | 🪄 | ✅ | ✅ |
|
||||||
|
| SD XL | 🪄 | ✅ | ✅ |
|
||||||
|
|
||||||
|
### Controllable Image Synthesis
|
||||||
|
- SCEdit
|
||||||
|
|
||||||
|
| **Model** | **Canny** | **HED** | **Depth** | **Pose** | **Color** |
|
||||||
|
|:---------:|:---------:|:-------:|:---------:|:--------:|:---------:|
|
||||||
|
| SD 1.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||||
|
| SD 2.1 | 🪄 | 🪄 | 🪄 | 🪄 | 🪄 |
|
||||||
|
| SD XL | 🪄 | 🪄 | 🪄 | 🪄 | 🪄 |
|
||||||
|
|
||||||
|
### Image Editing
|
||||||
|
- LAR-Gen
|
||||||
|
|
||||||
|
| **Model** | **Locate** | **Assign** | **Refine** |
|
||||||
|
|:---------:|:----------:|:----------:|:----------:|
|
||||||
|
| SD XL | 🪄 | 🪄 | ⏳ |
|
||||||
|
|
||||||
|
### Model URL
|
||||||
|
|
||||||
|
- ✅ indicates support for both training and inference.
|
||||||
|
- 🪄 denotes that the model has been published.
|
||||||
|
- ⏳ denotes that the module has not been integrated currently.
|
||||||
|
- More models will be released in the future.
|
||||||
|
|
||||||
|
| Model | URL |
|
||||||
|
|--------|------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| SCEdit | [ModelScope](https://modelscope.cn/models/iic/scepter_scedit/summary) [HuggingFace](https://huggingface.co/scepter-studio/scepter_scedit) |
|
||||||
|
| LAR-Gen | [ModelScope](https://www.modelscope.cn/models/iic/LARGEN/summary) |
|
||||||
|
|
||||||
|
PS: Scripts running within the SCEPTER framework will automatically fetch and load models based on the required dependency files, eliminating the need for manual downloads.
|
||||||
|
|
||||||
|
|
||||||
## 🔍 Learn More
|
## 🔍 Learn More
|
||||||
|
|
||||||
|
- [Alibaba TongYi Vision Intelligence Lab](https://github.com/ali-vilab)
|
||||||
|
|
||||||
|
Discover more about open-source projects on image generation, video generation, and editing tasks.
|
||||||
|
|
||||||
- [ModelScope library](https://github.com/modelscope/modelscope/)
|
- [ModelScope library](https://github.com/modelscope/modelscope/)
|
||||||
|
|
||||||
ModelScope Library is the model library of ModelScope project, which contains a large number of popular models.
|
ModelScope Library is the model library of ModelScope project, which contains a large number of popular models.
|
||||||
|
|
||||||
- [Alibaba TongYi Vision Intelligence Lab](https://github.com/damo-vilab)
|
- [SWIFT library](https://github.com/modelscope/swift/)
|
||||||
|
|
||||||
|
SWIFT (Scalable lightWeight Infrastructure for Fine-Tuning) is an extensible framwork designed to faciliate lightweight model fine-tuning and inference.
|
||||||
|
|
||||||
|
## BibTeX
|
||||||
|
If our work is useful for your research, please consider citing:
|
||||||
|
```bibtex
|
||||||
|
@misc{scepter,
|
||||||
|
title = {SCEPTER, https://github.com/modelscope/scepter},
|
||||||
|
author = {SCEPTER},
|
||||||
|
year = {2023}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Discover more about open-source projects on image generation, video generation, and editing tasks.
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
This project is licensed under the [Apache License (Version 2.0)](https://github.com/modelscope/modelscope/blob/master/LICENSE).
|
This project is licensed under the [Apache License (Version 2.0)](https://github.com/modelscope/modelscope/blob/master/LICENSE).
|
||||||
|
|
||||||
|
## Acknowledgement
|
||||||
|
Thanks to [Stability-AI](https://github.com/Stability-AI), [SWIFT library](https://github.com/modelscope/swift/) and [Fooocus](https://github.com/lllyasviel/Fooocus) for their awesome work.
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
-r requirements/framework.txt
|
-r requirements/framework.txt
|
||||||
|
-r requirements/scepter_studio.txt
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
|
albumentations
|
||||||
|
bezier
|
||||||
einops
|
einops
|
||||||
modelscope
|
modelscope
|
||||||
ms_swift==1.5.2
|
ms-swift>=1.5.2
|
||||||
numpy
|
numpy
|
||||||
open_clip_torch
|
open_clip_torch
|
||||||
opencv-python
|
opencv-python
|
||||||
opencv_transforms>=0.0.6
|
opencv_transforms>=0.0.6
|
||||||
oss2>=2.15.0
|
oss2>=2.15.0
|
||||||
|
pycocotools
|
||||||
pyyaml>=5.3.1
|
pyyaml>=5.3.1
|
||||||
torchvision==0.15.2
|
scikit-image
|
||||||
|
torchsde
|
||||||
transformers
|
transformers
|
||||||
xformers>=0.0.21
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
git+https://github.com/cocodataset/panopticapi.git
|
||||||
|
torch==2.0.1
|
||||||
|
torchvision==0.15.2
|
||||||
|
xformers==0.0.21
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
gradio>=3.47.1,<4.0.0
|
||||||
|
imagehash
|
||||||
|
psutil
|
||||||
@@ -15,7 +15,7 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/sd15_512_full
|
WORK_DIR: ./cache/save_data/sd15_512_full
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
@@ -117,7 +117,7 @@ SOLVER:
|
|||||||
SAMPLE_STEPS: 50
|
SAMPLE_STEPS: 50
|
||||||
SEED: 2023
|
SEED: 2023
|
||||||
GUIDE_SCALE: 7.5
|
GUIDE_SCALE: 7.5
|
||||||
GUIDE_RESCALE:
|
GUIDE_RESCALE: 0.5
|
||||||
DISCRETIZATION: trailing
|
DISCRETIZATION: trailing
|
||||||
IMAGE_SIZE: [512, 512]
|
IMAGE_SIZE: [512, 512]
|
||||||
RUN_TRAIN_N: False
|
RUN_TRAIN_N: False
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/sd15_512_lora
|
WORK_DIR: ./cache/save_data/sd15_512_lora
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
NAME: "ModelscopeFs"
|
NAME: "ModelscopeFs"
|
||||||
TEMP_DIR: "./cache/data"
|
TEMP_DIR: "./cache/data"
|
||||||
TUNER:
|
TUNER:
|
||||||
-
|
-
|
||||||
NAME: SwiftLoRA
|
NAME: SwiftLoRA
|
||||||
R: 64
|
R: 64
|
||||||
@@ -125,7 +125,7 @@ SOLVER:
|
|||||||
SAMPLE_STEPS: 50
|
SAMPLE_STEPS: 50
|
||||||
SEED: 2023
|
SEED: 2023
|
||||||
GUIDE_SCALE: 7.5
|
GUIDE_SCALE: 7.5
|
||||||
GUIDE_RESCALE:
|
GUIDE_RESCALE: 0.5
|
||||||
DISCRETIZATION: trailing
|
DISCRETIZATION: trailing
|
||||||
IMAGE_SIZE: [512, 512]
|
IMAGE_SIZE: [512, 512]
|
||||||
RUN_TRAIN_N: False
|
RUN_TRAIN_N: False
|
||||||
|
|||||||
@@ -0,0 +1,214 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 2000
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sd21_512_full
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusion
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-2-1-base@v2-1_512-ema-pruned.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 1024
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: OpenClipTokenizer
|
||||||
|
LENGTH: 77
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenOpenCLIPEmbedder
|
||||||
|
ARCH: ViT-H-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
LAYER: penultimate
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE:
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [512, 512]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.0064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 512
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 512
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_REMAP_KEYS: { 'Image': 'Target:FILE' }
|
||||||
|
MS_DATASET_SPLIT: test_short
|
||||||
|
OUTPUT_SIZE: [512, 512]
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
-
|
||||||
|
NAME: Select
|
||||||
|
KEYS: ['prompt']
|
||||||
|
META_KEYS: ['image_size']
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 1000
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,223 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 2000
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sd21_512_lora
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
TUNER:
|
||||||
|
-
|
||||||
|
NAME: SwiftLoRA
|
||||||
|
R: 64
|
||||||
|
LORA_ALPHA: 64
|
||||||
|
LORA_DROPOUT: 0.0
|
||||||
|
BIAS: "none"
|
||||||
|
TARGET_MODULES: model.*(to_q|to_k|to_v|to_out.0|net.0.proj|net.2)$
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusion
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-2-1-base@v2-1_512-ema-pruned.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 1024
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: OpenClipTokenizer
|
||||||
|
LENGTH: 77
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenOpenCLIPEmbedder
|
||||||
|
ARCH: ViT-H-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
LAYER: penultimate
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE:
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [512, 512]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.0064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 512
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 512
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_REMAP_KEYS: { 'Image': 'Target:FILE' }
|
||||||
|
MS_DATASET_SPLIT: test_short
|
||||||
|
OUTPUT_SIZE: [512, 512]
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
-
|
||||||
|
NAME: Select
|
||||||
|
KEYS: ['prompt']
|
||||||
|
META_KEYS: ['image_size']
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 1000
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -15,7 +15,7 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/sd21_768_full
|
WORK_DIR: ./cache/save_data/sd21_768_full
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
@@ -113,7 +113,7 @@ SOLVER:
|
|||||||
SAMPLE_STEPS: 50
|
SAMPLE_STEPS: 50
|
||||||
SEED: 2023
|
SEED: 2023
|
||||||
GUIDE_SCALE: 7.5
|
GUIDE_SCALE: 7.5
|
||||||
GUIDE_RESCALE:
|
GUIDE_RESCALE: 0.5
|
||||||
DISCRETIZATION: trailing
|
DISCRETIZATION: trailing
|
||||||
IMAGE_SIZE: [768, 768]
|
IMAGE_SIZE: [768, 768]
|
||||||
RUN_TRAIN_N: False
|
RUN_TRAIN_N: False
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/sd21_768_lora
|
WORK_DIR: ./cache/save_data/sd21_768_lora
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
NAME: "ModelscopeFs"
|
NAME: "ModelscopeFs"
|
||||||
TEMP_DIR: "./cache/data"
|
TEMP_DIR: "./cache/data"
|
||||||
#
|
#
|
||||||
TUNER:
|
TUNER:
|
||||||
-
|
-
|
||||||
NAME: SwiftLoRA
|
NAME: SwiftLoRA
|
||||||
R: 64
|
R: 64
|
||||||
@@ -122,7 +122,7 @@ SOLVER:
|
|||||||
SAMPLE_STEPS: 50
|
SAMPLE_STEPS: 50
|
||||||
SEED: 2023
|
SEED: 2023
|
||||||
GUIDE_SCALE: 7.5
|
GUIDE_SCALE: 7.5
|
||||||
GUIDE_RESCALE:
|
GUIDE_RESCALE: 0.5
|
||||||
DISCRETIZATION: trailing
|
DISCRETIZATION: trailing
|
||||||
IMAGE_SIZE: [768, 768]
|
IMAGE_SIZE: [768, 768]
|
||||||
RUN_TRAIN_N: False
|
RUN_TRAIN_N: False
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/sdxl_1024_full
|
WORK_DIR: ./cache/save_data/sdxl_1024_full
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
@@ -120,7 +120,7 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: FrozenOpenCLIPEmbedder2
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
ARCH: ViT-bigG-14
|
ARCH: ViT-bigG-14
|
||||||
PRETRAINED_MODEL:
|
PRETRAINED_MODEL:
|
||||||
@@ -133,21 +133,21 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "original_size_as_tuple" ]
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "crop_coords_top_left" ]
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
@@ -200,21 +200,21 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "original_size_as_tuple" ]
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "crop_coords_top_left" ]
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
@@ -287,8 +287,8 @@ SOLVER:
|
|||||||
KEYS: [ 'img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
KEYS: [ 'img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
META_KEYS: [ 'data_key', 'img_path' ]
|
META_KEYS: [ 'data_key', 'img_path' ]
|
||||||
- NAME: Rename
|
- NAME: Rename
|
||||||
IN_KEYS: [ 'img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
INPUT_KEY: [ 'img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
OUT_KEYS: [ 'image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
OUTPUT_KEY: [ 'image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
#
|
#
|
||||||
EVAL_DATA:
|
EVAL_DATA:
|
||||||
NAME: ImageTextPairMSDataset
|
NAME: ImageTextPairMSDataset
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/sdxl_1024_lora
|
WORK_DIR: ./cache/save_data/sdxl_1024_lora
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
NAME: "ModelscopeFs"
|
NAME: "ModelscopeFs"
|
||||||
TEMP_DIR: "./cache/data"
|
TEMP_DIR: "./cache/data"
|
||||||
#
|
#
|
||||||
TUNER:
|
TUNER:
|
||||||
-
|
-
|
||||||
NAME: SwiftLoRA
|
NAME: SwiftLoRA
|
||||||
R: 64
|
R: 64
|
||||||
@@ -129,7 +129,7 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: FrozenOpenCLIPEmbedder2
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
ARCH: ViT-bigG-14
|
ARCH: ViT-bigG-14
|
||||||
PRETRAINED_MODEL:
|
PRETRAINED_MODEL:
|
||||||
@@ -142,21 +142,21 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "original_size_as_tuple" ]
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "crop_coords_top_left" ]
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
@@ -209,21 +209,21 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "original_size_as_tuple" ]
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "crop_coords_top_left" ]
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
@@ -296,8 +296,8 @@ SOLVER:
|
|||||||
KEYS: [ 'img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
KEYS: [ 'img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
META_KEYS: [ 'data_key', 'img_path' ]
|
META_KEYS: [ 'data_key', 'img_path' ]
|
||||||
- NAME: Rename
|
- NAME: Rename
|
||||||
IN_KEYS: [ 'img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
INPUT_KEY: [ 'img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
OUT_KEYS: [ 'image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
OUTPUT_KEY: [ 'image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
#
|
#
|
||||||
EVAL_DATA:
|
EVAL_DATA:
|
||||||
NAME: ImageTextPairMSDataset
|
NAME: ImageTextPairMSDataset
|
||||||
@@ -334,4 +334,4 @@ SOLVER:
|
|||||||
#
|
#
|
||||||
EVAL_HOOKS:
|
EVAL_HOOKS:
|
||||||
- NAME: ProbeDataHook
|
- NAME: ProbeDataHook
|
||||||
PROB_INTERVAL: 100
|
PROB_INTERVAL: 100
|
||||||
|
|||||||
@@ -0,0 +1,265 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 200
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sd15_512_sce_ctr_hed
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "control_blocks" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionSCEControl
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-v1-5@v1-5-pruned-emaonly.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS: 8
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 768
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: False
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: ClipTokenizer
|
||||||
|
PRETRAINED_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
LENGTH: 77
|
||||||
|
CLEAN: True
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
FREEZE: True
|
||||||
|
LAYER: last
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
CONTROL_MODEL:
|
||||||
|
NAME: CSCTuners
|
||||||
|
PRE_HINT_IN_CHANNELS: 3
|
||||||
|
PRE_HINT_OUT_CHANNELS: 256
|
||||||
|
DENSE_HINT_KERNAL: 3
|
||||||
|
SCALE: 1.0
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
CONTROL_ANNO:
|
||||||
|
NAME: HedAnnotator
|
||||||
|
PRETRAINED_MODEL: ms://damo/scepter_scedit@annotator/ckpts/ControlNetHED.pth
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [512, 512]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 768
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 768
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 10
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 768
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 768
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 100
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,264 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 200
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sd21_768_sce_ctr_canny
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "control_blocks" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionSCEControl
|
||||||
|
PARAMETERIZATION: v
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-2-1@v2-1_768-ema-pruned.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 1024
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: OpenClipTokenizer
|
||||||
|
LENGTH: 77
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenOpenCLIPEmbedder
|
||||||
|
ARCH: ViT-H-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
LAYER: penultimate
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
CONTROL_MODEL:
|
||||||
|
NAME: CSCTuners
|
||||||
|
PRE_HINT_IN_CHANNELS: 3
|
||||||
|
PRE_HINT_OUT_CHANNELS: 256
|
||||||
|
DENSE_HINT_KERNAL: 3
|
||||||
|
SCALE: 1.0
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
CONTROL_ANNO:
|
||||||
|
NAME: CannyAnnotator
|
||||||
|
LOW_THRESHOLD: 100
|
||||||
|
HIGH_THRESHOLD: 200
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [768, 768]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 768
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 768
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 10
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 768
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 768
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 100
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,264 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 200
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sd21_768_sce_ctr_pose
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "control_blocks" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionSCEControl
|
||||||
|
PARAMETERIZATION: v
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-2-1@v2-1_768-ema-pruned.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 1024
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: OpenClipTokenizer
|
||||||
|
LENGTH: 77
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenOpenCLIPEmbedder
|
||||||
|
ARCH: ViT-H-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
LAYER: penultimate
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
CONTROL_MODEL:
|
||||||
|
NAME: CSCTuners
|
||||||
|
PRE_HINT_IN_CHANNELS: 3
|
||||||
|
PRE_HINT_OUT_CHANNELS: 256
|
||||||
|
DENSE_HINT_KERNAL: 3
|
||||||
|
SCALE: 1.0
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
CONTROL_ANNO:
|
||||||
|
NAME: OpenposeAnnotator
|
||||||
|
BODY_MODEL_PATH: ms://damo/scepter_scedit@annotator/ckpts/body_pose_model.pth
|
||||||
|
HAND_MODEL_PATH: ms://damo/scepter_scedit@annotator/ckpts/hand_pose_model.pth
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [768, 768]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 768
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 768
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 10
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 768
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 768
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 100
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,378 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 200
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sdxl_1024_sce_ctr_canny
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "control_blocks" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionXLSCEControl
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-xl-base-1.0@sd_xl_base_1.0.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.0120
|
||||||
|
USE_EMA: False
|
||||||
|
LOAD_REFINER: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: [ 1, 2, 10 ]
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
LAYER: hidden
|
||||||
|
LAYER_IDX: 11
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "target_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
REFINER_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 384
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 4
|
||||||
|
CONTEXT_DIM: [ 1280, 1280, 1280, 1280 ]
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2560
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "aesthetic_score" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
CONTROL_MODEL:
|
||||||
|
NAME: CSCTuners
|
||||||
|
PRE_HINT_IN_CHANNELS: 3
|
||||||
|
PRE_HINT_OUT_CHANNELS: 320
|
||||||
|
DENSE_HINT_KERNAL: 3
|
||||||
|
PRE_HINT_DIM_RATIO: 2.0
|
||||||
|
SCALE: 1.0
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
CONTROL_ANNO:
|
||||||
|
NAME: CannyAnnotator
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [1024, 1024]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleResize
|
||||||
|
SIZE: 1024
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleCropXL
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 10
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 1024
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 100
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,379 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 200
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sdxl_1024_sce_ctr_color
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "control_blocks" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionXLSCEControl
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-xl-base-1.0@sd_xl_base_1.0.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.0120
|
||||||
|
USE_EMA: False
|
||||||
|
LOAD_REFINER: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: [ 1, 2, 10 ]
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
LAYER: hidden
|
||||||
|
LAYER_IDX: 11
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "target_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
REFINER_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 384
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 4
|
||||||
|
CONTEXT_DIM: [ 1280, 1280, 1280, 1280 ]
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2560
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "aesthetic_score" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
CONTROL_MODEL:
|
||||||
|
NAME: CSCTuners
|
||||||
|
PRE_HINT_IN_CHANNELS: 3
|
||||||
|
PRE_HINT_OUT_CHANNELS: 320
|
||||||
|
DENSE_HINT_KERNAL: 3
|
||||||
|
PRE_HINT_DIM_RATIO: 2.0
|
||||||
|
SCALE: 1.0
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
CONTROL_ANNO:
|
||||||
|
NAME: ColorAnnotator
|
||||||
|
RATIO: 64
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [1024, 1024]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleResize
|
||||||
|
SIZE: 1024
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleCropXL
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 10
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 1024
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 100
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,405 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 200
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sdxl_1024_sce_ctr_color_datatxt
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "control_blocks" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionXLSCEControl
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-xl-base-1.0@sd_xl_base_1.0.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.0120
|
||||||
|
USE_EMA: False
|
||||||
|
LOAD_REFINER: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: [ 1, 2, 10 ]
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
LAYER: hidden
|
||||||
|
LAYER_IDX: 11
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "target_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
REFINER_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 384
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 4
|
||||||
|
CONTEXT_DIM: [ 1280, 1280, 1280, 1280 ]
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2560
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "aesthetic_score" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
CONTROL_MODEL:
|
||||||
|
NAME: CSCTuners
|
||||||
|
PRE_HINT_IN_CHANNELS: 3
|
||||||
|
PRE_HINT_OUT_CHANNELS: 320
|
||||||
|
DENSE_HINT_KERNAL: 3
|
||||||
|
PRE_HINT_DIM_RATIO: 2.0
|
||||||
|
SCALE: 1.0
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
CONTROL_ANNO:
|
||||||
|
NAME: ColorAnnotator
|
||||||
|
RATIO: 64
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [1024, 1024]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairDataset
|
||||||
|
MODE: train
|
||||||
|
P_ZERO: 0.1
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: LocalFs
|
||||||
|
AUTO_CLEAN: False
|
||||||
|
SAMPLER:
|
||||||
|
NAME: MixtureOfSamplers
|
||||||
|
SUB_SAMPLERS:
|
||||||
|
-
|
||||||
|
NAME: MultiLevelBatchSampler
|
||||||
|
PROB: 1.0
|
||||||
|
IMAGE_SIZE: [ 1024, 1024 ]
|
||||||
|
FIELDS: ["img_path", "width", "height", "prompt"]
|
||||||
|
DELIMITER: '#;#'
|
||||||
|
PATH_PREFIX: cache/datasets/3D_example_txt
|
||||||
|
PROMPT_PREFIX: ''
|
||||||
|
INDEX_FILE: cache/datasets/3D_example_txt/train.txt
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
-
|
||||||
|
NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: FlexibleResize
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: FlexibleCropXL
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
-
|
||||||
|
NAME: ImageToTensor
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: torchvision
|
||||||
|
-
|
||||||
|
NAME: Select
|
||||||
|
KEYS: ['img', 'prompt', 'image_preprocess', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left']
|
||||||
|
META_KEYS: [ 'img_path' ]
|
||||||
|
-
|
||||||
|
NAME: Rename
|
||||||
|
INPUT_KEY: ['img', 'image_preprocess', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left']
|
||||||
|
OUTPUT_KEY: ['image', 'image_preprocess', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left']
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: Text2ImageDataset
|
||||||
|
MODE: eval
|
||||||
|
PROMPT_FILE: cache/datasets/3D_example_txt/train.txt
|
||||||
|
PATH_PREFIX: cache/datasets/3D_example_txt
|
||||||
|
IMAGE_SIZE: [ 1024, 1024 ]
|
||||||
|
FIELDS: ["img_path", "width", "height", "prompt"]
|
||||||
|
DELIMITER: '#;#'
|
||||||
|
PROMPT_PREFIX: ''
|
||||||
|
USE_NUM: 8
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: LocalFs
|
||||||
|
AUTO_CLEAN: False
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
-
|
||||||
|
NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: FlexibleResize
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: FlexibleCenterCrop
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
-
|
||||||
|
NAME: ImageToTensor
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: torchvision
|
||||||
|
-
|
||||||
|
NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
-
|
||||||
|
NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 100
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,379 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 200
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sdxl_1024_sce_ctr_depth
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "control_blocks" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionXLSCEControl
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-xl-base-1.0@sd_xl_base_1.0.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.0120
|
||||||
|
USE_EMA: False
|
||||||
|
LOAD_REFINER: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: [ 1, 2, 10 ]
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
LAYER: hidden
|
||||||
|
LAYER_IDX: 11
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "target_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
REFINER_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 384
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 4
|
||||||
|
CONTEXT_DIM: [ 1280, 1280, 1280, 1280 ]
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2560
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "aesthetic_score" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
CONTROL_MODEL:
|
||||||
|
NAME: CSCTuners
|
||||||
|
PRE_HINT_IN_CHANNELS: 3
|
||||||
|
PRE_HINT_OUT_CHANNELS: 320
|
||||||
|
DENSE_HINT_KERNAL: 3
|
||||||
|
PRE_HINT_DIM_RATIO: 2.0
|
||||||
|
SCALE: 1.0
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
CONTROL_ANNO:
|
||||||
|
NAME: MidasDetector
|
||||||
|
PRETRAINED_MODEL: ms://damo/scepter_scedit@annotator/ckpts/dpt_hybrid-midas-501f0c75.pt
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [1024, 1024]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleResize
|
||||||
|
SIZE: 1024
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleCropXL
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 10
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 1024
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ToNumpy
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image_preprocess' ]
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'image_preprocess' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'image_preprocess' ]
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt', 'image_preprocess' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 100
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,228 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 2000
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sd15_512_sce_t2i
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "lsc_identity" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionSCETuning
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-v1-5@v1-5-pruned-emaonly.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
# DEFAULT_N_PROMPT: 'lowres, error, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, username, watermark, signature'
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS: 8
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 768
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: False
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: ClipTokenizer
|
||||||
|
PRETRAINED_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
LENGTH: 77
|
||||||
|
CLEAN: True
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
FREEZE: True
|
||||||
|
LAYER: last
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
TUNER_MODEL:
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [512, 512]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 512
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 512
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_REMAP_KEYS: { 'Image': 'Target:FILE' }
|
||||||
|
MS_DATASET_SPLIT: test_short
|
||||||
|
OUTPUT_SIZE: [512, 512]
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
-
|
||||||
|
NAME: Select
|
||||||
|
KEYS: ['prompt']
|
||||||
|
META_KEYS: ['image_size']
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 1000
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -15,14 +15,14 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/t2i_sd15_512_sce
|
WORK_DIR: ./cache/save_data/sd15_512_sce_t2i_swift
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
NAME: "ModelscopeFs"
|
NAME: "ModelscopeFs"
|
||||||
TEMP_DIR: "./cache/data"
|
TEMP_DIR: "./cache/data"
|
||||||
#
|
#
|
||||||
TUNER:
|
TUNER:
|
||||||
-
|
-
|
||||||
NAME: SwiftSCETuning
|
NAME: SwiftSCETuning
|
||||||
DIMS: [1280, 1280, 1280, 1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
DIMS: [1280, 1280, 1280, 1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
||||||
@@ -125,7 +125,7 @@ SOLVER:
|
|||||||
SAMPLE_STEPS: 50
|
SAMPLE_STEPS: 50
|
||||||
SEED: 2023
|
SEED: 2023
|
||||||
GUIDE_SCALE: 7.5
|
GUIDE_SCALE: 7.5
|
||||||
GUIDE_RESCALE:
|
GUIDE_RESCALE: 0.5
|
||||||
DISCRETIZATION: trailing
|
DISCRETIZATION: trailing
|
||||||
IMAGE_SIZE: [512, 512]
|
IMAGE_SIZE: [512, 512]
|
||||||
RUN_TRAIN_N: False
|
RUN_TRAIN_N: False
|
||||||
@@ -0,0 +1,224 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 2000
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sd21_768_sce_t2i
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "lsc_identity" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionSCETuning
|
||||||
|
PARAMETERIZATION: v
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-2-1@v2-1_768-ema-pruned.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 1024
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: OpenClipTokenizer
|
||||||
|
LENGTH: 77
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenOpenCLIPEmbedder
|
||||||
|
ARCH: ViT-H-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
LAYER: penultimate
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
TUNER_MODEL:
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [768, 768]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 768
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 768
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_REMAP_KEYS: { 'Image': 'Target:FILE' }
|
||||||
|
MS_DATASET_SPLIT: test_short
|
||||||
|
OUTPUT_SIZE: [768, 768]
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
-
|
||||||
|
NAME: Select
|
||||||
|
KEYS: ['prompt']
|
||||||
|
META_KEYS: ['image_size']
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 1000
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -15,14 +15,14 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/t2i_sd21_768_sce
|
WORK_DIR: ./cache/save_data/sd21_768_sce_t2i_swift
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
NAME: "ModelscopeFs"
|
NAME: "ModelscopeFs"
|
||||||
TEMP_DIR: "./cache/data"
|
TEMP_DIR: "./cache/data"
|
||||||
#
|
#
|
||||||
TUNER:
|
TUNER:
|
||||||
-
|
-
|
||||||
NAME: SwiftSCETuning
|
NAME: SwiftSCETuning
|
||||||
DIMS: [1280, 1280, 1280, 1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
DIMS: [1280, 1280, 1280, 1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
||||||
@@ -121,7 +121,7 @@ SOLVER:
|
|||||||
SAMPLE_STEPS: 50
|
SAMPLE_STEPS: 50
|
||||||
SEED: 2023
|
SEED: 2023
|
||||||
GUIDE_SCALE: 7.5
|
GUIDE_SCALE: 7.5
|
||||||
GUIDE_RESCALE:
|
GUIDE_RESCALE: 0.5
|
||||||
DISCRETIZATION: trailing
|
DISCRETIZATION: trailing
|
||||||
IMAGE_SIZE: [768, 768]
|
IMAGE_SIZE: [768, 768]
|
||||||
RUN_TRAIN_N: False
|
RUN_TRAIN_N: False
|
||||||
@@ -0,0 +1,342 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 2000
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sdxl_1024_sce_t2i
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "lsc_identity" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionXLSCETuning
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-xl-base-1.0@sd_xl_base_1.0.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
# DEFAULT_N_PROMPT: 'lowres, error, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, username, watermark, signature'
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.0120
|
||||||
|
USE_EMA: False
|
||||||
|
LOAD_REFINER: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: [ 1, 2, 10 ]
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
LAYER: hidden
|
||||||
|
LAYER_IDX: 11
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "target_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
REFINER_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 384
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 4
|
||||||
|
CONTEXT_DIM: [ 1280, 1280, 1280, 1280 ]
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2560
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "aesthetic_score" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
TUNER_MODEL:
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [1024, 1024]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train_short
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleResize
|
||||||
|
INTERPOLATION: bicubic
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleCropXL
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
|
META_KEYS: [ 'data_key', 'img_path' ]
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
|
OUTPUT_KEY: [ 'image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: eval
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_REMAP_KEYS: { 'Image': 'Target:FILE' }
|
||||||
|
MS_DATASET_SPLIT: test_short
|
||||||
|
OUTPUT_SIZE: [ 1024, 1024 ]
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'prompt' ]
|
||||||
|
META_KEYS: [ 'image_size' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 1000
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,355 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 2000
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: 100
|
||||||
|
#
|
||||||
|
WORK_DIR: ./cache/save_data/sdxl_1024_sce_t2i_datatxt
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
FREEZE_PART: [ "first_stage_model", "cond_stage_model", "model" ]
|
||||||
|
TRAIN_PART: [ "lsc_identity" ]
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusionXLSCETuning
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-xl-base-1.0@sd_xl_base_1.0.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
# DEFAULT_N_PROMPT: 'lowres, error, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, username, watermark, signature'
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.0120
|
||||||
|
USE_EMA: False
|
||||||
|
LOAD_REFINER: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: [ 1, 2, 10 ]
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
LAYER: hidden
|
||||||
|
LAYER_IDX: 11
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "target_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
REFINER_MODEL:
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
MODEL_CHANNELS: 384
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
DROPOUT: 0
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
NUM_HEADS: -1
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 4
|
||||||
|
CONTEXT_DIM: [ 1280, 1280, 1280, 1280 ]
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
ADM_IN_CHANNELS: 2560
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
FREEZE: True
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
LEGACY: False
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "prompt" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: [ "aesthetic_score" ]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
TUNER_MODEL:
|
||||||
|
SC_TUNER_CFG:
|
||||||
|
NAME: SCTuner
|
||||||
|
TUNER_NAME: SCEAdapter
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [1024, 1024]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairDataset
|
||||||
|
MODE: train
|
||||||
|
P_ZERO: 0.0
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: LocalFs
|
||||||
|
AUTO_CLEAN: False
|
||||||
|
SAMPLER:
|
||||||
|
NAME: MixtureOfSamplers
|
||||||
|
SUB_SAMPLERS:
|
||||||
|
-
|
||||||
|
NAME: MultiLevelBatchSampler
|
||||||
|
PROB: 1.0
|
||||||
|
IMAGE_SIZE: [ 1024, 1024 ]
|
||||||
|
FIELDS: ["img_path", "width", "height", "prompt"]
|
||||||
|
DELIMITER: '#;#'
|
||||||
|
PATH_PREFIX: cache/datasets/3D_example_txt
|
||||||
|
PROMPT_PREFIX: '<sce> '
|
||||||
|
INDEX_FILE: cache/datasets/3D_example_txt/train.txt
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
-
|
||||||
|
NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: FlexibleResize
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
SIZE: 1024
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: FlexibleCropXL
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: ImageToTensor
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: pillow
|
||||||
|
-
|
||||||
|
NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: ['img']
|
||||||
|
OUTPUT_KEY: ['img']
|
||||||
|
BACKEND: torchvision
|
||||||
|
-
|
||||||
|
NAME: Select
|
||||||
|
KEYS: ['img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left']
|
||||||
|
META_KEYS: [ 'img_path' ]
|
||||||
|
-
|
||||||
|
NAME: Rename
|
||||||
|
INPUT_KEY: ['img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left']
|
||||||
|
OUTPUT_KEY: ['image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left']
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: Text2ImageDataset
|
||||||
|
MODE: eval
|
||||||
|
PROMPT_FILE: cache/datasets/3D_example_txt/test.txt
|
||||||
|
IMAGE_SIZE: [ 1024, 1024 ]
|
||||||
|
FIELDS: ["prompt"]
|
||||||
|
DELIMITER: '#;#'
|
||||||
|
PROMPT_PREFIX: '<sce> '
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: LocalFs
|
||||||
|
AUTO_CLEAN: False
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
-
|
||||||
|
NAME: Select
|
||||||
|
KEYS: ['index', 'prompt']
|
||||||
|
META_KEYS: ['image_size']
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 50
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 1000
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -15,14 +15,14 @@ SOLVER:
|
|||||||
ACCU_STEP: 1
|
ACCU_STEP: 1
|
||||||
EVAL_INTERVAL: 100
|
EVAL_INTERVAL: 100
|
||||||
#
|
#
|
||||||
WORK_DIR: ./cache/t2i_sdxl_1024_sce
|
WORK_DIR: ./cache/save_data/sdxl_1024_sce_t2i_swift
|
||||||
LOG_FILE: std_log.txt
|
LOG_FILE: std_log.txt
|
||||||
#
|
#
|
||||||
FILE_SYSTEM:
|
FILE_SYSTEM:
|
||||||
NAME: "ModelscopeFs"
|
NAME: "ModelscopeFs"
|
||||||
TEMP_DIR: "./cache/data"
|
TEMP_DIR: "./cache/data"
|
||||||
#
|
#
|
||||||
TUNER:
|
TUNER:
|
||||||
-
|
-
|
||||||
NAME: SwiftSCETuning
|
NAME: SwiftSCETuning
|
||||||
DIMS: [1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
DIMS: [1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
||||||
@@ -128,7 +128,7 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: FrozenOpenCLIPEmbedder2
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
ARCH: ViT-bigG-14
|
ARCH: ViT-bigG-14
|
||||||
PRETRAINED_MODEL:
|
PRETRAINED_MODEL:
|
||||||
@@ -141,21 +141,21 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "original_size_as_tuple" ]
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "crop_coords_top_left" ]
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
@@ -207,21 +207,21 @@ SOLVER:
|
|||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "prompt" ]
|
INPUT_KEYS: [ "prompt" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "original_size_as_tuple" ]
|
INPUT_KEYS: [ "original_size_as_tuple" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
UCG_RATE: 0.0
|
UCG_RATE: 0.0
|
||||||
INPUT_KEYS: [ "crop_coords_top_left" ]
|
INPUT_KEYS: [ "crop_coords_top_left" ]
|
||||||
LEGACY_UCG_VALUE:
|
LEGACY_UCG_VALUE:
|
||||||
-
|
-
|
||||||
NAME: ConcatTimestepEmbedderND
|
NAME: ConcatTimestepEmbedderND
|
||||||
OUT_DIM: 256
|
OUT_DIM: 256
|
||||||
IS_TRAINABLE: False
|
IS_TRAINABLE: False
|
||||||
@@ -237,8 +237,8 @@ SOLVER:
|
|||||||
SAMPLER: ddim
|
SAMPLER: ddim
|
||||||
SAMPLE_STEPS: 50
|
SAMPLE_STEPS: 50
|
||||||
SEED: 2023
|
SEED: 2023
|
||||||
GUIDE_SCALE: 5.0
|
GUIDE_SCALE: 7.5
|
||||||
GUIDE_RESCALE:
|
GUIDE_RESCALE: 0.5
|
||||||
DISCRETIZATION: trailing
|
DISCRETIZATION: trailing
|
||||||
IMAGE_SIZE: [1024, 1024]
|
IMAGE_SIZE: [1024, 1024]
|
||||||
RUN_TRAIN_N: False
|
RUN_TRAIN_N: False
|
||||||
@@ -294,8 +294,8 @@ SOLVER:
|
|||||||
KEYS: [ 'img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
KEYS: [ 'img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
META_KEYS: [ 'data_key', 'img_path' ]
|
META_KEYS: [ 'data_key', 'img_path' ]
|
||||||
- NAME: Rename
|
- NAME: Rename
|
||||||
IN_KEYS: [ 'img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
INPUT_KEY: [ 'img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
OUT_KEYS: [ 'image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
OUTPUT_KEY: [ 'image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
#
|
#
|
||||||
EVAL_DATA:
|
EVAL_DATA:
|
||||||
NAME: ImageTextPairMSDataset
|
NAME: ImageTextPairMSDataset
|
||||||
@@ -321,15 +321,20 @@ SOLVER:
|
|||||||
META_KEYS: [ 'image_size' ]
|
META_KEYS: [ 'image_size' ]
|
||||||
#
|
#
|
||||||
TRAIN_HOOKS:
|
TRAIN_HOOKS:
|
||||||
- NAME: BackwardHook
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
PRIORITY: 0
|
PRIORITY: 0
|
||||||
- NAME: LogHook
|
-
|
||||||
|
NAME: LogHook
|
||||||
LOG_INTERVAL: 50
|
LOG_INTERVAL: 50
|
||||||
- NAME: CheckpointHook
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
INTERVAL: 1000
|
INTERVAL: 1000
|
||||||
- NAME: ProbeDataHook
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
PROB_INTERVAL: 100
|
PROB_INTERVAL: 100
|
||||||
#
|
#
|
||||||
EVAL_HOOKS:
|
EVAL_HOOKS:
|
||||||
- NAME: ProbeDataHook
|
-
|
||||||
PROB_INTERVAL: 100
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
CONTROLLERS:
|
||||||
|
# SD2.1
|
||||||
|
- NAME: canny
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
TYPE: Canny
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD2.1/canny_control/
|
||||||
|
- NAME: openpose
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
TYPE: Openpose
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD2.1/pose_control/
|
||||||
|
- NAME: color
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
TYPE: Color
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD2.1/color_control/
|
||||||
|
- NAME: hed
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
TYPE: Hed
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD2.1/hed_control
|
||||||
|
- NAME: depth
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
TYPE: Midas
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD2.1/depth_control
|
||||||
|
# SD_XL1.0
|
||||||
|
- NAME: canny
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
TYPE: Canny
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD_XL1.0/canny_control
|
||||||
|
- NAME: color
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
TYPE: Color
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD_XL1.0/color_control
|
||||||
|
- NAME: depth
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
TYPE: Midas
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD_XL1.0/depth_control
|
||||||
|
- NAME: hed
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
TYPE: Hed
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD_XL1.0/hed_control
|
||||||
|
- NAME: openpose
|
||||||
|
NAME_ZH:
|
||||||
|
DESCRIPTION:
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
TYPE: Openpose
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@controllable_model/SD_XL1.0/pose_control
|
||||||
@@ -0,0 +1,793 @@
|
|||||||
|
TUNERS:
|
||||||
|
- NAME: Azure-Dragon
|
||||||
|
NAME_ZH: 青龙
|
||||||
|
SOURCE: wanx
|
||||||
|
DESCRIPTION: None
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/azure_dragon/
|
||||||
|
IMAGE_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/azure_dragon/xl_azure_dragon.png
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: Azure Dragon, 8K, high quality,Ultra High Detail.One of the Four Divine Creatures in Charge of Water.
|
||||||
|
- NAME: Gold-Dragon
|
||||||
|
NAME_ZH: 金龙
|
||||||
|
SOURCE: wanx
|
||||||
|
DESCRIPTION: None
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/gold_dragon/
|
||||||
|
IMAGE_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/gold_dragon/xl_gold_dragon.png
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: Chinese Gold Dragon in the clouds. Translucent Texture. Zbrush. Fuzzy Art. Exquisite Craftsmanship. 3D. 8K. Ultra High Detail
|
||||||
|
- NAME: SpringFestival-Dragon
|
||||||
|
NAME_ZH: 春节龙
|
||||||
|
SOURCE: wanx
|
||||||
|
DESCRIPTION: None
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/spring_festival_dragon/
|
||||||
|
IMAGE_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/spring_festival_dragon/xl_spring_festival_dragon.png
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: Chinese dragon. Spring Festival.Festive.Street.Lanterns.32K.High quality.expressive, dramatic, dreamlike and mysterious, Surrealism
|
||||||
|
- NAME: Red-Dragon
|
||||||
|
NAME_ZH: 红龙
|
||||||
|
SOURCE: wanx
|
||||||
|
DESCRIPTION: None
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/red_dragon/
|
||||||
|
IMAGE_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/red_dragon/xl_red_dragon.png
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: Traditional Red Dragon of China. Low Water Level. Studio Ghibli Style. Mural Illustration. White Background. High Detail
|
||||||
|
- NAME: ChinesePunk-Dragon
|
||||||
|
NAME_ZH: 中国朋克龙
|
||||||
|
SOURCE: wanx
|
||||||
|
DESCRIPTION: None
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/chinese_punk_dragon/
|
||||||
|
IMAGE_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/chinese_punk_dragon/xl_chinese_punk_dragon.png
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: uhd Image,Dragon,Chinese Dragon, Dunhuang Mural Style, Traditional Maritime Art Style
|
||||||
|
- NAME: Cute-Dragon
|
||||||
|
NAME_ZH: 喜庆龙
|
||||||
|
SOURCE: wanx
|
||||||
|
DESCRIPTION: None
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/cute_dragon/
|
||||||
|
IMAGE_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/cute_dragon/xl_kawaii_dragon.png
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: China Kawaii Dragon. Contest Winner. Minimalist Illustration. White Background. Flat Style. Digital Painting Style. Red. 32k uhd. Fun Comics. Fuzzy Art. Bold. Comic-Inspired Characters
|
||||||
|
- NAME: Dragon-Baby
|
||||||
|
NAME_ZH: 龙宝宝
|
||||||
|
SOURCE: wanx
|
||||||
|
DESCRIPTION: None
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/baby_dragon/
|
||||||
|
IMAGE_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/baby_dragon/xl_baby_dragon.png
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: Warm Colors, Soft,Chinese Dragon Baby, Felt Style,Dragon Baby, Best Quality, 3D Doll, Macaron Tones, Glittering Big Eyes, Winter,Dragon
|
||||||
|
- NAME: Sloppy-Dragon
|
||||||
|
NAME_ZH: 潦草龙
|
||||||
|
SOURCE: wanx
|
||||||
|
DESCRIPTION: None
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/sloppy_dragon/
|
||||||
|
IMAGE_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/sloppy_dragon/xl_sloppy_dragon.png
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: Messy Chinese Dragon,Cute, Wu Guanzhong, Rough
|
||||||
|
-
|
||||||
|
NAME: Caricature
|
||||||
|
NAME_ZH: 夸张漫画
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/894f40ed44b37c3372e6a22b8ae577a4.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/Caricature
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Caricature
|
||||||
|
NAME_ZH: 夸张漫画
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/894f40ed44b37c3372e6a22b8ae577a4.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/Caricature
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Caricature
|
||||||
|
NAME_ZH: 夸张漫画
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/894f40ed44b37c3372e6a22b8ae577a4.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/Caricature
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Color Field Painting
|
||||||
|
NAME_ZH: 色域绘画
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/80e5b4075c572c04cbb4e48c37b8366b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/ColorFieldPainting
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Color Field Painting
|
||||||
|
NAME_ZH: 色域绘画
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/80e5b4075c572c04cbb4e48c37b8366b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/ColorFieldPainting
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Color Field Painting
|
||||||
|
NAME_ZH: 色域绘画
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/80e5b4075c572c04cbb4e48c37b8366b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/ColorFieldPainting
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Colored Pencil Art
|
||||||
|
NAME_ZH: 彩色铅笔艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/9ae235d7f1a7c2a4edab52a5e9f9cbae.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/ColoredPencilArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Colored Pencil Art
|
||||||
|
NAME_ZH: 彩色铅笔艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/9ae235d7f1a7c2a4edab52a5e9f9cbae.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/ColoredPencilArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Colored Pencil Art
|
||||||
|
NAME_ZH: 彩色铅笔艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/9ae235d7f1a7c2a4edab52a5e9f9cbae.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/ColoredPencilArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Dark Moody Atmosphere
|
||||||
|
NAME_ZH: 暗色忧郁氛围
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/3da915da2f5cedaf243e57e08163f35b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/DarkMoodyAtmosphere
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Dark Moody Atmosphere
|
||||||
|
NAME_ZH: 暗色忧郁氛围
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/3da915da2f5cedaf243e57e08163f35b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/DarkMoodyAtmosphere
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Dark Moody Atmosphere
|
||||||
|
NAME_ZH: 暗色忧郁氛围
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/3da915da2f5cedaf243e57e08163f35b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/DarkMoodyAtmosphere
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Dripping Paint Splatter Art
|
||||||
|
NAME_ZH: 滴漆溅画艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/69fd81f5983107acc3d334af62915851.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/DrippingPaintSplatterArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Dripping Paint Splatter Art
|
||||||
|
NAME_ZH: 滴漆溅画艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/69fd81f5983107acc3d334af62915851.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/DrippingPaintSplatterArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Dripping Paint Splatter Art
|
||||||
|
NAME_ZH: 滴漆溅画艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/69fd81f5983107acc3d334af62915851.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/DrippingPaintSplatterArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Faded Polaroid Photo
|
||||||
|
NAME_ZH: 褪色的宝丽来照片
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/f152edb4b3ca6248758b48115258ddfa.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/FadedPolaroidPhoto
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Faded Polaroid Photo
|
||||||
|
NAME_ZH: 褪色的宝丽来照片
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/f152edb4b3ca6248758b48115258ddfa.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/FadedPolaroidPhoto
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Faded Polaroid Photo
|
||||||
|
NAME_ZH: 褪色的宝丽来照片
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/f152edb4b3ca6248758b48115258ddfa.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/FadedPolaroidPhoto
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Flat 2D Art
|
||||||
|
NAME_ZH: 扁平2D艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/940cfd34155634cf051e1b2942cca426.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/Flat2DArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Flat 2D Art
|
||||||
|
NAME_ZH: 扁平2D艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/940cfd34155634cf051e1b2942cca426.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/Flat2DArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Flat 2D Art
|
||||||
|
NAME_ZH: 扁平2D艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/940cfd34155634cf051e1b2942cca426.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/Flat2DArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Graffiti Art
|
||||||
|
NAME_ZH: 涂鸦艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/57b751b11564cb22cd49ef21f2004a5f.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/GraffitiArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Graffiti Art
|
||||||
|
NAME_ZH: 涂鸦艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/57b751b11564cb22cd49ef21f2004a5f.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/GraffitiArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Graffiti Art
|
||||||
|
NAME_ZH: 涂鸦艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/57b751b11564cb22cd49ef21f2004a5f.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/GraffitiArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Impressionism
|
||||||
|
NAME_ZH: 印象主义
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/0312b673dc6858a9864d7f45f0c5c1fc.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/Impressionism
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Impressionism
|
||||||
|
NAME_ZH: 印象主义
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/0312b673dc6858a9864d7f45f0c5c1fc.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/Impressionism
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Impressionism
|
||||||
|
NAME_ZH: 印象主义
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/0312b673dc6858a9864d7f45f0c5c1fc.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/Impressionism
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Logo Design
|
||||||
|
NAME_ZH: 标志设计
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/9aa040b0c60d289da9610c91ad9b7c7e.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/LogoDesign
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Logo Design
|
||||||
|
NAME_ZH: 标志设计
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/9aa040b0c60d289da9610c91ad9b7c7e.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/LogoDesign
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Logo Design
|
||||||
|
NAME_ZH: 标志设计
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/9aa040b0c60d289da9610c91ad9b7c7e.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/LogoDesign
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Pencil Sketch Drawing
|
||||||
|
NAME_ZH: 铅笔素描
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/a9056e1eac85e5e4fe96a93917d4cce4.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/PencilSketchDrawing
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Pencil Sketch Drawing
|
||||||
|
NAME_ZH: 铅笔素描
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/a9056e1eac85e5e4fe96a93917d4cce4.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/PencilSketchDrawing
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Pencil Sketch Drawing
|
||||||
|
NAME_ZH: 铅笔素描
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/a9056e1eac85e5e4fe96a93917d4cce4.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/PencilSketchDrawing
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Silhouette Art
|
||||||
|
NAME_ZH: 剪影艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/568777f447fc02510b618152726d5002.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/SilhouetteArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Silhouette Art
|
||||||
|
NAME_ZH: 剪影艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/568777f447fc02510b618152726d5002.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/SilhouetteArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Silhouette Art
|
||||||
|
NAME_ZH: 剪影艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/568777f447fc02510b618152726d5002.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/SilhouetteArt
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Steampunk 2
|
||||||
|
NAME_ZH: 蒸汽朋克
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/07d7b27cd73f2d43684003563511c15b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/Steampunk2
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Steampunk 2
|
||||||
|
NAME_ZH: 蒸汽朋克
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/07d7b27cd73f2d43684003563511c15b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/Steampunk2
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Steampunk 2
|
||||||
|
NAME_ZH: 蒸汽朋克
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/07d7b27cd73f2d43684003563511c15b.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/Steampunk2
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Sticker Designs
|
||||||
|
NAME_ZH: 贴纸设计
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/2d1e9867058db2c57f2fe47530de3243.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/StickerDesigns
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Sticker Designs
|
||||||
|
NAME_ZH: 贴纸设计
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/2d1e9867058db2c57f2fe47530de3243.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/StickerDesigns
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Sticker Designs
|
||||||
|
NAME_ZH: 贴纸设计
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/2d1e9867058db2c57f2fe47530de3243.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/StickerDesigns
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Watercolor 2
|
||||||
|
NAME_ZH: 水彩
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/8859d532ae5901cc8457d6118fb9b7da.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/Watercolor2
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Watercolor 2
|
||||||
|
NAME_ZH: 水彩
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/8859d532ae5901cc8457d6118fb9b7da.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/Watercolor2
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: Watercolor 2
|
||||||
|
NAME_ZH: 水彩
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: diva
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/8859d532ae5901cc8457d6118fb9b7da.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/Watercolor2
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-elemental-art
|
||||||
|
NAME_ZH: MRE元素艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/5895d78cf58c1ca05178991f37cc48ff.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/mre-elemental-art
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-elemental-art
|
||||||
|
NAME_ZH: MRE元素艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/5895d78cf58c1ca05178991f37cc48ff.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/mre-elemental-art
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-elemental-art
|
||||||
|
NAME_ZH: MRE元素艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/5895d78cf58c1ca05178991f37cc48ff.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/mre-elemental-art
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-anime
|
||||||
|
NAME_ZH: MRE动漫
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/a08149bc8e50f6bc65c0010d4cd416f8.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/mre-anime
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-anime
|
||||||
|
NAME_ZH: MRE动漫
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/a08149bc8e50f6bc65c0010d4cd416f8.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/mre-anime
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-anime
|
||||||
|
NAME_ZH: MRE动漫
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/a08149bc8e50f6bc65c0010d4cd416f8.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/mre-anime
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-comic
|
||||||
|
NAME_ZH: MRE漫画书
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/48c65cebf1fa4284d7b8feb619412e65.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/mre-comic
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-comic
|
||||||
|
NAME_ZH: MRE漫画书
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/48c65cebf1fa4284d7b8feb619412e65.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/mre-comic
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: mre-comic
|
||||||
|
NAME_ZH: MRE漫画书
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: mre
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/48c65cebf1fa4284d7b8feb619412e65.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/mre-comic
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-craft clay
|
||||||
|
NAME_ZH: SAI手工粘土
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/8fc51113f725f27326c4398a7457cd6d.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/sai-craftclay
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-craft clay
|
||||||
|
NAME_ZH: SAI手工粘土
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/8fc51113f725f27326c4398a7457cd6d.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/sai-craftclay
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-craft clay
|
||||||
|
NAME_ZH: SAI手工粘土
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/8fc51113f725f27326c4398a7457cd6d.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/sai-craftclay
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-fantasy art
|
||||||
|
NAME_ZH: SAI幻想艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/a6f8d92afcd5803dfb2ebecbc92091b6.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/sai-fantasyart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-fantasy art
|
||||||
|
NAME_ZH: SAI幻想艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/a6f8d92afcd5803dfb2ebecbc92091b6.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/sai-fantasyart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-fantasy art
|
||||||
|
NAME_ZH: SAI幻想艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/a6f8d92afcd5803dfb2ebecbc92091b6.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/sai-fantasyart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-line art
|
||||||
|
NAME_ZH: SAI线条艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/034a51b0dd34b018be8859bf45b4f7ed.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/sai-lineart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-line art
|
||||||
|
NAME_ZH: SAI线条艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/034a51b0dd34b018be8859bf45b4f7ed.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/sai-lineart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-line art
|
||||||
|
NAME_ZH: SAI线条艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/034a51b0dd34b018be8859bf45b4f7ed.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/sai-lineart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-neonpunk
|
||||||
|
NAME_ZH: SAI霓虹朋克
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/7e9ed25bb34008beb5f417df63c4b2fe.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/sai-neonpunk
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-neonpunk
|
||||||
|
NAME_ZH: SAI霓虹朋克
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/7e9ed25bb34008beb5f417df63c4b2fe.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/sai-neonpunk
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-neonpunk
|
||||||
|
NAME_ZH: SAI霓虹朋克
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/7e9ed25bb34008beb5f417df63c4b2fe.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/sai-neonpunk
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-origami
|
||||||
|
NAME_ZH: SAI折纸
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/924f46a8f276011a0953d7988e90ee25.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/sai-origami
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-origami
|
||||||
|
NAME_ZH: SAI折纸
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/924f46a8f276011a0953d7988e90ee25.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/sai-origami
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-origami
|
||||||
|
NAME_ZH: SAI折纸
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/924f46a8f276011a0953d7988e90ee25.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/sai-origami
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-pixel art
|
||||||
|
NAME_ZH: SAI像素艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD_XL1.0
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD_XL1.0/a5ab89c0960be8c1216e65c98d92ae4a.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD_XL1.0/sai-pixelart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-pixel art
|
||||||
|
NAME_ZH: SAI像素艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD2.1
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD2.1/a5ab89c0960be8c1216e65c98d92ae4a.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD2.1/sai-pixelart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
|
-
|
||||||
|
NAME: sai-pixel art
|
||||||
|
NAME_ZH: SAI像素艺术
|
||||||
|
DESCRIPTION:
|
||||||
|
SOURCE: sai
|
||||||
|
BASE_MODEL: SD1.5
|
||||||
|
IMAGE_PATH: ms://damo/scepter@mantra_images/SD1.5/a5ab89c0960be8c1216e65c98d92ae4a.png
|
||||||
|
MODEL_PATH: ms://damo/scepter_scedit@tuners_model/SD1.5/sai-pixelart
|
||||||
|
TUNER_TYPE: SwiftSCE
|
||||||
|
PROMPT_EXAMPLE: a boy wearing green jacket
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
WORK_DIR: home
|
||||||
|
FILE_SYSTEM:
|
||||||
|
-
|
||||||
|
NAME: LocalFs
|
||||||
|
AUTO_CLEAN: False
|
||||||
|
DESC_INFO:
|
||||||
|
ZH_INFO: |
|
||||||
|
<h2><center>基本介绍</center><h2>
|
||||||
|
<p align="center">
|
||||||
|
<table align="center">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="https://modelscope.cn/api/v1/models/damo/scepter/repo?Revision=master&FilePath=assets/scepter_studio/scepter_studio_banner.jpg">
|
||||||
|
<h3><center>SCEPTER Studio是基于开源基模型和自研微调编辑算法构建的生成定制和编辑工具箱,提供围绕生成、微调、编辑、数据处理等一系列的工具和插件。</center><h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
EN_INFO: |
|
||||||
|
<h2><center>Introduction</center><h2>
|
||||||
|
<p align="center">
|
||||||
|
<table align="center">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="https://modelscope.cn/api/v1/models/damo/scepter/repo?Revision=master&FilePath=assets/scepter_studio/scepter_studio_banner.jpg">
|
||||||
|
<h3><center>SCEPTER Studio is a customized generation and editing toolkit built on the open-source base models and proprietary fine-tuning editing algorithms, offering a range of tools and plugins centered around generation, fine-tuning, editing, and data processing.</center><h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
GUIDE_INFO:
|
||||||
|
ZH_INFO: |
|
||||||
|
<h2><center>用户指南</center><h2>
|
||||||
|
<style>
|
||||||
|
.video-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.video-wrapper {
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
video {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="video-container">
|
||||||
|
<div class="video-wrapper">
|
||||||
|
<video controls>
|
||||||
|
<source src="https://modelscope.cn/api/v1/models/iic/scepter/repo?Revision=master&FilePath=assets/scepter_studio/scepter_studio_train_inference.webm" type="video/webm">
|
||||||
|
</video>
|
||||||
|
<div class="description">训练与推理演示</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
EN_INFO: |
|
||||||
|
<h2><center>User Guide</center><h2>
|
||||||
|
<style>
|
||||||
|
.video-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.video-wrapper {
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
video {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="video-container">
|
||||||
|
<div class="video-wrapper">
|
||||||
|
<video controls>
|
||||||
|
<source src="https://modelscope.cn/api/v1/models/iic/scepter/repo?Revision=master&FilePath=assets/scepter_studio/scepter_studio_train_inference.webm" type="video/webm">
|
||||||
|
</video>
|
||||||
|
<div class="description">Train & Inference Video</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
WORK_DIR: "inference"
|
||||||
|
DIFFUSION_PARAS:
|
||||||
|
SAMPLE:
|
||||||
|
VALUES: ['ddim', 'euler', 'euler_ancestral', 'heun', 'dpm2',
|
||||||
|
'dpm2_ancestral', 'dpmpp_2m', 'dpmpp_sde', 'dpmpp_2m_sde', 'dpmpp_2s_ancestral',
|
||||||
|
'dpm2_karras', 'dpm2_ancestral_karras', 'dpmpp_2s_ancestral_karras', 'dpmpp_2m_karras',
|
||||||
|
'dpmpp_sde_karras', 'dpmpp_2m_sde_karras']
|
||||||
|
DEFAULT: 'dpmpp_2s_ancestral'
|
||||||
|
NEGATIVE_PROMPT:
|
||||||
|
DEFAULT:
|
||||||
|
PROMPT_PREFIX:
|
||||||
|
DEFAULT:
|
||||||
|
SAMPLES:
|
||||||
|
MIN: 1
|
||||||
|
MAX: 4
|
||||||
|
DEFAULT: 1
|
||||||
|
SAMPLE_STEPS:
|
||||||
|
MIN: 1
|
||||||
|
MAX: 100
|
||||||
|
DEFAULT: 30
|
||||||
|
GUIDE_SCALE:
|
||||||
|
MIN: 0
|
||||||
|
MAX: 10
|
||||||
|
DEFAULT: 5.0
|
||||||
|
GUIDE_RESCALE:
|
||||||
|
MIN: 0
|
||||||
|
MAX: 1.0
|
||||||
|
DEFAULT: 0.5
|
||||||
|
DISCRETIZATION:
|
||||||
|
VALUES: ["trailing", "leading", "linspace"]
|
||||||
|
DEFAULT: "linspace"
|
||||||
|
REFINE_SAMPLERS:
|
||||||
|
VALUES: [ 'ddim', 'euler', 'euler_ancestral', 'heun', 'dpm2',
|
||||||
|
'dpm2_ancestral', 'dpmpp_2m', 'dpmpp_sde', 'dpmpp_2m_sde', 'dpmpp_2s_ancestral',
|
||||||
|
'dpm2_karras', 'dpm2_ancestral_karras', 'dpmpp_2s_ancestral_karras', 'dpmpp_2m_karras',
|
||||||
|
'dpmpp_sde_karras', 'dpmpp_2m_sde_karras' ]
|
||||||
|
DEFAULT: 'dpmpp_2s_ancestral'
|
||||||
|
REFINE_SAMPLE_STEPS:
|
||||||
|
MIN: 0
|
||||||
|
MAX: 100
|
||||||
|
DEFAULT: 30
|
||||||
|
REFINE_GUIDE_SCALE:
|
||||||
|
MIN: 0
|
||||||
|
MAX: 10
|
||||||
|
DEFAULT: 5.0
|
||||||
|
REFINE_GUIDE_RESCALE:
|
||||||
|
MIN: 0
|
||||||
|
MAX: 1.0
|
||||||
|
DEFAULT: 0.5
|
||||||
|
REFINE_DISCRETIZATION:
|
||||||
|
VALUES: [ "trailing", "leading", "linspace" ]
|
||||||
|
DEFAULT: "linspace"
|
||||||
|
AESTHETIC_SCORE:
|
||||||
|
MIN: 0.0
|
||||||
|
MAX: 10.0
|
||||||
|
DEFAULT: 6.0
|
||||||
|
NEGATIVE_AESTHETIC_SCORE:
|
||||||
|
MIN: 0.0
|
||||||
|
MAX: 10.0
|
||||||
|
DEFAULT: 2.5
|
||||||
|
REFINE_STRENGTH:
|
||||||
|
MIN: 0
|
||||||
|
MAX: 1.0
|
||||||
|
DEFAULT: 0.15
|
||||||
|
RESOLUTIONS:
|
||||||
|
VALUES: [[704, 1408], [704, 1344], [768, 1344],
|
||||||
|
[720, 1280],
|
||||||
|
[768, 1280], [832, 1216], [832, 1152],
|
||||||
|
[896, 1152], [896, 1088], [960, 1088],
|
||||||
|
[960, 1024], [1024, 1024], [1024, 960],
|
||||||
|
[1088, 960], [1088, 896], [1152, 896],
|
||||||
|
[1152, 832], [1216, 832], [1280, 720],
|
||||||
|
[1280, 768],
|
||||||
|
[1344, 768], [1344, 704], [1408, 704],
|
||||||
|
[1472, 704], [1536, 640], [1600, 640],
|
||||||
|
[1664, 576], [1728, 576]]
|
||||||
|
DEFAULT: [1024, 1024]
|
||||||
|
EXTENSION_PARAS:
|
||||||
|
MANTRA_BOOK: scepter/methods/studio/extensions/mantra_book/mantra_book.yaml
|
||||||
|
OFFICIAL_TUNERS: scepter/methods/studio/extensions/tuners/official_tuners.yaml
|
||||||
|
OFFICIAL_CONTROLLERS: scepter/methods/studio/extensions/controllers/official_controllers.yaml
|
||||||
|
TUNER_MANAGER: scepter/methods/studio/tuner_manager/tuner_manager.yaml
|
||||||
|
CONTROLABLE_ANNOTATORS:
|
||||||
|
-
|
||||||
|
NAME: "CannyAnnotator"
|
||||||
|
TYPE: Canny
|
||||||
|
IS_DEFAULT: True
|
||||||
|
-
|
||||||
|
NAME: "HedAnnotator"
|
||||||
|
PRETRAINED_MODEL: "ms://damo/scepter_scedit@annotator/ckpts/ControlNetHED.pth"
|
||||||
|
TYPE: Hed
|
||||||
|
IS_DEFAULT: False
|
||||||
|
-
|
||||||
|
NAME: "OpenposeAnnotator"
|
||||||
|
BODY_MODEL_PATH: "ms://damo/scepter_scedit@annotator/ckpts/body_pose_model.pth"
|
||||||
|
HAND_MODEL_PATH: "ms://damo/scepter_scedit@annotator/ckpts/hand_pose_model.pth"
|
||||||
|
TYPE: Openpose
|
||||||
|
IS_DEFAULT: False
|
||||||
|
-
|
||||||
|
NAME: "MidasDetector"
|
||||||
|
PRETRAINED_MODEL: "ms://damo/scepter_scedit@annotator/ckpts/dpt_hybrid-midas-501f0c75.pt"
|
||||||
|
TYPE: Midas
|
||||||
|
IS_DEFAULT: False
|
||||||
|
-
|
||||||
|
NAME: "ColorAnnotator"
|
||||||
|
TYPE: Color
|
||||||
|
IS_DEFAULT: False
|
||||||
|
-
|
||||||
|
NAME: "InvertAnnotator"
|
||||||
|
TYPE: Invert-Preprocess
|
||||||
|
IS_DEFAULT: False
|
||||||
@@ -0,0 +1,268 @@
|
|||||||
|
NAME: LARGEN
|
||||||
|
IS_DEFAULT: False
|
||||||
|
DEFAULT_PARAS:
|
||||||
|
PARAS:
|
||||||
|
RESOLUTIONS: [[1024, 1024]]
|
||||||
|
INPUT:
|
||||||
|
IMAGE:
|
||||||
|
ORIGINAL_SIZE_AS_TUPLE: [1024, 1024]
|
||||||
|
TARGET_SIZE_AS_TUPLE: [1024, 1024]
|
||||||
|
AESTHETIC_SCORE: 6.0
|
||||||
|
NEGATIVE_AESTHETIC_SCORE: 2.5
|
||||||
|
PROMPT: ""
|
||||||
|
NEGATIVE_PROMPT: ""
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
CROP_COORDS_TOP_LEFT: [0, 0]
|
||||||
|
SAMPLE: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
REFINE_SAMPLE: ddim
|
||||||
|
REFINE_GUIDE_SCALE: 7.5
|
||||||
|
REFINE_GUIDE_RESCALE: 0.5
|
||||||
|
REFINE_DISCRETIZATION: trailing
|
||||||
|
OUTPUT:
|
||||||
|
LATENT:
|
||||||
|
BEFORE_REFINE_IMAGES:
|
||||||
|
IMAGES:
|
||||||
|
SEED:
|
||||||
|
MODULES_PARAS:
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode
|
||||||
|
DTYPE: float32
|
||||||
|
INPUT: ["IMAGE"]
|
||||||
|
-
|
||||||
|
NAME: decode
|
||||||
|
DTYPE: float32
|
||||||
|
INPUT: ["LATENT"]
|
||||||
|
PARAS:
|
||||||
|
# SCALE_FACTOR DESCRIPTION: The vae embeding scale. TYPE: float default: 0.18215
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: forward
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["SAMPLE_STEPS", "SAMPLE", "GUIDE_SCALE", "GUIDE_RESCALE", "DISCRETIZATION"]
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["ORIGINAL_SIZE_AS_TUPLE", "CROP_COORDS_TOP_LEFT", "PROMPT", "NEGATIVE_PROMPT"]
|
||||||
|
REFINER_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: forward
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["SAMPLE_STEPS", "REFINE_SAMPLE", "REFINE_GUIDE_SCALE", "REFINE_GUIDE_RESCALE", "REFINE_DISCRETIZATION"]
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["ORIGINAL_SIZE_AS_TUPLE", "AESTHETIC_SCORE", "NEGATIVE_AESTHETIC_SCORE", "CROP_COORDS_TOP_LEFT", "PROMPT", "NEGATIVE_PROMPT"]
|
||||||
|
|
||||||
|
MODEL:
|
||||||
|
PRETRAINED_MODEL: ms://damo/LARGEN@models/largen_ckpt_s22k.pth
|
||||||
|
# SCHEDULE_ARGS DESCRIPTION: TYPE: default: ''
|
||||||
|
SCHEDULE:
|
||||||
|
PARAMETERIZATION: "eps"
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: ''
|
||||||
|
NAME: "scaled_linear"
|
||||||
|
BETA_MIN: 0.00085
|
||||||
|
BETA_MAX: 0.0120
|
||||||
|
# DIFFUSION_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'DiffusionUNetXL'
|
||||||
|
NAME: LargenUNetXL
|
||||||
|
# PRETRAINED_MODEL DESCRIPTION: Whole model's pretrained model path. TYPE: NoneType default: None
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
# IN_CHANNELS DESCRIPTION: Unet channels for input, considering the input image's channels. TYPE: int default: 4
|
||||||
|
IN_CHANNELS: 9
|
||||||
|
# OUT_CHANNELS DESCRIPTION: Unet channels for output, considering the input image's channels. TYPE: int default: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
# NUM_RES_BLOCKS DESCRIPTION: The blocks's number of res. TYPE: int default: 2
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
# MODEL_CHANNELS DESCRIPTION: base channel count for the model. TYPE: int default: 320
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
# ATTENTION_RESOLUTIONS DESCRIPTION: A collection of downsample rates at which attention will take place. May be a set, list, or tuple. For example, if this contains 4, then at 4x downsampling, attentio will be used. TYPE: list default: [4, 2]
|
||||||
|
ATTENTION_RESOLUTIONS: [4, 2]
|
||||||
|
# DROPOUT DESCRIPTION: The dropout rate. TYPE: int default: 0
|
||||||
|
DROPOUT: 0
|
||||||
|
# CHANNEL_MULT DESCRIPTION: channel multiplier for each level of the UNet. TYPE: list default: [1, 2, 4]
|
||||||
|
CHANNEL_MULT: [1, 2, 4]
|
||||||
|
# CONV_RESAMPLE DESCRIPTION: Use conv to resample when downsample. TYPE: bool default: True
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
# DIMS DESCRIPTION: The Conv dims which 2 represent Conv2D. TYPE: int default: 2
|
||||||
|
DIMS: 2
|
||||||
|
# NUM_CLASSES DESCRIPTION: The class num for class guided setting, also can be set as continuous. TYPE: str default: 'sequential'
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
# USE_CHECKPOINT DESCRIPTION: Use gradient checkpointing to reduce memory usage. TYPE: bool default: False
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
# NUM_HEADS DESCRIPTION: The number of attention heads in each attention layer. TYPE: int default: -1
|
||||||
|
NUM_HEADS: -1
|
||||||
|
# NUM_HEADS_CHANNELS DESCRIPTION: If specified, ignore num_heads and instead use a fixed channel width per attention head. TYPE: int default: 64
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
# USE_SCALE_SHIFT_NORM DESCRIPTION: The scale and shift for the outnorm of RESBLOCK, use a FiLM-like conditioning mechanism. TYPE: bool default: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
# RESBLOCK_UPDOWN DESCRIPTION: Use residual blocks for up/downsampling, if False use Conv. TYPE: bool default: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
# USE_NEW_ATTENTION_ORDER DESCRIPTION: Whether use new attention(qkv before split heads or not) or not. TYPE: bool default: True
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
# USE_SPATIAL_TRANSFORMER DESCRIPTION: Custom transformer which support the context, if context_dim is not None, the parameter must set True TYPE: bool default: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
# TRANSFORMER_DEPTH DESCRIPTION: Custom transformer's depth, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: list default: [1, 2, 10]
|
||||||
|
TRANSFORMER_DEPTH: [1, 2, 10]
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE DESCRIPTION: Custom transformer's depth of middle block, If set None, use TRANSFORMER_DEPTH last value. TYPE: NoneType default: None
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE: None
|
||||||
|
# CONTEXT_DIM DESCRIPTION: Custom context info, if set, USE_SPATIAL_TRANSFORMER also set True. TYPE: int default: 2048
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
# DISABLE_SELF_ATTENTIONS DESCRIPTION: Whether disable the self-attentions on some level, should be a list, [False, True, ...] TYPE: NoneType default: None
|
||||||
|
# DISABLE_SELF_ATTENTIONS: None
|
||||||
|
# NUM_ATTENTION_BLOCKS DESCRIPTION: The number of attention blocks for attention layer. TYPE: NoneType default: None
|
||||||
|
# NUM_ATTENTION_BLOCKS: None
|
||||||
|
# DISABLE_MIDDLE_SELF_ATTN DESCRIPTION: Whether disable the self-attentions in middle blocks. TYPE: bool default: False
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
# USE_LINEAR_IN_TRANSFORMER DESCRIPTION: Custom transformer's parameter, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: bool default: True
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
# ADM_IN_CHANNELS DESCRIPTION: Used when num_classes == 'sequential' or 'timestep'. TYPE: int default: 2816
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
# USE_SENTENCE_EMB DESCRIPTION: Used sentence emb or not, default False. TYPE: bool default: False
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
# USE_WORD_MAPPING DESCRIPTION: Used word mapping or not, default False. TYPE: bool default: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
TRANSFORMER_BLOCK_TYPE: att_v2
|
||||||
|
IMAGE_SCALE: 1.0
|
||||||
|
USE_REFINE: False
|
||||||
|
# FIRST_STAGE_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
# COND_STAGE_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'GeneralConditioner'
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
USE_GRAD: False
|
||||||
|
# EMBEDDERS DESCRIPTION: TYPE: default: ''
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'FrozenCLIPEmbedder'
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
# PRETRAINED_MODEL DESCRIPTION: TYPE: str default: ''
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
# MAX_LENGTH DESCRIPTION: TYPE: int default: 77
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
# FREEZE DESCRIPTION: TYPE: bool default: True
|
||||||
|
FREEZE: True
|
||||||
|
# LAYER DESCRIPTION: TYPE: str default: 'last'
|
||||||
|
LAYER: hidden
|
||||||
|
# LAYER_IDX DESCRIPTION: TYPE: NoneType default: None
|
||||||
|
LAYER_IDX: 11
|
||||||
|
# USE_FINAL_LAYER_NORM DESCRIPTION: TYPE: bool default: False
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["prompt"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'FrozenOpenCLIPEmbedder2'
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
# ARCH DESCRIPTION: TYPE: str default: 'ViT-H-14'
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
# MAX_LENGTH DESCRIPTION: TYPE: int default: 77
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
# FREEZE DESCRIPTION: TYPE: bool default: True
|
||||||
|
FREEZE: True
|
||||||
|
# ALWAYS_RETURN_POOLED DESCRIPTION: Whether always return pooled results or not ,default False. TYPE: bool default: False
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
# LEGACY DESCRIPTION: Whether use legacy returnd feature or not ,default True. TYPE: bool default: True
|
||||||
|
LEGACY: False
|
||||||
|
# LAYER DESCRIPTION: TYPE: str default: 'last'
|
||||||
|
LAYER: penultimate
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["prompt"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["original_size_as_tuple"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["crop_coords_top_left"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["target_size_as_tuple"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
NAME: IPAdapterPlusEmbedder
|
||||||
|
CLIP_DIR: ms://damo/LARGEN@models/clip_encoder/
|
||||||
|
PRETRAINED_MODEL: ms://damo/LARGEN@models/ip-adapter-plus_sdxl_vit-h.bin
|
||||||
|
INPUT_KEYS: [ "ref_ip", "ref_detail" ]
|
||||||
|
IN_DIM: 1280
|
||||||
|
HEADS: 20
|
||||||
|
CROSSATTN_DIM: 2048
|
||||||
|
-
|
||||||
|
NAME: TransparentEmbedder
|
||||||
|
INPUT_KEYS: [ "tar_x0", "tar_mask_latent" ]
|
||||||
|
-
|
||||||
|
NAME: NoiseConcatEmbedder
|
||||||
|
INPUT_KEYS: [ "tar_mask_latent", "masked_x0" ]
|
||||||
|
-
|
||||||
|
NAME: TransparentEmbedder
|
||||||
|
INPUT_KEYS: [ "ref_x0" ]
|
||||||
|
-
|
||||||
|
NAME: TransparentEmbedder
|
||||||
|
INPUT_KEYS: [ "task" ]
|
||||||
|
-
|
||||||
|
NAME: TransparentEmbedder
|
||||||
|
INPUT_KEYS: [ "image_scale" ]
|
||||||
@@ -0,0 +1,242 @@
|
|||||||
|
NAME: SD_XL1.0
|
||||||
|
IS_DEFAULT: True
|
||||||
|
DEFAULT_PARAS:
|
||||||
|
PARAS:
|
||||||
|
RESOLUTIONS: [[1024, 1024]]
|
||||||
|
INPUT:
|
||||||
|
IMAGE:
|
||||||
|
ORIGINAL_SIZE_AS_TUPLE: [1024, 1024]
|
||||||
|
TARGET_SIZE_AS_TUPLE: [1024, 1024]
|
||||||
|
AESTHETIC_SCORE: 6.0
|
||||||
|
NEGATIVE_AESTHETIC_SCORE: 2.5
|
||||||
|
PROMPT: ""
|
||||||
|
NEGATIVE_PROMPT: ""
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
CROP_COORDS_TOP_LEFT: [0, 0]
|
||||||
|
SAMPLE: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
REFINE_SAMPLE: ddim
|
||||||
|
REFINE_GUIDE_SCALE: 7.5
|
||||||
|
REFINE_GUIDE_RESCALE: 0.5
|
||||||
|
REFINE_DISCRETIZATION: trailing
|
||||||
|
OUTPUT:
|
||||||
|
LATENT:
|
||||||
|
BEFORE_REFINE_IMAGES:
|
||||||
|
IMAGES:
|
||||||
|
SEED:
|
||||||
|
MODULES_PARAS:
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode
|
||||||
|
DTYPE: float32
|
||||||
|
INPUT: ["IMAGE"]
|
||||||
|
-
|
||||||
|
NAME: decode
|
||||||
|
DTYPE: float32
|
||||||
|
INPUT: ["LATENT"]
|
||||||
|
PARAS:
|
||||||
|
# SCALE_FACTOR DESCRIPTION: The vae embeding scale. TYPE: float default: 0.18215
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: forward
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["SAMPLE_STEPS", "SAMPLE", "GUIDE_SCALE", "GUIDE_RESCALE", "DISCRETIZATION"]
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["ORIGINAL_SIZE_AS_TUPLE", "CROP_COORDS_TOP_LEFT", "PROMPT", "NEGATIVE_PROMPT"]
|
||||||
|
REFINER_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: forward
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["SAMPLE_STEPS", "REFINE_SAMPLE", "REFINE_GUIDE_SCALE", "REFINE_GUIDE_RESCALE", "REFINE_DISCRETIZATION"]
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["ORIGINAL_SIZE_AS_TUPLE", "AESTHETIC_SCORE", "NEGATIVE_AESTHETIC_SCORE", "CROP_COORDS_TOP_LEFT", "PROMPT", "NEGATIVE_PROMPT"]
|
||||||
|
|
||||||
|
MODEL:
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-xl-base-1.0@sd_xl_base_1.0.safetensors
|
||||||
|
# SCHEDULE_ARGS DESCRIPTION: TYPE: default: ''
|
||||||
|
SCHEDULE:
|
||||||
|
PARAMETERIZATION: "eps"
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: ''
|
||||||
|
NAME: "scaled_linear"
|
||||||
|
BETA_MIN: 0.00085
|
||||||
|
BETA_MAX: 0.0120
|
||||||
|
# DIFFUSION_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'DiffusionUNetXL'
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
# PRETRAINED_MODEL DESCRIPTION: Whole model's pretrained model path. TYPE: NoneType default: None
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
# IN_CHANNELS DESCRIPTION: Unet channels for input, considering the input image's channels. TYPE: int default: 4
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
# OUT_CHANNELS DESCRIPTION: Unet channels for output, considering the input image's channels. TYPE: int default: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
# NUM_RES_BLOCKS DESCRIPTION: The blocks's number of res. TYPE: int default: 2
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
# MODEL_CHANNELS DESCRIPTION: base channel count for the model. TYPE: int default: 320
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
# ATTENTION_RESOLUTIONS DESCRIPTION: A collection of downsample rates at which attention will take place. May be a set, list, or tuple. For example, if this contains 4, then at 4x downsampling, attentio will be used. TYPE: list default: [4, 2]
|
||||||
|
ATTENTION_RESOLUTIONS: [4, 2]
|
||||||
|
# DROPOUT DESCRIPTION: The dropout rate. TYPE: int default: 0
|
||||||
|
DROPOUT: 0
|
||||||
|
# CHANNEL_MULT DESCRIPTION: channel multiplier for each level of the UNet. TYPE: list default: [1, 2, 4]
|
||||||
|
CHANNEL_MULT: [1, 2, 4]
|
||||||
|
# CONV_RESAMPLE DESCRIPTION: Use conv to resample when downsample. TYPE: bool default: True
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
# DIMS DESCRIPTION: The Conv dims which 2 represent Conv2D. TYPE: int default: 2
|
||||||
|
DIMS: 2
|
||||||
|
# NUM_CLASSES DESCRIPTION: The class num for class guided setting, also can be set as continuous. TYPE: str default: 'sequential'
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
# USE_CHECKPOINT DESCRIPTION: Use gradient checkpointing to reduce memory usage. TYPE: bool default: False
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
# NUM_HEADS DESCRIPTION: The number of attention heads in each attention layer. TYPE: int default: -1
|
||||||
|
NUM_HEADS: -1
|
||||||
|
# NUM_HEADS_CHANNELS DESCRIPTION: If specified, ignore num_heads and instead use a fixed channel width per attention head. TYPE: int default: 64
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
# USE_SCALE_SHIFT_NORM DESCRIPTION: The scale and shift for the outnorm of RESBLOCK, use a FiLM-like conditioning mechanism. TYPE: bool default: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
# RESBLOCK_UPDOWN DESCRIPTION: Use residual blocks for up/downsampling, if False use Conv. TYPE: bool default: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
# USE_NEW_ATTENTION_ORDER DESCRIPTION: Whether use new attention(qkv before split heads or not) or not. TYPE: bool default: True
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
# USE_SPATIAL_TRANSFORMER DESCRIPTION: Custom transformer which support the context, if context_dim is not None, the parameter must set True TYPE: bool default: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
# TRANSFORMER_DEPTH DESCRIPTION: Custom transformer's depth, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: list default: [1, 2, 10]
|
||||||
|
TRANSFORMER_DEPTH: [1, 2, 10]
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE DESCRIPTION: Custom transformer's depth of middle block, If set None, use TRANSFORMER_DEPTH last value. TYPE: NoneType default: None
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE: None
|
||||||
|
# CONTEXT_DIM DESCRIPTION: Custom context info, if set, USE_SPATIAL_TRANSFORMER also set True. TYPE: int default: 2048
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
# DISABLE_SELF_ATTENTIONS DESCRIPTION: Whether disable the self-attentions on some level, should be a list, [False, True, ...] TYPE: NoneType default: None
|
||||||
|
# DISABLE_SELF_ATTENTIONS: None
|
||||||
|
# NUM_ATTENTION_BLOCKS DESCRIPTION: The number of attention blocks for attention layer. TYPE: NoneType default: None
|
||||||
|
# NUM_ATTENTION_BLOCKS: None
|
||||||
|
# DISABLE_MIDDLE_SELF_ATTN DESCRIPTION: Whether disable the self-attentions in middle blocks. TYPE: bool default: False
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
# USE_LINEAR_IN_TRANSFORMER DESCRIPTION: Custom transformer's parameter, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: bool default: True
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
# ADM_IN_CHANNELS DESCRIPTION: Used when num_classes == 'sequential' or 'timestep'. TYPE: int default: 2816
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
# USE_SENTENCE_EMB DESCRIPTION: Used sentence emb or not, default False. TYPE: bool default: False
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
# USE_WORD_MAPPING DESCRIPTION: Used word mapping or not, default False. TYPE: bool default: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
# FIRST_STAGE_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
# COND_STAGE_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'GeneralConditioner'
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
USE_GRAD: False
|
||||||
|
# EMBEDDERS DESCRIPTION: TYPE: default: ''
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'FrozenCLIPEmbedder'
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
# PRETRAINED_MODEL DESCRIPTION: TYPE: str default: ''
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
# MAX_LENGTH DESCRIPTION: TYPE: int default: 77
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
# FREEZE DESCRIPTION: TYPE: bool default: True
|
||||||
|
FREEZE: True
|
||||||
|
# LAYER DESCRIPTION: TYPE: str default: 'last'
|
||||||
|
LAYER: hidden
|
||||||
|
# LAYER_IDX DESCRIPTION: TYPE: NoneType default: None
|
||||||
|
LAYER_IDX: 11
|
||||||
|
# USE_FINAL_LAYER_NORM DESCRIPTION: TYPE: bool default: False
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["prompt"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'FrozenOpenCLIPEmbedder2'
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
# ARCH DESCRIPTION: TYPE: str default: 'ViT-H-14'
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
# MAX_LENGTH DESCRIPTION: TYPE: int default: 77
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
# FREEZE DESCRIPTION: TYPE: bool default: True
|
||||||
|
FREEZE: True
|
||||||
|
# ALWAYS_RETURN_POOLED DESCRIPTION: Whether always return pooled results or not ,default False. TYPE: bool default: False
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
# LEGACY DESCRIPTION: Whether use legacy returnd feature or not ,default True. TYPE: bool default: True
|
||||||
|
LEGACY: False
|
||||||
|
# LAYER DESCRIPTION: TYPE: str default: 'last'
|
||||||
|
LAYER: penultimate
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["prompt"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["original_size_as_tuple"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["crop_coords_top_left"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["target_size_as_tuple"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
NAME: SD1.5
|
||||||
|
IS_DEFAULT: False
|
||||||
|
DEFAULT_PARAS:
|
||||||
|
PARAS:
|
||||||
|
RESOLUTIONS: [[512, 512]]
|
||||||
|
INPUT:
|
||||||
|
IMAGE:
|
||||||
|
PROMPT: ""
|
||||||
|
NEGATIVE_PROMPT: ""
|
||||||
|
TARGET_SIZE_AS_TUPLE: [512, 512]
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
SAMPLE: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
OUTPUT:
|
||||||
|
LATENT:
|
||||||
|
IMAGES:
|
||||||
|
SEED:
|
||||||
|
MODULES_PARAS:
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["IMAGE"]
|
||||||
|
-
|
||||||
|
NAME: decode
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["LATENT"]
|
||||||
|
PARAS:
|
||||||
|
# SCALE_FACTOR DESCRIPTION: The vae embeding scale. TYPE: float default: 0.18215
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: forward
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["SAMPLE_STEPS", "SAMPLE", "GUIDE_SCALE", "GUIDE_RESCALE", "DISCRETIZATION"]
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode_text
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["PROMPT", "NEGATIVE_PROMPT"]
|
||||||
|
|
||||||
|
MODEL:
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-v1-5@v1-5-pruned-emaonly.safetensors
|
||||||
|
SCHEDULE:
|
||||||
|
PARAMETERIZATION: "eps"
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: ''
|
||||||
|
NAME: "scaled_linear"
|
||||||
|
BETA_MIN: 0.00085
|
||||||
|
BETA_MAX: 0.0120
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS: 8
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 768
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: False
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: ClipTokenizer
|
||||||
|
PRETRAINED_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
LENGTH: 77
|
||||||
|
CLEAN: True
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
FREEZE: True
|
||||||
|
USE_GRAD: False
|
||||||
|
LAYER: last
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
NAME: SD2.1
|
||||||
|
IS_DEFAULT: False
|
||||||
|
DEFAULT_PARAS:
|
||||||
|
PARAS:
|
||||||
|
RESOLUTIONS: [[768, 768]]
|
||||||
|
INPUT:
|
||||||
|
IMAGE:
|
||||||
|
PROMPT: ""
|
||||||
|
NEGATIVE_PROMPT: ""
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
TARGET_SIZE_AS_TUPLE: [768, 768]
|
||||||
|
SAMPLE: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE: 0.5
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
OUTPUT:
|
||||||
|
LATENT:
|
||||||
|
IMAGES:
|
||||||
|
SEED:
|
||||||
|
MODULES_PARAS:
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["IMAGE"]
|
||||||
|
-
|
||||||
|
NAME: decode
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["LATENT"]
|
||||||
|
PARAS:
|
||||||
|
# SCALE_FACTOR DESCRIPTION: The vae embeding scale. TYPE: float default: 0.18215
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: forward
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["SAMPLE_STEPS", "SAMPLE", "GUIDE_SCALE", "GUIDE_RESCALE", "DISCRETIZATION"]
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
FUNCTION:
|
||||||
|
-
|
||||||
|
NAME: encode_text
|
||||||
|
DTYPE: float16
|
||||||
|
INPUT: ["PROMPT", "NEGATIVE_PROMPT"]
|
||||||
|
|
||||||
|
MODEL:
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-2-1@v2-1_768-ema-pruned.safetensors
|
||||||
|
SCHEDULE:
|
||||||
|
PARAMETERIZATION: "v"
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: ''
|
||||||
|
NAME: "scaled_linear"
|
||||||
|
BETA_MIN: 0.00085
|
||||||
|
BETA_MAX: 0.0120
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 1024
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: OpenClipTokenizer
|
||||||
|
LENGTH: 77
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenOpenCLIPEmbedder
|
||||||
|
ARCH: ViT-H-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
LAYER: penultimate
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
WORK_DIR: datasets
|
||||||
|
EXPORT_DIR: export_datasets
|
||||||
|
FILE_SYSTEM:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: ''
|
||||||
|
NAME: LocalFs
|
||||||
|
AUTO_CLEAN: False
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
HOST: "localhost"
|
||||||
|
PORT: 2024
|
||||||
|
ROOT: ""
|
||||||
|
TITLE: SCEPTER Studio
|
||||||
|
BANNER: |
|
||||||
|
<style>
|
||||||
|
.banner {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
color: #2a2a2a;
|
||||||
|
padding: 35px;
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
text-align: center;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.qr-codes {
|
||||||
|
position: absolute;
|
||||||
|
right: 20px;
|
||||||
|
display: flex;
|
||||||
|
gap: 15px;
|
||||||
|
}
|
||||||
|
.qr-code-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.qr-codes img {
|
||||||
|
height: 80px;
|
||||||
|
width: 80px;
|
||||||
|
}
|
||||||
|
.caption {
|
||||||
|
color: #2a2a2a;
|
||||||
|
font-size: 0.8em;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<div class="banner">
|
||||||
|
<div class="title">
|
||||||
|
<h1>🪄SCEPTER Studio</h1>
|
||||||
|
</div>
|
||||||
|
<div class="qr-codes">
|
||||||
|
<div class="qr-code-container">
|
||||||
|
<img src="https://modelscope.cn/api/v1/models/damo/scepter/repo?Revision=master&FilePath=assets/scepter_studio/ms_scepter_studio_qr.png" alt="ms_scepter_studio_qr">
|
||||||
|
<div class="caption"><a href="https://www.modelscope.cn/studios/iic/scepter_studio">Modelscope Studio</a></div>
|
||||||
|
</div>
|
||||||
|
<div class="qr-code-container">
|
||||||
|
<img src="https://modelscope.cn/api/v1/models/damo/scepter/repo?Revision=master&FilePath=assets/scepter_studio/scepter_github_qr.png" alt="scepter_github_qr">
|
||||||
|
<div class="caption"><a href="https://github.com/modelscope/scepter">Github</a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
WORK_DIR: "cache/scepter_ui"
|
||||||
|
FILE_SYSTEM:
|
||||||
|
-
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "cache/cache_data"
|
||||||
|
-
|
||||||
|
NAME: "HttpFs"
|
||||||
|
TEMP_DIR: "cache/cache_data"
|
||||||
|
INTERFACE:
|
||||||
|
- NAME: 首页
|
||||||
|
NAME_EN: Home
|
||||||
|
IFID: home
|
||||||
|
CONFIG: scepter/methods/studio/home/home.yaml
|
||||||
|
- NAME: 数据管理
|
||||||
|
NAME_EN: Dataset Management
|
||||||
|
IFID: preprocess
|
||||||
|
CONFIG: scepter/methods/studio/preprocess/preprocess.yaml
|
||||||
|
- NAME: 训练
|
||||||
|
NAME_EN: Train
|
||||||
|
IFID: self_train
|
||||||
|
CONFIG: scepter/methods/studio/self_train/self_train.yaml
|
||||||
|
- NAME: 模型管理
|
||||||
|
NAME_EN: Tuner Management
|
||||||
|
IFID: tuner_manager
|
||||||
|
CONFIG: scepter/methods/studio/tuner_manager/tuner_manager.yaml
|
||||||
|
- NAME: 推理
|
||||||
|
NAME_EN: Inference
|
||||||
|
IFID: inference
|
||||||
|
CONFIG: scepter/methods/studio/inference/inference.yaml
|
||||||
@@ -0,0 +1,631 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
|
||||||
|
META:
|
||||||
|
VERSION: 'SD_XL1.0'
|
||||||
|
DESCRIPTION: "Stable Diffusion XL1.0"
|
||||||
|
IS_DEFAULT: True
|
||||||
|
INFERENCE_PARAS:
|
||||||
|
INFERENCE_BATCH_SIZE: 1
|
||||||
|
INFERENCE_PREFIX: ""
|
||||||
|
DEFAULT_SAMPLER: "dpmpp_2s_ancestral"
|
||||||
|
DEFAULT_SAMPLE_STEPS: 40
|
||||||
|
INFERENCE_N_PROMPT: ""
|
||||||
|
RESOLUTION: [1024, 1024]
|
||||||
|
PARAS:
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [1024, 1024]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 50
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: FULL
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [1024, 1024]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 50
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: LORA
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [1024, 1024]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 200
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: SCE
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [1024, 1024]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 200
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: True
|
||||||
|
TUNER: TEXT_SCE
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [1024, 1024]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 50
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: TEXT_LORA
|
||||||
|
|
||||||
|
TUNERS:
|
||||||
|
LORA:
|
||||||
|
-
|
||||||
|
NAME: SwiftLoRA
|
||||||
|
R: 256
|
||||||
|
LORA_ALPHA: 256
|
||||||
|
LORA_DROPOUT: 0.0
|
||||||
|
BIAS: "none"
|
||||||
|
TARGET_MODULES: "model.*(to_q|to_k|to_v|to_out.0|net.0.proj|net.2)$"
|
||||||
|
TEXT_LORA:
|
||||||
|
-
|
||||||
|
NAME: SwiftLoRA
|
||||||
|
R: 256
|
||||||
|
LORA_ALPHA: 256
|
||||||
|
LORA_DROPOUT: 0.0
|
||||||
|
BIAS: "none"
|
||||||
|
TARGET_MODULES: "(cond_stage_model.embedders.0.*(q_proj|k_proj|v_proj|out_proj|mlp.fc1|mlp.fc2))|(model.*(to_q|to_k|to_v|to_out.0|net.0.proj|net.2))$"
|
||||||
|
SCE:
|
||||||
|
-
|
||||||
|
NAME: SwiftSCETuning
|
||||||
|
DIMS: [1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
||||||
|
TARGET_MODULES: model.lsc_identity\.\d+$
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
TUNER_MODE: identity
|
||||||
|
TEXT_SCE:
|
||||||
|
-
|
||||||
|
NAME: SwiftSCETuning
|
||||||
|
DIMS: [ 1280, 1280, 640, 640, 640, 320, 320, 320, 320 ]
|
||||||
|
TARGET_MODULES: model.lsc_identity\.\d+$
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
TUNER_MODE: identity
|
||||||
|
-
|
||||||
|
NAME: SwiftLoRA
|
||||||
|
R: 256
|
||||||
|
LORA_ALPHA: 256
|
||||||
|
LORA_DROPOUT: 0.0
|
||||||
|
BIAS: "none"
|
||||||
|
TARGET_MODULES: "cond_stage_model.embedders.0.*(q_proj|k_proj|v_proj|out_proj|mlp.fc1|mlp.fc2)$"
|
||||||
|
|
||||||
|
MODIFY_PARAS:
|
||||||
|
TEXT_LORA:
|
||||||
|
TRAIN:
|
||||||
|
SOLVER.MODEL.COND_STAGE_MODEL.USE_GRAD: True
|
||||||
|
TEXT_SCE:
|
||||||
|
TRAIN:
|
||||||
|
SOLVER.MODEL.COND_STAGE_MODEL.USE_GRAD: True
|
||||||
|
|
||||||
|
SOLVER:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'LatentDiffusionSolver'
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
# MAX_STEPS DESCRIPTION: The total steps for training. TYPE: int default: 100000
|
||||||
|
MAX_STEPS: 2000
|
||||||
|
# USE_AMP DESCRIPTION: Use amp to surpport mix precision or not, default is False. TYPE: bool default: False
|
||||||
|
USE_AMP: False
|
||||||
|
# DTYPE DESCRIPTION: The precision for training. TYPE: str default: 'float32'
|
||||||
|
DTYPE: float16
|
||||||
|
# USE_FAIRSCALE DESCRIPTION: Use fairscale as the backend of ddp, default False. TYPE: bool default: False
|
||||||
|
USE_FAIRSCALE: False
|
||||||
|
# USE_FSDP DESCRIPTION: Use fsdp as the backend of ddp, default False. TYPE: bool default: False
|
||||||
|
USE_FSDP: False
|
||||||
|
# SHARDING_STRATEGY DESCRIPTION: The shard strategy for fsdp, select from ['full_shard', 'shard_grad_op'] TYPE: str default: 'shard_grad_op'
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
# LOAD_MODEL_ONLY DESCRIPTION: Only load the model rather than the optimizer and schedule, default is False. TYPE: bool default: False
|
||||||
|
LOAD_MODEL_ONLY: False
|
||||||
|
# CHANNELS_LAST DESCRIPTION: The channels last, default is False. TYPE: bool default: False
|
||||||
|
CHANNELS_LAST: False
|
||||||
|
# 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: -1
|
||||||
|
# NUM_FOLDS DESCRIPTION: Num folds for training. TYPE: int default: 1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
#
|
||||||
|
EVAL_INTERVAL: -1
|
||||||
|
# WORK_DIR DESCRIPTION: Save dir of the training log or model. TYPE: str default: ''
|
||||||
|
WORK_DIR:
|
||||||
|
# LOG_FILE DESCRIPTION: Save log path. TYPE: str default: ''
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
TUNER:
|
||||||
|
# MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
MODEL:
|
||||||
|
# NAME DESCRIPTION:
|
||||||
|
NAME: LatentDiffusionXL
|
||||||
|
# PARAMETERIZATION DESCRIPTION: The prediction type, you can choose from 'eps' and 'x0' and 'v' TYPE: str default: 'v'
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
# TIMESTEPS DESCRIPTION: The schedule steps for diffusion. TYPE: int default: 1000
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
# MIN_SNR_GAMMA DESCRIPTION: The minimum snr gamma, default is None. TYPE: NoneType default: None
|
||||||
|
# MIN_SNR_GAMMA: None
|
||||||
|
# ZERO_TERMINAL_SNR DESCRIPTION: Whether zero terminal snr, default is False. TYPE: bool default: False
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
# PRETRAINED_MODEL DESCRIPTION: Whole model's pretrained model path. TYPE: NoneType default: None
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-xl-base-1.0@sd_xl_base_1.0.safetensors
|
||||||
|
# IGNORE_KEYS DESCRIPTION: The ignore keys for pretrain model loaded. TYPE: list default: []
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
# SCALE_FACTOR DESCRIPTION: The vae embeding scale. TYPE: float default: 0.18215
|
||||||
|
SCALE_FACTOR: 0.13025
|
||||||
|
# SIZE_FACTOR DESCRIPTION: The vae size factor. TYPE: int default: 8
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
# DEFAULT_N_PROMPT DESCRIPTION: The default negtive prompt. TYPE: str default: ''
|
||||||
|
DEFAULT_N_PROMPT: ""
|
||||||
|
# TRAIN_N_PROMPT DESCRIPTION: The negtive prompt used in train phase. TYPE: str default: ''
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
# P_ZERO DESCRIPTION: The prob for zero or negtive prompt. TYPE: float default: 0.0
|
||||||
|
P_ZERO: 0.1
|
||||||
|
# USE_EMA DESCRIPTION: Use Ema or not. Default True TYPE: bool default: True
|
||||||
|
USE_EMA: False
|
||||||
|
LOAD_REFINER: False
|
||||||
|
# SCHEDULE_ARGS DESCRIPTION: TYPE: default: ''
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: ''
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.0120
|
||||||
|
# DIFFUSION_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'DiffusionUNetXL'
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
# PRETRAINED_MODEL DESCRIPTION: Whole model's pretrained model path. TYPE: NoneType default: None
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
# IN_CHANNELS DESCRIPTION: Unet channels for input, considering the input image's channels. TYPE: int default: 4
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
# OUT_CHANNELS DESCRIPTION: Unet channels for output, considering the input image's channels. TYPE: int default: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
# NUM_RES_BLOCKS DESCRIPTION: The blocks's number of res. TYPE: int default: 2
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
# MODEL_CHANNELS DESCRIPTION: base channel count for the model. TYPE: int default: 320
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
# ATTENTION_RESOLUTIONS DESCRIPTION: A collection of downsample rates at which attention will take place. May be a set, list, or tuple. For example, if this contains 4, then at 4x downsampling, attentio will be used. TYPE: list default: [4, 2]
|
||||||
|
ATTENTION_RESOLUTIONS: [4, 2]
|
||||||
|
# DROPOUT DESCRIPTION: The dropout rate. TYPE: int default: 0
|
||||||
|
DROPOUT: 0
|
||||||
|
# CHANNEL_MULT DESCRIPTION: channel multiplier for each level of the UNet. TYPE: list default: [1, 2, 4]
|
||||||
|
CHANNEL_MULT: [1, 2, 4]
|
||||||
|
# CONV_RESAMPLE DESCRIPTION: Use conv to resample when downsample. TYPE: bool default: True
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
# DIMS DESCRIPTION: The Conv dims which 2 represent Conv2D. TYPE: int default: 2
|
||||||
|
DIMS: 2
|
||||||
|
# NUM_CLASSES DESCRIPTION: The class num for class guided setting, also can be set as continuous. TYPE: str default: 'sequential'
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
# USE_CHECKPOINT DESCRIPTION: Use gradient checkpointing to reduce memory usage. TYPE: bool default: False
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
# NUM_HEADS DESCRIPTION: The number of attention heads in each attention layer. TYPE: int default: -1
|
||||||
|
NUM_HEADS: -1
|
||||||
|
# NUM_HEADS_CHANNELS DESCRIPTION: If specified, ignore num_heads and instead use a fixed channel width per attention head. TYPE: int default: 64
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
# USE_SCALE_SHIFT_NORM DESCRIPTION: The scale and shift for the outnorm of RESBLOCK, use a FiLM-like conditioning mechanism. TYPE: bool default: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
# RESBLOCK_UPDOWN DESCRIPTION: Use residual blocks for up/downsampling, if False use Conv. TYPE: bool default: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
# USE_NEW_ATTENTION_ORDER DESCRIPTION: Whether use new attention(qkv before split heads or not) or not. TYPE: bool default: True
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
# USE_SPATIAL_TRANSFORMER DESCRIPTION: Custom transformer which support the context, if context_dim is not None, the parameter must set True TYPE: bool default: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
# TRANSFORMER_DEPTH DESCRIPTION: Custom transformer's depth, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: list default: [1, 2, 10]
|
||||||
|
TRANSFORMER_DEPTH: [1, 2, 10]
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE DESCRIPTION: Custom transformer's depth of middle block, If set None, use TRANSFORMER_DEPTH last value. TYPE: NoneType default: None
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE: None
|
||||||
|
# CONTEXT_DIM DESCRIPTION: Custom context info, if set, USE_SPATIAL_TRANSFORMER also set True. TYPE: int default: 2048
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
# DISABLE_SELF_ATTENTIONS DESCRIPTION: Whether disable the self-attentions on some level, should be a list, [False, True, ...] TYPE: NoneType default: None
|
||||||
|
# DISABLE_SELF_ATTENTIONS: None
|
||||||
|
# NUM_ATTENTION_BLOCKS DESCRIPTION: The number of attention blocks for attention layer. TYPE: NoneType default: None
|
||||||
|
# NUM_ATTENTION_BLOCKS: None
|
||||||
|
# DISABLE_MIDDLE_SELF_ATTN DESCRIPTION: Whether disable the self-attentions in middle blocks. TYPE: bool default: False
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
# USE_LINEAR_IN_TRANSFORMER DESCRIPTION: Custom transformer's parameter, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: bool default: True
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
# ADM_IN_CHANNELS DESCRIPTION: Used when num_classes == 'sequential' or 'timestep'. TYPE: int default: 2816
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
# USE_SENTENCE_EMB DESCRIPTION: Used sentence emb or not, default False. TYPE: bool default: False
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
# USE_WORD_MAPPING DESCRIPTION: Used word mapping or not, default False. TYPE: bool default: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
# DIFFUSION_MODEL_EMA DESCRIPTION: TYPE: default: ''
|
||||||
|
DIFFUSION_MODEL_EMA:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'DiffusionUNetXL'
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
# IN_CHANNELS DESCRIPTION: Unet channels for input, considering the input image's channels. TYPE: int default: 4
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
# OUT_CHANNELS DESCRIPTION: Unet channels for output, considering the input image's channels. TYPE: int default: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
# NUM_RES_BLOCKS DESCRIPTION: The blocks's number of res. TYPE: int default: 2
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
# MODEL_CHANNELS DESCRIPTION: base channel count for the model. TYPE: int default: 320
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
# ATTENTION_RESOLUTIONS DESCRIPTION: A collection of downsample rates at which attention will take place. May be a set, list, or tuple. For example, if this contains 4, then at 4x downsampling, attentio will be used. TYPE: list default: [4, 2]
|
||||||
|
ATTENTION_RESOLUTIONS: [4, 2]
|
||||||
|
# DROPOUT DESCRIPTION: The dropout rate. TYPE: int default: 0
|
||||||
|
DROPOUT: 0
|
||||||
|
# CHANNEL_MULT DESCRIPTION: channel multiplier for each level of the UNet. TYPE: list default: [1, 2, 4]
|
||||||
|
CHANNEL_MULT: [1, 2, 4]
|
||||||
|
# CONV_RESAMPLE DESCRIPTION: Use conv to resample when downsample. TYPE: bool default: True
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
# DIMS DESCRIPTION: The Conv dims which 2 represent Conv2D. TYPE: int default: 2
|
||||||
|
DIMS: 2
|
||||||
|
# NUM_CLASSES DESCRIPTION: The class num for class guided setting, also can be set as continuous. TYPE: str default: 'sequential'
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
# USE_CHECKPOINT DESCRIPTION: Use gradient checkpointing to reduce memory usage. TYPE: bool default: False
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
# NUM_HEADS DESCRIPTION: The number of attention heads in each attention layer. TYPE: int default: -1
|
||||||
|
NUM_HEADS: -1
|
||||||
|
# NUM_HEADS_CHANNELS DESCRIPTION: If specified, ignore num_heads and instead use a fixed channel width per attention head. TYPE: int default: 64
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
# USE_SCALE_SHIFT_NORM DESCRIPTION: The scale and shift for the outnorm of RESBLOCK, use a FiLM-like conditioning mechanism. TYPE: bool default: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
# RESBLOCK_UPDOWN DESCRIPTION: Use residual blocks for up/downsampling, if False use Conv. TYPE: bool default: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
# USE_NEW_ATTENTION_ORDER DESCRIPTION: Whether use new attention(qkv before split heads or not) or not. TYPE: bool default: True
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
# USE_SPATIAL_TRANSFORMER DESCRIPTION: Custom transformer which support the context, if context_dim is not None, the parameter must set True TYPE: bool default: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
# TRANSFORMER_DEPTH DESCRIPTION: Custom transformer's depth, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: list default: [1, 2, 10]
|
||||||
|
TRANSFORMER_DEPTH: [1, 2, 10]
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE DESCRIPTION: Custom transformer's depth of middle block, If set None, use TRANSFORMER_DEPTH last value. TYPE: NoneType default: None
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE: None
|
||||||
|
# CONTEXT_DIM DESCRIPTION: Custom context info, if set, USE_SPATIAL_TRANSFORMER also set True. TYPE: int default: 2048
|
||||||
|
CONTEXT_DIM: 2048
|
||||||
|
# DISABLE_SELF_ATTENTIONS DESCRIPTION: Whether disable the self-attentions on some level, should be a list, [False, True, ...] TYPE: NoneType default: None
|
||||||
|
# DISABLE_SELF_ATTENTIONS: None
|
||||||
|
# NUM_ATTENTION_BLOCKS DESCRIPTION: The number of attention blocks for attention layer. TYPE: NoneType default: None
|
||||||
|
# NUM_ATTENTION_BLOCKS: None
|
||||||
|
# DISABLE_MIDDLE_SELF_ATTN DESCRIPTION: Whether disable the self-attentions in middle blocks. TYPE: bool default: False
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
# USE_LINEAR_IN_TRANSFORMER DESCRIPTION: Custom transformer's parameter, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: bool default: True
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
# ADM_IN_CHANNELS DESCRIPTION: Used when num_classes == 'sequential' or 'timestep'. TYPE: int default: 2816
|
||||||
|
ADM_IN_CHANNELS: 2816
|
||||||
|
# USE_SENTENCE_EMB DESCRIPTION: Used sentence emb or not, default False. TYPE: bool default: False
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
# USE_WORD_MAPPING DESCRIPTION: Used word mapping or not, default False. TYPE: bool default: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
# FIRST_STAGE_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
# COND_STAGE_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'GeneralConditioner'
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
USE_GRAD: False
|
||||||
|
# EMBEDDERS DESCRIPTION: TYPE: default: ''
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'FrozenCLIPEmbedder'
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
TOKENIZER_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
# MAX_LENGTH DESCRIPTION: TYPE: int default: 77
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
# FREEZE DESCRIPTION: TYPE: bool default: True
|
||||||
|
FREEZE: True
|
||||||
|
# LAYER DESCRIPTION: TYPE: str default: 'last'
|
||||||
|
LAYER: hidden
|
||||||
|
# LAYER_IDX DESCRIPTION: TYPE: NoneType default: None
|
||||||
|
LAYER_IDX: 11
|
||||||
|
# USE_FINAL_LAYER_NORM DESCRIPTION: TYPE: bool default: False
|
||||||
|
USE_FINAL_LAYER_NORM: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["prompt"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'FrozenOpenCLIPEmbedder2'
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
# ARCH DESCRIPTION: TYPE: str default: 'ViT-H-14'
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
# MAX_LENGTH DESCRIPTION: TYPE: int default: 77
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
# FREEZE DESCRIPTION: TYPE: bool default: True
|
||||||
|
FREEZE: True
|
||||||
|
# ALWAYS_RETURN_POOLED DESCRIPTION: Whether always return pooled results or not ,default False. TYPE: bool default: False
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
# LEGACY DESCRIPTION: Whether use legacy returnd feature or not ,default True. TYPE: bool default: True
|
||||||
|
LEGACY: False
|
||||||
|
# LAYER DESCRIPTION: TYPE: str default: 'last'
|
||||||
|
LAYER: penultimate
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["prompt"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["original_size_as_tuple"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["crop_coords_top_left"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["target_size_as_tuple"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
# APPLY REFINER
|
||||||
|
REFINER_MODEL:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'DiffusionUNetXL'
|
||||||
|
NAME: DiffusionUNetXL
|
||||||
|
# PRETRAINED_MODEL DESCRIPTION: Whole model's pretrained model path. TYPE: NoneType default: None
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
# IN_CHANNELS DESCRIPTION: Unet channels for input, considering the input image's channels. TYPE: int default: 4
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
# OUT_CHANNELS DESCRIPTION: Unet channels for output, considering the input image's channels. TYPE: int default: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
# NUM_RES_BLOCKS DESCRIPTION: The blocks's number of res. TYPE: int default: 2
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
# MODEL_CHANNELS DESCRIPTION: base channel count for the model. TYPE: int default: 320
|
||||||
|
MODEL_CHANNELS: 384
|
||||||
|
# ATTENTION_RESOLUTIONS DESCRIPTION: A collection of downsample rates at which attention will take place. May be a set, list, or tuple. For example, if this contains 4, then at 4x downsampling, attentio will be used. TYPE: list default: [4, 2]
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2 ]
|
||||||
|
# DROPOUT DESCRIPTION: The dropout rate. TYPE: int default: 0
|
||||||
|
DROPOUT: 0
|
||||||
|
# CHANNEL_MULT DESCRIPTION: channel multiplier for each level of the UNet. TYPE: list default: [1, 2, 4]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
# CONV_RESAMPLE DESCRIPTION: Use conv to resample when downsample. TYPE: bool default: True
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
# DIMS DESCRIPTION: The Conv dims which 2 represent Conv2D. TYPE: int default: 2
|
||||||
|
DIMS: 2
|
||||||
|
# NUM_CLASSES DESCRIPTION: The class num for class guided setting, also can be set as continuous. TYPE: str default: 'sequential'
|
||||||
|
NUM_CLASSES: sequential
|
||||||
|
# USE_CHECKPOINT DESCRIPTION: Use gradient checkpointing to reduce memory usage. TYPE: bool default: False
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
# NUM_HEADS DESCRIPTION: The number of attention heads in each attention layer. TYPE: int default: -1
|
||||||
|
NUM_HEADS: -1
|
||||||
|
# NUM_HEADS_CHANNELS DESCRIPTION: If specified, ignore num_heads and instead use a fixed channel width per attention head. TYPE: int default: 64
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
# USE_SCALE_SHIFT_NORM DESCRIPTION: The scale and shift for the outnorm of RESBLOCK, use a FiLM-like conditioning mechanism. TYPE: bool default: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
# RESBLOCK_UPDOWN DESCRIPTION: Use residual blocks for up/downsampling, if False use Conv. TYPE: bool default: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
# USE_NEW_ATTENTION_ORDER DESCRIPTION: Whether use new attention(qkv before split heads or not) or not. TYPE: bool default: True
|
||||||
|
USE_NEW_ATTENTION_ORDER: True
|
||||||
|
# USE_SPATIAL_TRANSFORMER DESCRIPTION: Custom transformer which support the context, if context_dim is not None, the parameter must set True TYPE: bool default: True
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
# TRANSFORMER_DEPTH DESCRIPTION: Custom transformer's depth, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: list default: [1, 2, 10]
|
||||||
|
TRANSFORMER_DEPTH: 4
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE DESCRIPTION: Custom transformer's depth of middle block, If set None, use TRANSFORMER_DEPTH last value. TYPE: NoneType default: None
|
||||||
|
# TRANSFORMER_DEPTH_MIDDLE: None
|
||||||
|
# CONTEXT_DIM DESCRIPTION: Custom context info, if set, USE_SPATIAL_TRANSFORMER also set True. TYPE: int default: 2048
|
||||||
|
CONTEXT_DIM: [ 1280, 1280, 1280, 1280 ]
|
||||||
|
# DISABLE_SELF_ATTENTIONS DESCRIPTION: Whether disable the self-attentions on some level, should be a list, [False, True, ...] TYPE: NoneType default: None
|
||||||
|
# DISABLE_SELF_ATTENTIONS: None
|
||||||
|
# NUM_ATTENTION_BLOCKS DESCRIPTION: The number of attention blocks for attention layer. TYPE: NoneType default: None
|
||||||
|
# NUM_ATTENTION_BLOCKS: None
|
||||||
|
# DISABLE_MIDDLE_SELF_ATTN DESCRIPTION: Whether disable the self-attentions in middle blocks. TYPE: bool default: False
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
# USE_LINEAR_IN_TRANSFORMER DESCRIPTION: Custom transformer's parameter, valid when USE_SPATIAL_TRANSFORMER is True. TYPE: bool default: True
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
# ADM_IN_CHANNELS DESCRIPTION: Used when num_classes == 'sequential' or 'timestep'. TYPE: int default: 2816
|
||||||
|
ADM_IN_CHANNELS: 2560
|
||||||
|
# USE_SENTENCE_EMB DESCRIPTION: Used sentence emb or not, default False. TYPE: bool default: False
|
||||||
|
USE_SENTENCE_EMB: False
|
||||||
|
# USE_WORD_MAPPING DESCRIPTION: Used word mapping or not, default False. TYPE: bool default: False
|
||||||
|
USE_WORD_MAPPING: False
|
||||||
|
# COND_STAGE_MODEL DESCRIPTION: TYPE: default: ''
|
||||||
|
REFINER_COND_MODEL:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'GeneralConditioner'
|
||||||
|
NAME: GeneralConditioner
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
# EMBEDDERS DESCRIPTION: TYPE: default: ''
|
||||||
|
EMBEDDERS:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'FrozenOpenCLIPEmbedder2'
|
||||||
|
NAME: FrozenOpenCLIPEmbedder2
|
||||||
|
# ARCH DESCRIPTION: TYPE: str default: 'ViT-H-14'
|
||||||
|
ARCH: ViT-bigG-14
|
||||||
|
# MAX_LENGTH DESCRIPTION: TYPE: int default: 77
|
||||||
|
MAX_LENGTH: 77
|
||||||
|
# FREEZE DESCRIPTION: TYPE: bool default: True
|
||||||
|
FREEZE: True
|
||||||
|
# ALWAYS_RETURN_POOLED DESCRIPTION: Whether always return pooled results or not ,default False. TYPE: bool default: False
|
||||||
|
ALWAYS_RETURN_POOLED: True
|
||||||
|
# LEGACY DESCRIPTION: Whether use legacy returnd feature or not ,default True. TYPE: bool default: True
|
||||||
|
LEGACY: False
|
||||||
|
# LAYER DESCRIPTION: TYPE: str default: 'last'
|
||||||
|
LAYER: penultimate
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["prompt"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["original_size_as_tuple"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["crop_coords_top_left"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
-
|
||||||
|
# NAME DESCRIPTION: TYPE: default: 'ConcatTimestepEmbedderND'
|
||||||
|
NAME: ConcatTimestepEmbedderND
|
||||||
|
# OUT_DIM DESCRIPTION: Output dim TYPE: int default: 256
|
||||||
|
OUT_DIM: 256
|
||||||
|
IS_TRAINABLE: False
|
||||||
|
UCG_RATE: 0.0
|
||||||
|
INPUT_KEYS: ["aesthetic_score"]
|
||||||
|
LEGACY_UCG_VALUE:
|
||||||
|
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 5.0
|
||||||
|
GUIDE_RESCALE:
|
||||||
|
DISCRETIZATION: linspace
|
||||||
|
IMAGE_SIZE: [ 1024, 1024]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
# OPTIMIZER DESCRIPTION: TYPE: default: ''
|
||||||
|
OPTIMIZER:
|
||||||
|
# NAME DESCRIPTION: TYPE: default: ''
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.0064
|
||||||
|
EPS: 1e-8
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
#
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleResize
|
||||||
|
INTERPOLATION: bicubic
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: FlexibleCropXL
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'img', 'prompt', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left' ]
|
||||||
|
META_KEYS: ['data_key', 'img_path']
|
||||||
|
- NAME: Rename
|
||||||
|
INPUT_KEY: [ 'img', 'img_original_size_as_tuple', 'img_target_size_as_tuple', 'img_crop_coords_top_left']
|
||||||
|
OUTPUT_KEY: [ 'image', 'original_size_as_tuple', 'target_size_as_tuple', 'crop_coords_top_left' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: Text2ImageDataset
|
||||||
|
MODE: eval
|
||||||
|
PROMPT_FILE:
|
||||||
|
PROMPT_DATA: [ "a boy wearing a jacket", "a dog running on the lawn" ]
|
||||||
|
IMAGE_SIZE: [ 1024, 1024 ]
|
||||||
|
FIELDS: [ "prompt" ]
|
||||||
|
DELIMITER: '#;#'
|
||||||
|
PROMPT_PREFIX: ''
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'index', 'prompt' ]
|
||||||
|
META_KEYS: [ 'image_size' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 10
|
||||||
|
SHOW_GPU_MEM: True
|
||||||
|
-
|
||||||
|
NAME: TensorboardLogHook
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 10000
|
||||||
|
PRIORITY: 200
|
||||||
|
SAVE_LAST: True
|
||||||
|
SAVE_NAME_PREFIX: 'step'
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
SAVE_LAST: True
|
||||||
|
SAVE_NAME_PREFIX: 'step'
|
||||||
|
SAVE_PROBE_PREFIX: 'image'
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
WORK_DIR: "self_train"
|
||||||
|
SCRIPT_DIR: "scepter/studio/self_train/scripts"
|
||||||
|
DEFAULT_FOLDER: sd_xl
|
||||||
|
SAMPLERS:
|
||||||
|
-
|
||||||
|
NAME: 'ddim'
|
||||||
|
-
|
||||||
|
NAME: 'dpmpp_2m_sde'
|
||||||
|
-
|
||||||
|
NAME: 'dpmpp_2s_ancestral'
|
||||||
|
TRAIN_PARAS:
|
||||||
|
RESOLUTIONS:
|
||||||
|
VALUES: [[256, 256], [320, 180], [180, 320],
|
||||||
|
[512, 512], [640, 360], [360, 640],
|
||||||
|
[768, 768], [960, 540], [540, 960],
|
||||||
|
[1024, 1024], [1280, 720], [720, 1280]]
|
||||||
|
DEFAULT: [1024, 1024]
|
||||||
|
EVAL_PROMPTS:
|
||||||
|
- a boy wearing a jacket
|
||||||
|
- a dog running on the lawn
|
||||||
@@ -0,0 +1,342 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
META:
|
||||||
|
VERSION: 'SD1.5'
|
||||||
|
DESCRIPTION: "Stable Diffusion v1.5"
|
||||||
|
IS_DEFAULT: False
|
||||||
|
INFERENCE_PARAS:
|
||||||
|
INFERENCE_BATCH_SIZE: 1
|
||||||
|
INFERENCE_PREFIX: ""
|
||||||
|
DEFAULT_SAMPLER: "ddim"
|
||||||
|
DEFAULT_SAMPLE_STEPS: 40
|
||||||
|
INFERENCE_N_PROMPT: ""
|
||||||
|
RESOLUTION: [512, 512]
|
||||||
|
PARAS:
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [512, 512]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 50
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: FULL
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [512, 512]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 50
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: LORA
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [512, 512]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 200
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: SCE
|
||||||
|
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [512, 512]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 200
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: True
|
||||||
|
TUNER: TEXT_SCE
|
||||||
|
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 4
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [512, 512]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 50
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: TEXT_LORA
|
||||||
|
|
||||||
|
TUNERS:
|
||||||
|
LORA:
|
||||||
|
-
|
||||||
|
NAME: SwiftLoRA
|
||||||
|
R: 256
|
||||||
|
LORA_ALPHA: 256
|
||||||
|
LORA_DROPOUT: 0.0
|
||||||
|
BIAS: "none"
|
||||||
|
TARGET_MODULES: "model.*(to_q|to_k|to_v|to_out.0|net.0.proj|net.2)$"
|
||||||
|
TEXT_LORA:
|
||||||
|
-
|
||||||
|
NAME: SwiftLoRA
|
||||||
|
R: 256
|
||||||
|
LORA_ALPHA: 256
|
||||||
|
LORA_DROPOUT: 0.0
|
||||||
|
BIAS: "none"
|
||||||
|
TARGET_MODULES: "(cond_stage_model.*(q_proj|k_proj|v_proj|out_proj|mlp.fc1|mlp.fc2))|(model.*(to_q|to_k|to_v|to_out.0|net.0.proj|net.2))$"
|
||||||
|
SCE:
|
||||||
|
-
|
||||||
|
NAME: SwiftSCETuning
|
||||||
|
DIMS: [1280, 1280, 1280, 1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
TARGET_MODULES: model.lsc_identity\.\d+$
|
||||||
|
TUNER_MODE: identity
|
||||||
|
TEXT_SCE:
|
||||||
|
-
|
||||||
|
NAME: SwiftSCETuning
|
||||||
|
DIMS: [ 1280, 1280, 1280, 1280, 1280, 640, 640, 640, 320, 320, 320, 320 ]
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
TARGET_MODULES: model.lsc_identity\.\d+$
|
||||||
|
TUNER_MODE: identity
|
||||||
|
-
|
||||||
|
NAME: SwiftLoRA
|
||||||
|
R: 256
|
||||||
|
LORA_ALPHA: 256
|
||||||
|
LORA_DROPOUT: 0.0
|
||||||
|
BIAS: "none"
|
||||||
|
TARGET_MODULES: "cond_stage_model.*(q_proj|k_proj|v_proj|out_proj|mlp.fc1|mlp.fc2)$"
|
||||||
|
|
||||||
|
MODIFY_PARAS:
|
||||||
|
TEXT_LORA:
|
||||||
|
TRAIN:
|
||||||
|
SOLVER.MODEL.COND_STAGE_MODEL.USE_GRAD: True
|
||||||
|
TEXT_SCE:
|
||||||
|
TRAIN:
|
||||||
|
SOLVER.MODEL.COND_STAGE_MODEL.USE_GRAD: True
|
||||||
|
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 1000
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: -1
|
||||||
|
#
|
||||||
|
WORK_DIR:
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
#
|
||||||
|
TUNER:
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusion
|
||||||
|
PARAMETERIZATION: eps
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-v1-5@v1-5-pruned-emaonly.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
# DEFAULT_N_PROMPT: 'lowres, error, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, username, watermark, signature'
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS: 8
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 768
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: False
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
IGNORE_KEYS: []
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: ClipTokenizer
|
||||||
|
PRETRAINED_PATH: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
LENGTH: 77
|
||||||
|
CLEAN: True
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenCLIPEmbedder
|
||||||
|
FREEZE: True
|
||||||
|
USE_GRAD: False
|
||||||
|
LAYER: last
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/clip-vit-large-patch14
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE:
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [512, 512]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 512
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 512
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: Text2ImageDataset
|
||||||
|
MODE: eval
|
||||||
|
PROMPT_FILE:
|
||||||
|
PROMPT_DATA: [ "a boy wearing a jacket", "a dog running on the lawn" ]
|
||||||
|
IMAGE_SIZE: [ 512, 512 ]
|
||||||
|
FIELDS: [ "prompt" ]
|
||||||
|
DELIMITER: '#;#'
|
||||||
|
PROMPT_PREFIX: ''
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'index', 'prompt' ]
|
||||||
|
META_KEYS: [ 'image_size' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 10
|
||||||
|
SHOW_GPU_MEM: True
|
||||||
|
-
|
||||||
|
NAME: TensorboardLogHook
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 10000
|
||||||
|
PRIORITY: 200
|
||||||
|
SAVE_LAST: True
|
||||||
|
SAVE_NAME_PREFIX: 'step'
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
SAVE_LAST: True
|
||||||
|
SAVE_NAME_PREFIX: 'step'
|
||||||
|
SAVE_PROBE_PREFIX: 'image'
|
||||||
@@ -0,0 +1,284 @@
|
|||||||
|
ENV:
|
||||||
|
BACKEND: nccl
|
||||||
|
META:
|
||||||
|
VERSION: 'SD2.1'
|
||||||
|
DESCRIPTION: "Stable Diffusion v2.1"
|
||||||
|
IS_DEFAULT: False
|
||||||
|
INFERENCE_PARAS:
|
||||||
|
INFERENCE_BATCH_SIZE: 1
|
||||||
|
INFERENCE_PREFIX: ""
|
||||||
|
DEFAULT_SAMPLER: "ddim"
|
||||||
|
DEFAULT_SAMPLE_STEPS: 40
|
||||||
|
INFERENCE_N_PROMPT: ""
|
||||||
|
RESOLUTION: [768, 768]
|
||||||
|
PARAS:
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [768, 768]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 50
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: FULL
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [768, 768]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 50
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: False
|
||||||
|
TUNER: LORA
|
||||||
|
-
|
||||||
|
TRAIN_BATCH_SIZE: 2
|
||||||
|
TRAIN_PREFIX: ""
|
||||||
|
TRAIN_N_PROMPT: ""
|
||||||
|
RESOLUTION: [768, 768]
|
||||||
|
MEMORY: 29000
|
||||||
|
EPOCHS: 200
|
||||||
|
SAVE_INTERVAL: 25
|
||||||
|
EPSEC: 0.818
|
||||||
|
LEARNING_RATE: 0.0001
|
||||||
|
IS_DEFAULT: True
|
||||||
|
TUNER: SCE
|
||||||
|
|
||||||
|
TUNERS:
|
||||||
|
LORA:
|
||||||
|
-
|
||||||
|
NAME: SwiftLoRA
|
||||||
|
R: 256
|
||||||
|
LORA_ALPHA: 256
|
||||||
|
LORA_DROPOUT: 0.0
|
||||||
|
BIAS: "none"
|
||||||
|
TARGET_MODULES: "model.*(to_q|to_k|to_v|to_out.0|net.0.proj|net.2)$"
|
||||||
|
SCE:
|
||||||
|
-
|
||||||
|
NAME: SwiftSCETuning
|
||||||
|
DIMS: [1280, 1280, 1280, 1280, 1280, 640, 640, 640, 320, 320, 320, 320]
|
||||||
|
DOWN_RATIO: 1.0
|
||||||
|
TARGET_MODULES: model.lsc_identity\.\d+$
|
||||||
|
TUNER_MODE: identity
|
||||||
|
SOLVER:
|
||||||
|
NAME: LatentDiffusionSolver
|
||||||
|
RESUME_FROM:
|
||||||
|
LOAD_MODEL_ONLY: True
|
||||||
|
USE_FSDP: False
|
||||||
|
SHARDING_STRATEGY:
|
||||||
|
USE_AMP: True
|
||||||
|
DTYPE: float16
|
||||||
|
CHANNELS_LAST: True
|
||||||
|
MAX_STEPS: 1000
|
||||||
|
MAX_EPOCHS: -1
|
||||||
|
NUM_FOLDS: 1
|
||||||
|
ACCU_STEP: 1
|
||||||
|
EVAL_INTERVAL: -1
|
||||||
|
#
|
||||||
|
WORK_DIR:
|
||||||
|
LOG_FILE: std_log.txt
|
||||||
|
#
|
||||||
|
FILE_SYSTEM:
|
||||||
|
NAME: "ModelscopeFs"
|
||||||
|
TEMP_DIR: "./cache/data"
|
||||||
|
#
|
||||||
|
FREEZE:
|
||||||
|
#
|
||||||
|
TUNER:
|
||||||
|
#
|
||||||
|
MODEL:
|
||||||
|
NAME: LatentDiffusion
|
||||||
|
PARAMETERIZATION: v
|
||||||
|
TIMESTEPS: 1000
|
||||||
|
MIN_SNR_GAMMA:
|
||||||
|
ZERO_TERMINAL_SNR: False
|
||||||
|
PRETRAINED_MODEL: ms://AI-ModelScope/stable-diffusion-2-1@v2-1_768-ema-pruned.safetensors
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
SCALE_FACTOR: 0.18215
|
||||||
|
SIZE_FACTOR: 8
|
||||||
|
# DEFAULT_N_PROMPT: 'lowres, error, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, username, watermark, signature'
|
||||||
|
DEFAULT_N_PROMPT:
|
||||||
|
SCHEDULE_ARGS:
|
||||||
|
"NAME": "scaled_linear"
|
||||||
|
"BETA_MIN": 0.00085
|
||||||
|
"BETA_MAX": 0.012
|
||||||
|
USE_EMA: False
|
||||||
|
#
|
||||||
|
DIFFUSION_MODEL:
|
||||||
|
NAME: DiffusionUNet
|
||||||
|
IN_CHANNELS: 4
|
||||||
|
OUT_CHANNELS: 4
|
||||||
|
MODEL_CHANNELS: 320
|
||||||
|
NUM_HEADS_CHANNELS: 64
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
ATTENTION_RESOLUTIONS: [ 4, 2, 1 ]
|
||||||
|
CHANNEL_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
CONV_RESAMPLE: True
|
||||||
|
DIMS: 2
|
||||||
|
USE_CHECKPOINT: False
|
||||||
|
USE_SCALE_SHIFT_NORM: False
|
||||||
|
RESBLOCK_UPDOWN: False
|
||||||
|
USE_SPATIAL_TRANSFORMER: True
|
||||||
|
TRANSFORMER_DEPTH: 1
|
||||||
|
CONTEXT_DIM: 1024
|
||||||
|
DISABLE_MIDDLE_SELF_ATTN: False
|
||||||
|
USE_LINEAR_IN_TRANSFORMER: True
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
#
|
||||||
|
FIRST_STAGE_MODEL:
|
||||||
|
NAME: AutoencoderKL
|
||||||
|
EMBED_DIM: 4
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
IGNORE_KEYS: [ ]
|
||||||
|
BATCH_SIZE: 4
|
||||||
|
#
|
||||||
|
ENCODER:
|
||||||
|
NAME: Encoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DOUBLE_Z: True
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
#
|
||||||
|
DECODER:
|
||||||
|
NAME: Decoder
|
||||||
|
CH: 128
|
||||||
|
OUT_CH: 3
|
||||||
|
NUM_RES_BLOCKS: 2
|
||||||
|
IN_CHANNELS: 3
|
||||||
|
ATTN_RESOLUTIONS: [ ]
|
||||||
|
CH_MULT: [ 1, 2, 4, 4 ]
|
||||||
|
Z_CHANNELS: 4
|
||||||
|
DROPOUT: 0.0
|
||||||
|
RESAMP_WITH_CONV: True
|
||||||
|
GIVE_PRE_END: False
|
||||||
|
TANH_OUT: False
|
||||||
|
#
|
||||||
|
TOKENIZER:
|
||||||
|
NAME: OpenClipTokenizer
|
||||||
|
LENGTH: 77
|
||||||
|
#
|
||||||
|
COND_STAGE_MODEL:
|
||||||
|
NAME: FrozenOpenCLIPEmbedder
|
||||||
|
ARCH: ViT-H-14
|
||||||
|
PRETRAINED_MODEL:
|
||||||
|
USE_GRAD: False
|
||||||
|
LAYER: penultimate
|
||||||
|
#
|
||||||
|
LOSS:
|
||||||
|
NAME: ReconstructLoss
|
||||||
|
LOSS_TYPE: l2
|
||||||
|
#
|
||||||
|
SAMPLE_ARGS:
|
||||||
|
SAMPLER: ddim
|
||||||
|
SAMPLE_STEPS: 50
|
||||||
|
SEED: 2023
|
||||||
|
GUIDE_SCALE: 7.5
|
||||||
|
GUIDE_RESCALE:
|
||||||
|
DISCRETIZATION: trailing
|
||||||
|
IMAGE_SIZE: [768, 768]
|
||||||
|
RUN_TRAIN_N: False
|
||||||
|
#
|
||||||
|
OPTIMIZER:
|
||||||
|
NAME: AdamW
|
||||||
|
LEARNING_RATE: 0.064
|
||||||
|
BETAS: [ 0.9, 0.999 ]
|
||||||
|
EPS: 1e-8
|
||||||
|
WEIGHT_DECAY: 1e-2
|
||||||
|
AMSGRAD: False
|
||||||
|
#
|
||||||
|
TRAIN_DATA:
|
||||||
|
NAME: ImageTextPairMSDataset
|
||||||
|
MODE: train
|
||||||
|
MS_DATASET_NAME: style_custom_dataset
|
||||||
|
MS_DATASET_NAMESPACE: damo
|
||||||
|
MS_DATASET_SUBNAME: 3D
|
||||||
|
PROMPT_PREFIX: ""
|
||||||
|
MS_DATASET_SPLIT: train
|
||||||
|
MS_REMAP_KEYS: { 'Image:FILE': 'Target:FILE' }
|
||||||
|
REPLACE_STYLE: False
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
SAMPLER:
|
||||||
|
NAME: LoopSampler
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: LoadImageFromFile
|
||||||
|
RGB_ORDER: RGB
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Resize
|
||||||
|
SIZE: 768
|
||||||
|
INTERPOLATION: bilinear
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: CenterCrop
|
||||||
|
SIZE: 768
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: ImageToTensor
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'img' ]
|
||||||
|
BACKEND: pillow
|
||||||
|
- NAME: Normalize
|
||||||
|
MEAN: [ 0.5, 0.5, 0.5 ]
|
||||||
|
STD: [ 0.5, 0.5, 0.5 ]
|
||||||
|
INPUT_KEY: [ 'img' ]
|
||||||
|
OUTPUT_KEY: [ 'image' ]
|
||||||
|
BACKEND: torchvision
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'image', 'prompt' ]
|
||||||
|
META_KEYS: [ 'data_key' ]
|
||||||
|
#
|
||||||
|
EVAL_DATA:
|
||||||
|
NAME: Text2ImageDataset
|
||||||
|
MODE: eval
|
||||||
|
PROMPT_FILE:
|
||||||
|
PROMPT_DATA: [ "a boy wearing a jacket", "a dog running on the lawn" ]
|
||||||
|
IMAGE_SIZE: [ 768, 768 ]
|
||||||
|
FIELDS: [ "prompt" ]
|
||||||
|
DELIMITER: '#;#'
|
||||||
|
PROMPT_PREFIX: ''
|
||||||
|
PIN_MEMORY: True
|
||||||
|
BATCH_SIZE: 1
|
||||||
|
NUM_WORKERS: 4
|
||||||
|
TRANSFORMS:
|
||||||
|
- NAME: Select
|
||||||
|
KEYS: [ 'index', 'prompt' ]
|
||||||
|
META_KEYS: [ 'image_size' ]
|
||||||
|
#
|
||||||
|
TRAIN_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: BackwardHook
|
||||||
|
PRIORITY: 0
|
||||||
|
-
|
||||||
|
NAME: LogHook
|
||||||
|
LOG_INTERVAL: 10
|
||||||
|
SHOW_GPU_MEM: True
|
||||||
|
-
|
||||||
|
NAME: TensorboardLogHook
|
||||||
|
-
|
||||||
|
NAME: CheckpointHook
|
||||||
|
INTERVAL: 10000
|
||||||
|
PRIORITY: 200
|
||||||
|
SAVE_LAST: True
|
||||||
|
SAVE_NAME_PREFIX: 'step'
|
||||||
|
#
|
||||||
|
EVAL_HOOKS:
|
||||||
|
-
|
||||||
|
NAME: ProbeDataHook
|
||||||
|
PROB_INTERVAL: 100
|
||||||
|
SAVE_LAST: True
|
||||||
|
SAVE_NAME_PREFIX: 'step'
|
||||||
|
SAVE_PROBE_PREFIX: 'image'
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
WORK_DIR: "tuner_manager"
|
||||||
|
TUNER_LIST_YAML: "tuner_list.yaml"
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (c) Alibaba, Inc. and its affiliates.
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
from scepter.modules import data, model, opt, solver, transform, utils
|
from scepter.modules import (data, inference, model, opt, solver, transform,
|
||||||
|
utils)
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
from scepter.modules.annotator.base_annotator import GeneralAnnotator
|
||||||
|
from scepter.modules.annotator.canny import CannyAnnotator
|
||||||
|
from scepter.modules.annotator.color import ColorAnnotator
|
||||||
|
from scepter.modules.annotator.hed import HedAnnotator
|
||||||
|
from scepter.modules.annotator.identity import IdentityAnnotator
|
||||||
|
from scepter.modules.annotator.invert import InvertAnnotator
|
||||||
|
from scepter.modules.annotator.midas_op import MidasDetector
|
||||||
|
from scepter.modules.annotator.mlsd_op import MLSDdetector
|
||||||
|
from scepter.modules.annotator.openpose import OpenposeAnnotator
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
from abc import ABCMeta
|
||||||
|
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
|
||||||
|
from scepter.modules.annotator.registry import ANNOTATORS
|
||||||
|
from scepter.modules.model.base_model import BaseModel
|
||||||
|
from scepter.modules.utils.config import dict_to_yaml
|
||||||
|
|
||||||
|
|
||||||
|
@ANNOTATORS.register_class()
|
||||||
|
class BaseAnnotator(BaseModel, metaclass=ABCMeta):
|
||||||
|
para_dict = {}
|
||||||
|
|
||||||
|
def __init__(self, cfg, logger=None):
|
||||||
|
super().__init__(cfg, logger=logger)
|
||||||
|
|
||||||
|
@torch.no_grad()
|
||||||
|
@torch.inference_mode
|
||||||
|
def forward(self, *args, **kwargs):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_config_template():
|
||||||
|
return dict_to_yaml('ANNOTATORS',
|
||||||
|
__class__.__name__,
|
||||||
|
BaseAnnotator.para_dict,
|
||||||
|
set_name=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ANNOTATORS.register_class()
|
||||||
|
class GeneralAnnotator(BaseAnnotator, metaclass=ABCMeta):
|
||||||
|
def __init__(self, cfg, logger=None):
|
||||||
|
super().__init__(cfg, logger=logger)
|
||||||
|
anno_models = cfg.get('ANNOTATORS', [])
|
||||||
|
self.annotators = nn.ModuleList()
|
||||||
|
for n, anno_config in enumerate(anno_models):
|
||||||
|
annotator = ANNOTATORS.build(anno_config, logger=logger)
|
||||||
|
annotator.input_keys = anno_config.get('INPUT_KEYS', [])
|
||||||
|
if isinstance(annotator.input_keys, str):
|
||||||
|
annotator.input_keys = [annotator.input_keys]
|
||||||
|
annotator.output_keys = anno_config.get('OUTPUT_KEYS', [])
|
||||||
|
if isinstance(annotator.output_keys, str):
|
||||||
|
annotator.output_keys = [annotator.output_keys]
|
||||||
|
assert len(annotator.input_keys) == len(annotator.output_keys)
|
||||||
|
self.annotators.append(annotator)
|
||||||
|
|
||||||
|
def forward(self, input_dict):
|
||||||
|
output_dict = {}
|
||||||
|
for annotator in self.annotators:
|
||||||
|
for idx, in_key in enumerate(annotator.input_keys):
|
||||||
|
if in_key in input_dict:
|
||||||
|
image = annotator(input_dict[in_key])
|
||||||
|
output_dict[annotator.output_keys[idx]] = image
|
||||||
|
return output_dict
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
from abc import ABCMeta
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
import torch
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
from scepter.modules.annotator.base_annotator import BaseAnnotator
|
||||||
|
from scepter.modules.annotator.registry import ANNOTATORS
|
||||||
|
from scepter.modules.utils.config import dict_to_yaml
|
||||||
|
|
||||||
|
|
||||||
|
@ANNOTATORS.register_class()
|
||||||
|
class CannyAnnotator(BaseAnnotator, metaclass=ABCMeta):
|
||||||
|
para_dict = {}
|
||||||
|
|
||||||
|
def __init__(self, cfg, logger=None):
|
||||||
|
super().__init__(cfg, logger=logger)
|
||||||
|
self.low_threshold = cfg.get('LOW_THRESHOLD', 100)
|
||||||
|
self.high_threshold = cfg.get('HIGH_THRESHOLD', 200)
|
||||||
|
self.random_cfg = cfg.get('RANDOM_CFG', None)
|
||||||
|
|
||||||
|
def forward(self, image):
|
||||||
|
if isinstance(image, Image.Image):
|
||||||
|
image = np.array(image)
|
||||||
|
elif isinstance(image, torch.Tensor):
|
||||||
|
image = image.detach().cpu().numpy()
|
||||||
|
elif isinstance(image, np.ndarray):
|
||||||
|
image = image.copy()
|
||||||
|
else:
|
||||||
|
raise f'Unsurpport datatype{type(image)}, only surpport np.ndarray, torch.Tensor, Pillow Image.'
|
||||||
|
assert len(image.shape) < 4
|
||||||
|
|
||||||
|
if self.random_cfg is None:
|
||||||
|
image = cv2.Canny(image, self.low_threshold, self.high_threshold)
|
||||||
|
else:
|
||||||
|
proba = self.random_cfg.get('PROBA', 1.0)
|
||||||
|
if np.random.random() < proba:
|
||||||
|
min_low_threshold = self.random_cfg.get(
|
||||||
|
'MIN_LOW_THRESHOLD', 50)
|
||||||
|
max_low_threshold = self.random_cfg.get(
|
||||||
|
'MAX_LOW_THRESHOLD', 100)
|
||||||
|
min_high_threshold = self.random_cfg.get(
|
||||||
|
'MIN_HIGH_THRESHOLD', 200)
|
||||||
|
max_high_threshold = self.random_cfg.get(
|
||||||
|
'MAX_HIGH_THRESHOLD', 350)
|
||||||
|
low_th = np.random.randint(min_low_threshold,
|
||||||
|
max_low_threshold)
|
||||||
|
high_th = np.random.randint(min_high_threshold,
|
||||||
|
max_high_threshold)
|
||||||
|
else:
|
||||||
|
low_th, high_th = self.low_threshold, self.high_threshold
|
||||||
|
image = cv2.Canny(image, low_th, high_th)
|
||||||
|
return image[..., None].repeat(3, 2)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_config_template():
|
||||||
|
return dict_to_yaml('ANNOTATORS',
|
||||||
|
__class__.__name__,
|
||||||
|
CannyAnnotator.para_dict,
|
||||||
|
set_name=True)
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
from abc import ABCMeta
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
import torch
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
from scepter.modules.annotator.base_annotator import BaseAnnotator
|
||||||
|
from scepter.modules.annotator.registry import ANNOTATORS
|
||||||
|
from scepter.modules.utils.config import dict_to_yaml
|
||||||
|
|
||||||
|
|
||||||
|
@ANNOTATORS.register_class()
|
||||||
|
class ColorAnnotator(BaseAnnotator, metaclass=ABCMeta):
|
||||||
|
para_dict = {}
|
||||||
|
|
||||||
|
def __init__(self, cfg, logger=None):
|
||||||
|
super().__init__(cfg, logger=logger)
|
||||||
|
self.ratio = cfg.get('RATIO', 64)
|
||||||
|
self.random_cfg = cfg.get('RANDOM_CFG', None)
|
||||||
|
|
||||||
|
def forward(self, image):
|
||||||
|
if isinstance(image, Image.Image):
|
||||||
|
image = np.array(image)
|
||||||
|
elif isinstance(image, torch.Tensor):
|
||||||
|
image = image.detach().cpu().numpy()
|
||||||
|
elif isinstance(image, np.ndarray):
|
||||||
|
image = image.copy()
|
||||||
|
else:
|
||||||
|
raise f'Unsurpport datatype{type(image)}, only surpport np.ndarray, torch.Tensor, Pillow Image.'
|
||||||
|
h, w = image.shape[:2]
|
||||||
|
|
||||||
|
if self.random_cfg is None:
|
||||||
|
ratio = self.ratio
|
||||||
|
else:
|
||||||
|
proba = self.random_cfg.get('PROBA', 1.0)
|
||||||
|
if np.random.random() < proba:
|
||||||
|
if 'CHOICE_RATIO' in self.random_cfg:
|
||||||
|
ratio = np.random.choice(self.random_cfg['CHOICE_RATIO'])
|
||||||
|
else:
|
||||||
|
min_ratio = self.random_cfg.get('MIN_RATIO', 48)
|
||||||
|
max_ratio = self.random_cfg.get('MAX_RATIO', 96)
|
||||||
|
ratio = np.random.randint(min_ratio, max_ratio)
|
||||||
|
else:
|
||||||
|
ratio = self.ratio
|
||||||
|
image = cv2.resize(image, (int(w // ratio), int(h // ratio)),
|
||||||
|
interpolation=cv2.INTER_CUBIC)
|
||||||
|
image = cv2.resize(image, (w, h), interpolation=cv2.INTER_NEAREST)
|
||||||
|
assert len(image.shape) < 4
|
||||||
|
return image
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_config_template():
|
||||||
|
return dict_to_yaml('ANNOTATORS',
|
||||||
|
__class__.__name__,
|
||||||
|
ColorAnnotator.para_dict,
|
||||||
|
set_name=True)
|
||||||
@@ -0,0 +1,155 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
# Please use this implementation in your products
|
||||||
|
# This implementation may produce slightly different results from Saining Xie's official implementations,
|
||||||
|
# but it generates smoother edges and is more suitable for ControlNet as well as other image-to-image translations.
|
||||||
|
# Different from official models and other implementations, this is an RGB-input model (rather than BGR)
|
||||||
|
# and in this way it works better for gradio's RGB protocol
|
||||||
|
|
||||||
|
from abc import ABCMeta
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
import torch
|
||||||
|
from einops import rearrange
|
||||||
|
|
||||||
|
from scepter.modules.annotator.base_annotator import BaseAnnotator
|
||||||
|
from scepter.modules.annotator.registry import ANNOTATORS
|
||||||
|
from scepter.modules.utils.config import dict_to_yaml
|
||||||
|
from scepter.modules.utils.distribute import we
|
||||||
|
from scepter.modules.utils.file_system import FS
|
||||||
|
|
||||||
|
|
||||||
|
def nms(x, t, s):
|
||||||
|
x = cv2.GaussianBlur(x.astype(np.float32), (0, 0), s)
|
||||||
|
|
||||||
|
f1 = np.array([[0, 0, 0], [1, 1, 1], [0, 0, 0]], dtype=np.uint8)
|
||||||
|
f2 = np.array([[0, 1, 0], [0, 1, 0], [0, 1, 0]], dtype=np.uint8)
|
||||||
|
f3 = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=np.uint8)
|
||||||
|
f4 = np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]], dtype=np.uint8)
|
||||||
|
|
||||||
|
y = np.zeros_like(x)
|
||||||
|
|
||||||
|
for f in [f1, f2, f3, f4]:
|
||||||
|
np.putmask(y, cv2.dilate(x, kernel=f) == x, x)
|
||||||
|
|
||||||
|
z = np.zeros_like(y, dtype=np.uint8)
|
||||||
|
z[y > t] = 255
|
||||||
|
return z
|
||||||
|
|
||||||
|
|
||||||
|
class DoubleConvBlock(torch.nn.Module):
|
||||||
|
def __init__(self, input_channel, output_channel, layer_number):
|
||||||
|
super().__init__()
|
||||||
|
self.convs = torch.nn.Sequential()
|
||||||
|
self.convs.append(
|
||||||
|
torch.nn.Conv2d(in_channels=input_channel,
|
||||||
|
out_channels=output_channel,
|
||||||
|
kernel_size=(3, 3),
|
||||||
|
stride=(1, 1),
|
||||||
|
padding=1))
|
||||||
|
for i in range(1, layer_number):
|
||||||
|
self.convs.append(
|
||||||
|
torch.nn.Conv2d(in_channels=output_channel,
|
||||||
|
out_channels=output_channel,
|
||||||
|
kernel_size=(3, 3),
|
||||||
|
stride=(1, 1),
|
||||||
|
padding=1))
|
||||||
|
self.projection = torch.nn.Conv2d(in_channels=output_channel,
|
||||||
|
out_channels=1,
|
||||||
|
kernel_size=(1, 1),
|
||||||
|
stride=(1, 1),
|
||||||
|
padding=0)
|
||||||
|
|
||||||
|
def __call__(self, x, down_sampling=False):
|
||||||
|
h = x
|
||||||
|
if down_sampling:
|
||||||
|
h = torch.nn.functional.max_pool2d(h,
|
||||||
|
kernel_size=(2, 2),
|
||||||
|
stride=(2, 2))
|
||||||
|
for conv in self.convs:
|
||||||
|
h = conv(h)
|
||||||
|
h = torch.nn.functional.relu(h)
|
||||||
|
return h, self.projection(h)
|
||||||
|
|
||||||
|
|
||||||
|
class ControlNetHED_Apache2(torch.nn.Module):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.norm = torch.nn.Parameter(torch.zeros(size=(1, 3, 1, 1)))
|
||||||
|
self.block1 = DoubleConvBlock(input_channel=3,
|
||||||
|
output_channel=64,
|
||||||
|
layer_number=2)
|
||||||
|
self.block2 = DoubleConvBlock(input_channel=64,
|
||||||
|
output_channel=128,
|
||||||
|
layer_number=2)
|
||||||
|
self.block3 = DoubleConvBlock(input_channel=128,
|
||||||
|
output_channel=256,
|
||||||
|
layer_number=3)
|
||||||
|
self.block4 = DoubleConvBlock(input_channel=256,
|
||||||
|
output_channel=512,
|
||||||
|
layer_number=3)
|
||||||
|
self.block5 = DoubleConvBlock(input_channel=512,
|
||||||
|
output_channel=512,
|
||||||
|
layer_number=3)
|
||||||
|
|
||||||
|
def __call__(self, x):
|
||||||
|
h = x - self.norm
|
||||||
|
h, projection1 = self.block1(h)
|
||||||
|
h, projection2 = self.block2(h, down_sampling=True)
|
||||||
|
h, projection3 = self.block3(h, down_sampling=True)
|
||||||
|
h, projection4 = self.block4(h, down_sampling=True)
|
||||||
|
h, projection5 = self.block5(h, down_sampling=True)
|
||||||
|
return projection1, projection2, projection3, projection4, projection5
|
||||||
|
|
||||||
|
|
||||||
|
@ANNOTATORS.register_class()
|
||||||
|
class HedAnnotator(BaseAnnotator, metaclass=ABCMeta):
|
||||||
|
para_dict = {}
|
||||||
|
|
||||||
|
def __init__(self, cfg, logger=None):
|
||||||
|
super().__init__(cfg, logger=logger)
|
||||||
|
self.netNetwork = ControlNetHED_Apache2().float().eval()
|
||||||
|
pretrained_model = cfg.get('PRETRAINED_MODEL', None)
|
||||||
|
if pretrained_model:
|
||||||
|
with FS.get_from(pretrained_model, wait_finish=True) as local_path:
|
||||||
|
self.netNetwork.load_state_dict(torch.load(local_path))
|
||||||
|
|
||||||
|
@torch.no_grad()
|
||||||
|
@torch.inference_mode()
|
||||||
|
@torch.autocast('cuda', enabled=False)
|
||||||
|
def forward(self, image):
|
||||||
|
if isinstance(image, torch.Tensor):
|
||||||
|
if len(image.shape) == 3:
|
||||||
|
image = rearrange(image, 'h w c -> 1 c h w')
|
||||||
|
B, C, H, W = image.shape
|
||||||
|
else:
|
||||||
|
raise "Unsurpport input image's shape"
|
||||||
|
elif isinstance(image, np.ndarray):
|
||||||
|
image = torch.from_numpy(image.copy()).float()
|
||||||
|
if len(image.shape) == 3:
|
||||||
|
image = rearrange(image, 'h w c -> 1 c h w')
|
||||||
|
B, C, H, W = image.shape
|
||||||
|
else:
|
||||||
|
raise "Unsurpport input image's shape"
|
||||||
|
else:
|
||||||
|
raise "Unsurpport input image's type"
|
||||||
|
edges = self.netNetwork(image.to(we.device_id))
|
||||||
|
edges = [
|
||||||
|
e.detach().cpu().numpy().astype(np.float32)[0, 0] for e in edges
|
||||||
|
]
|
||||||
|
edges = [
|
||||||
|
cv2.resize(e, (W, H), interpolation=cv2.INTER_LINEAR)
|
||||||
|
for e in edges
|
||||||
|
]
|
||||||
|
edges = np.stack(edges, axis=2)
|
||||||
|
edge = 1 / (1 + np.exp(-np.mean(edges, axis=2).astype(np.float64)))
|
||||||
|
edge = 255 - (edge * 255.0).clip(0, 255).astype(np.uint8)
|
||||||
|
return edge[..., None].repeat(3, 2)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_config_template():
|
||||||
|
return dict_to_yaml('ANNOTATORS',
|
||||||
|
__class__.__name__,
|
||||||
|
HedAnnotator.para_dict,
|
||||||
|
set_name=True)
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
from abc import ABCMeta
|
||||||
|
|
||||||
|
from scepter.modules.annotator.base_annotator import BaseAnnotator
|
||||||
|
from scepter.modules.annotator.registry import ANNOTATORS
|
||||||
|
from scepter.modules.utils.config import dict_to_yaml
|
||||||
|
|
||||||
|
|
||||||
|
@ANNOTATORS.register_class()
|
||||||
|
class IdentityAnnotator(BaseAnnotator, metaclass=ABCMeta):
|
||||||
|
para_dict = {}
|
||||||
|
|
||||||
|
def __init__(self, cfg, logger=None):
|
||||||
|
super().__init__(cfg, logger=logger)
|
||||||
|
|
||||||
|
def forward(self, image):
|
||||||
|
return image
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_config_template():
|
||||||
|
return dict_to_yaml('ANNOTATORS',
|
||||||
|
__class__.__name__,
|
||||||
|
IdentityAnnotator.para_dict,
|
||||||
|
set_name=True)
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
from abc import ABCMeta
|
||||||
|
|
||||||
|
from scepter.modules.annotator.base_annotator import BaseAnnotator
|
||||||
|
from scepter.modules.annotator.registry import ANNOTATORS
|
||||||
|
from scepter.modules.utils.config import dict_to_yaml
|
||||||
|
|
||||||
|
|
||||||
|
@ANNOTATORS.register_class()
|
||||||
|
class InvertAnnotator(BaseAnnotator, metaclass=ABCMeta):
|
||||||
|
para_dict = {}
|
||||||
|
|
||||||
|
def __init__(self, cfg, logger=None):
|
||||||
|
super().__init__(cfg, logger=logger)
|
||||||
|
|
||||||
|
def forward(self, image):
|
||||||
|
return 255 - image
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_config_template():
|
||||||
|
return dict_to_yaml('ANNOTATORS',
|
||||||
|
__class__.__name__,
|
||||||
|
InvertAnnotator.para_dict,
|
||||||
|
set_name=True)
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# based on https://github.com/isl-org/MiDaS
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
from torchvision.transforms import Compose
|
||||||
|
|
||||||
|
from .dpt_depth import DPTDepthModel
|
||||||
|
from .midas_net import MidasNet
|
||||||
|
from .midas_net_custom import MidasNet_small
|
||||||
|
from .transforms import NormalizeImage, PrepareForNet, Resize
|
||||||
|
|
||||||
|
# ISL_PATHS = {
|
||||||
|
# "dpt_large": "dpt_large-midas-2f21e586.pt",
|
||||||
|
# "dpt_hybrid": "dpt_hybrid-midas-501f0c75.pt",
|
||||||
|
# "midas_v21": "",
|
||||||
|
# "midas_v21_small": "",
|
||||||
|
# }
|
||||||
|
|
||||||
|
# remote_model_path =
|
||||||
|
# "https://huggingface.co/lllyasviel/ControlNet/resolve/main/annotator/ckpts/dpt_hybrid-midas-501f0c75.pt"
|
||||||
|
|
||||||
|
|
||||||
|
def disabled_train(self, mode=True):
|
||||||
|
"""Overwrite model.train with this function to make sure train/eval mode
|
||||||
|
does not change anymore."""
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
def load_midas_transform(model_type):
|
||||||
|
# https://github.com/isl-org/MiDaS/blob/master/run.py
|
||||||
|
# load transform only
|
||||||
|
if model_type == 'dpt_large': # DPT-Large
|
||||||
|
net_w, net_h = 384, 384
|
||||||
|
resize_mode = 'minimal'
|
||||||
|
normalization = NormalizeImage(mean=[0.5, 0.5, 0.5],
|
||||||
|
std=[0.5, 0.5, 0.5])
|
||||||
|
|
||||||
|
elif model_type == 'dpt_hybrid': # DPT-Hybrid
|
||||||
|
net_w, net_h = 384, 384
|
||||||
|
resize_mode = 'minimal'
|
||||||
|
normalization = NormalizeImage(mean=[0.5, 0.5, 0.5],
|
||||||
|
std=[0.5, 0.5, 0.5])
|
||||||
|
|
||||||
|
elif model_type == 'midas_v21':
|
||||||
|
net_w, net_h = 384, 384
|
||||||
|
resize_mode = 'upper_bound'
|
||||||
|
normalization = NormalizeImage(mean=[0.485, 0.456, 0.406],
|
||||||
|
std=[0.229, 0.224, 0.225])
|
||||||
|
|
||||||
|
elif model_type == 'midas_v21_small':
|
||||||
|
net_w, net_h = 256, 256
|
||||||
|
resize_mode = 'upper_bound'
|
||||||
|
normalization = NormalizeImage(mean=[0.485, 0.456, 0.406],
|
||||||
|
std=[0.229, 0.224, 0.225])
|
||||||
|
|
||||||
|
else:
|
||||||
|
assert False, f"model_type '{model_type}' not implemented, use: --model_type large"
|
||||||
|
|
||||||
|
transform = Compose([
|
||||||
|
Resize(
|
||||||
|
net_w,
|
||||||
|
net_h,
|
||||||
|
resize_target=None,
|
||||||
|
keep_aspect_ratio=True,
|
||||||
|
ensure_multiple_of=32,
|
||||||
|
resize_method=resize_mode,
|
||||||
|
image_interpolation_method=cv2.INTER_CUBIC,
|
||||||
|
),
|
||||||
|
normalization,
|
||||||
|
PrepareForNet(),
|
||||||
|
])
|
||||||
|
|
||||||
|
return transform
|
||||||
|
|
||||||
|
|
||||||
|
def load_model(model_type, model_path):
|
||||||
|
# https://github.com/isl-org/MiDaS/blob/master/run.py
|
||||||
|
# load network
|
||||||
|
# model_path = ISL_PATHS[model_type]
|
||||||
|
if model_type == 'dpt_large': # DPT-Large
|
||||||
|
model = DPTDepthModel(
|
||||||
|
path=model_path,
|
||||||
|
backbone='vitl16_384',
|
||||||
|
non_negative=True,
|
||||||
|
)
|
||||||
|
net_w, net_h = 384, 384
|
||||||
|
resize_mode = 'minimal'
|
||||||
|
normalization = NormalizeImage(mean=[0.5, 0.5, 0.5],
|
||||||
|
std=[0.5, 0.5, 0.5])
|
||||||
|
|
||||||
|
elif model_type == 'dpt_hybrid': # DPT-Hybrid
|
||||||
|
model = DPTDepthModel(
|
||||||
|
path=model_path,
|
||||||
|
backbone='vitb_rn50_384',
|
||||||
|
non_negative=True,
|
||||||
|
)
|
||||||
|
net_w, net_h = 384, 384
|
||||||
|
resize_mode = 'minimal'
|
||||||
|
normalization = NormalizeImage(mean=[0.5, 0.5, 0.5],
|
||||||
|
std=[0.5, 0.5, 0.5])
|
||||||
|
|
||||||
|
elif model_type == 'midas_v21':
|
||||||
|
model = MidasNet(model_path, non_negative=True)
|
||||||
|
net_w, net_h = 384, 384
|
||||||
|
resize_mode = 'upper_bound'
|
||||||
|
normalization = NormalizeImage(mean=[0.485, 0.456, 0.406],
|
||||||
|
std=[0.229, 0.224, 0.225])
|
||||||
|
|
||||||
|
elif model_type == 'midas_v21_small':
|
||||||
|
model = MidasNet_small(model_path,
|
||||||
|
features=64,
|
||||||
|
backbone='efficientnet_lite3',
|
||||||
|
exportable=True,
|
||||||
|
non_negative=True,
|
||||||
|
blocks={'expand': True})
|
||||||
|
net_w, net_h = 256, 256
|
||||||
|
resize_mode = 'upper_bound'
|
||||||
|
normalization = NormalizeImage(mean=[0.485, 0.456, 0.406],
|
||||||
|
std=[0.229, 0.224, 0.225])
|
||||||
|
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
f"model_type '{model_type}' not implemented, use: --model_type large"
|
||||||
|
)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
transform = Compose([
|
||||||
|
Resize(
|
||||||
|
net_w,
|
||||||
|
net_h,
|
||||||
|
resize_target=None,
|
||||||
|
keep_aspect_ratio=True,
|
||||||
|
ensure_multiple_of=32,
|
||||||
|
resize_method=resize_mode,
|
||||||
|
image_interpolation_method=cv2.INTER_CUBIC,
|
||||||
|
),
|
||||||
|
normalization,
|
||||||
|
PrepareForNet(),
|
||||||
|
])
|
||||||
|
|
||||||
|
return model.eval(), transform
|
||||||
|
|
||||||
|
|
||||||
|
class MiDaSInference(nn.Module):
|
||||||
|
MODEL_TYPES_TORCH_HUB = ['DPT_Large', 'DPT_Hybrid', 'MiDaS_small']
|
||||||
|
MODEL_TYPES_ISL = [
|
||||||
|
'dpt_large',
|
||||||
|
'dpt_hybrid',
|
||||||
|
'midas_v21',
|
||||||
|
'midas_v21_small',
|
||||||
|
]
|
||||||
|
|
||||||
|
def __init__(self, model_type, model_path):
|
||||||
|
super().__init__()
|
||||||
|
assert (model_type in self.MODEL_TYPES_ISL)
|
||||||
|
model, _ = load_model(model_type, model_path)
|
||||||
|
self.model = model
|
||||||
|
self.model.train = disabled_train
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
with torch.no_grad():
|
||||||
|
prediction = self.model(x)
|
||||||
|
return prediction
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import torch
|
||||||
|
|
||||||
|
|
||||||
|
class BaseModel(torch.nn.Module):
|
||||||
|
def load(self, path):
|
||||||
|
"""Load model from file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str): file path
|
||||||
|
"""
|
||||||
|
parameters = torch.load(path, map_location=torch.device('cpu'))
|
||||||
|
|
||||||
|
if 'optimizer' in parameters:
|
||||||
|
parameters = parameters['model']
|
||||||
|
|
||||||
|
self.load_state_dict(parameters)
|
||||||
@@ -0,0 +1,390 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
|
||||||
|
from .vit import (_make_pretrained_vitb16_384, _make_pretrained_vitb_rn50_384,
|
||||||
|
_make_pretrained_vitl16_384)
|
||||||
|
|
||||||
|
|
||||||
|
def _make_encoder(
|
||||||
|
backbone,
|
||||||
|
features,
|
||||||
|
use_pretrained,
|
||||||
|
groups=1,
|
||||||
|
expand=False,
|
||||||
|
exportable=True,
|
||||||
|
hooks=None,
|
||||||
|
use_vit_only=False,
|
||||||
|
use_readout='ignore',
|
||||||
|
):
|
||||||
|
if backbone == 'vitl16_384':
|
||||||
|
pretrained = _make_pretrained_vitl16_384(use_pretrained,
|
||||||
|
hooks=hooks,
|
||||||
|
use_readout=use_readout)
|
||||||
|
scratch = _make_scratch(
|
||||||
|
[256, 512, 1024, 1024], features, groups=groups,
|
||||||
|
expand=expand) # ViT-L/16 - 85.0% Top1 (backbone)
|
||||||
|
elif backbone == 'vitb_rn50_384':
|
||||||
|
pretrained = _make_pretrained_vitb_rn50_384(
|
||||||
|
use_pretrained,
|
||||||
|
hooks=hooks,
|
||||||
|
use_vit_only=use_vit_only,
|
||||||
|
use_readout=use_readout,
|
||||||
|
)
|
||||||
|
scratch = _make_scratch(
|
||||||
|
[256, 512, 768, 768], features, groups=groups,
|
||||||
|
expand=expand) # ViT-H/16 - 85.0% Top1 (backbone)
|
||||||
|
elif backbone == 'vitb16_384':
|
||||||
|
pretrained = _make_pretrained_vitb16_384(use_pretrained,
|
||||||
|
hooks=hooks,
|
||||||
|
use_readout=use_readout)
|
||||||
|
scratch = _make_scratch(
|
||||||
|
[96, 192, 384, 768], features, groups=groups,
|
||||||
|
expand=expand) # ViT-B/16 - 84.6% Top1 (backbone)
|
||||||
|
elif backbone == 'resnext101_wsl':
|
||||||
|
pretrained = _make_pretrained_resnext101_wsl(use_pretrained)
|
||||||
|
scratch = _make_scratch([256, 512, 1024, 2048],
|
||||||
|
features,
|
||||||
|
groups=groups,
|
||||||
|
expand=expand) # efficientnet_lite3
|
||||||
|
elif backbone == 'efficientnet_lite3':
|
||||||
|
pretrained = _make_pretrained_efficientnet_lite3(use_pretrained,
|
||||||
|
exportable=exportable)
|
||||||
|
scratch = _make_scratch([32, 48, 136, 384],
|
||||||
|
features,
|
||||||
|
groups=groups,
|
||||||
|
expand=expand) # efficientnet_lite3
|
||||||
|
else:
|
||||||
|
print(f"Backbone '{backbone}' not implemented")
|
||||||
|
assert False
|
||||||
|
|
||||||
|
return pretrained, scratch
|
||||||
|
|
||||||
|
|
||||||
|
def _make_scratch(in_shape, out_shape, groups=1, expand=False):
|
||||||
|
scratch = nn.Module()
|
||||||
|
|
||||||
|
out_shape1 = out_shape
|
||||||
|
out_shape2 = out_shape
|
||||||
|
out_shape3 = out_shape
|
||||||
|
out_shape4 = out_shape
|
||||||
|
if expand is True:
|
||||||
|
out_shape1 = out_shape
|
||||||
|
out_shape2 = out_shape * 2
|
||||||
|
out_shape3 = out_shape * 4
|
||||||
|
out_shape4 = out_shape * 8
|
||||||
|
|
||||||
|
scratch.layer1_rn = nn.Conv2d(in_shape[0],
|
||||||
|
out_shape1,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
bias=False,
|
||||||
|
groups=groups)
|
||||||
|
scratch.layer2_rn = nn.Conv2d(in_shape[1],
|
||||||
|
out_shape2,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
bias=False,
|
||||||
|
groups=groups)
|
||||||
|
scratch.layer3_rn = nn.Conv2d(in_shape[2],
|
||||||
|
out_shape3,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
bias=False,
|
||||||
|
groups=groups)
|
||||||
|
scratch.layer4_rn = nn.Conv2d(in_shape[3],
|
||||||
|
out_shape4,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
bias=False,
|
||||||
|
groups=groups)
|
||||||
|
|
||||||
|
return scratch
|
||||||
|
|
||||||
|
|
||||||
|
def _make_pretrained_efficientnet_lite3(use_pretrained, exportable=False):
|
||||||
|
efficientnet = torch.hub.load('rwightman/gen-efficientnet-pytorch',
|
||||||
|
'tf_efficientnet_lite3',
|
||||||
|
pretrained=use_pretrained,
|
||||||
|
exportable=exportable)
|
||||||
|
return _make_efficientnet_backbone(efficientnet)
|
||||||
|
|
||||||
|
|
||||||
|
def _make_efficientnet_backbone(effnet):
|
||||||
|
pretrained = nn.Module()
|
||||||
|
|
||||||
|
pretrained.layer1 = nn.Sequential(effnet.conv_stem, effnet.bn1,
|
||||||
|
effnet.act1, *effnet.blocks[0:2])
|
||||||
|
pretrained.layer2 = nn.Sequential(*effnet.blocks[2:3])
|
||||||
|
pretrained.layer3 = nn.Sequential(*effnet.blocks[3:5])
|
||||||
|
pretrained.layer4 = nn.Sequential(*effnet.blocks[5:9])
|
||||||
|
|
||||||
|
return pretrained
|
||||||
|
|
||||||
|
|
||||||
|
def _make_resnet_backbone(resnet):
|
||||||
|
pretrained = nn.Module()
|
||||||
|
pretrained.layer1 = nn.Sequential(resnet.conv1, resnet.bn1, resnet.relu,
|
||||||
|
resnet.maxpool, resnet.layer1)
|
||||||
|
|
||||||
|
pretrained.layer2 = resnet.layer2
|
||||||
|
pretrained.layer3 = resnet.layer3
|
||||||
|
pretrained.layer4 = resnet.layer4
|
||||||
|
|
||||||
|
return pretrained
|
||||||
|
|
||||||
|
|
||||||
|
def _make_pretrained_resnext101_wsl(use_pretrained):
|
||||||
|
resnet = torch.hub.load('facebookresearch/WSL-Images',
|
||||||
|
'resnext101_32x8d_wsl')
|
||||||
|
return _make_resnet_backbone(resnet)
|
||||||
|
|
||||||
|
|
||||||
|
class Interpolate(nn.Module):
|
||||||
|
"""Interpolation module.
|
||||||
|
"""
|
||||||
|
def __init__(self, scale_factor, mode, align_corners=False):
|
||||||
|
"""Init.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
scale_factor (float): scaling
|
||||||
|
mode (str): interpolation mode
|
||||||
|
"""
|
||||||
|
super(Interpolate, self).__init__()
|
||||||
|
|
||||||
|
self.interp = nn.functional.interpolate
|
||||||
|
self.scale_factor = scale_factor
|
||||||
|
self.mode = mode
|
||||||
|
self.align_corners = align_corners
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
"""Forward pass.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
x (tensor): input
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tensor: interpolated data
|
||||||
|
"""
|
||||||
|
|
||||||
|
x = self.interp(x,
|
||||||
|
scale_factor=self.scale_factor,
|
||||||
|
mode=self.mode,
|
||||||
|
align_corners=self.align_corners)
|
||||||
|
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
class ResidualConvUnit(nn.Module):
|
||||||
|
"""Residual convolution module.
|
||||||
|
"""
|
||||||
|
def __init__(self, features):
|
||||||
|
"""Init.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
features (int): number of features
|
||||||
|
"""
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.conv1 = nn.Conv2d(features,
|
||||||
|
features,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
bias=True)
|
||||||
|
|
||||||
|
self.conv2 = nn.Conv2d(features,
|
||||||
|
features,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
bias=True)
|
||||||
|
|
||||||
|
self.relu = nn.ReLU(inplace=True)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
"""Forward pass.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
x (tensor): input
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tensor: output
|
||||||
|
"""
|
||||||
|
out = self.relu(x)
|
||||||
|
out = self.conv1(out)
|
||||||
|
out = self.relu(out)
|
||||||
|
out = self.conv2(out)
|
||||||
|
|
||||||
|
return out + x
|
||||||
|
|
||||||
|
|
||||||
|
class FeatureFusionBlock(nn.Module):
|
||||||
|
"""Feature fusion block.
|
||||||
|
"""
|
||||||
|
def __init__(self, features):
|
||||||
|
"""Init.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
features (int): number of features
|
||||||
|
"""
|
||||||
|
super(FeatureFusionBlock, self).__init__()
|
||||||
|
|
||||||
|
self.resConfUnit1 = ResidualConvUnit(features)
|
||||||
|
self.resConfUnit2 = ResidualConvUnit(features)
|
||||||
|
|
||||||
|
def forward(self, *xs):
|
||||||
|
"""Forward pass.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tensor: output
|
||||||
|
"""
|
||||||
|
output = xs[0]
|
||||||
|
|
||||||
|
if len(xs) == 2:
|
||||||
|
output += self.resConfUnit1(xs[1])
|
||||||
|
|
||||||
|
output = self.resConfUnit2(output)
|
||||||
|
|
||||||
|
output = nn.functional.interpolate(output,
|
||||||
|
scale_factor=2,
|
||||||
|
mode='bilinear',
|
||||||
|
align_corners=True)
|
||||||
|
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
class ResidualConvUnit_custom(nn.Module):
|
||||||
|
"""Residual convolution module.
|
||||||
|
"""
|
||||||
|
def __init__(self, features, activation, bn):
|
||||||
|
"""Init.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
features (int): number of features
|
||||||
|
"""
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.bn = bn
|
||||||
|
|
||||||
|
self.groups = 1
|
||||||
|
|
||||||
|
self.conv1 = nn.Conv2d(features,
|
||||||
|
features,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
bias=True,
|
||||||
|
groups=self.groups)
|
||||||
|
|
||||||
|
self.conv2 = nn.Conv2d(features,
|
||||||
|
features,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
bias=True,
|
||||||
|
groups=self.groups)
|
||||||
|
|
||||||
|
if self.bn is True:
|
||||||
|
self.bn1 = nn.BatchNorm2d(features)
|
||||||
|
self.bn2 = nn.BatchNorm2d(features)
|
||||||
|
|
||||||
|
self.activation = activation
|
||||||
|
|
||||||
|
self.skip_add = nn.quantized.FloatFunctional()
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
"""Forward pass.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
x (tensor): input
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tensor: output
|
||||||
|
"""
|
||||||
|
|
||||||
|
out = self.activation(x)
|
||||||
|
out = self.conv1(out)
|
||||||
|
if self.bn is True:
|
||||||
|
out = self.bn1(out)
|
||||||
|
|
||||||
|
out = self.activation(out)
|
||||||
|
out = self.conv2(out)
|
||||||
|
if self.bn is True:
|
||||||
|
out = self.bn2(out)
|
||||||
|
|
||||||
|
if self.groups > 1:
|
||||||
|
out = self.conv_merge(out)
|
||||||
|
|
||||||
|
return self.skip_add.add(out, x)
|
||||||
|
|
||||||
|
# return out + x
|
||||||
|
|
||||||
|
|
||||||
|
class FeatureFusionBlock_custom(nn.Module):
|
||||||
|
"""Feature fusion block.
|
||||||
|
"""
|
||||||
|
def __init__(self,
|
||||||
|
features,
|
||||||
|
activation,
|
||||||
|
deconv=False,
|
||||||
|
bn=False,
|
||||||
|
expand=False,
|
||||||
|
align_corners=True):
|
||||||
|
"""Init.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
features (int): number of features
|
||||||
|
"""
|
||||||
|
super(FeatureFusionBlock_custom, self).__init__()
|
||||||
|
|
||||||
|
self.deconv = deconv
|
||||||
|
self.align_corners = align_corners
|
||||||
|
|
||||||
|
self.groups = 1
|
||||||
|
|
||||||
|
self.expand = expand
|
||||||
|
out_features = features
|
||||||
|
if self.expand is True:
|
||||||
|
out_features = features // 2
|
||||||
|
|
||||||
|
self.out_conv = nn.Conv2d(features,
|
||||||
|
out_features,
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
bias=True,
|
||||||
|
groups=1)
|
||||||
|
|
||||||
|
self.resConfUnit1 = ResidualConvUnit_custom(features, activation, bn)
|
||||||
|
self.resConfUnit2 = ResidualConvUnit_custom(features, activation, bn)
|
||||||
|
|
||||||
|
self.skip_add = nn.quantized.FloatFunctional()
|
||||||
|
|
||||||
|
def forward(self, *xs):
|
||||||
|
"""Forward pass.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tensor: output
|
||||||
|
"""
|
||||||
|
output = xs[0]
|
||||||
|
|
||||||
|
if len(xs) == 2:
|
||||||
|
res = self.resConfUnit1(xs[1])
|
||||||
|
output = self.skip_add.add(output, res)
|
||||||
|
# output += res
|
||||||
|
|
||||||
|
output = self.resConfUnit2(output)
|
||||||
|
|
||||||
|
output = nn.functional.interpolate(output,
|
||||||
|
scale_factor=2,
|
||||||
|
mode='bilinear',
|
||||||
|
align_corners=self.align_corners)
|
||||||
|
|
||||||
|
output = self.out_conv(output)
|
||||||
|
|
||||||
|
return output
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
|
||||||
|
from .base_model import BaseModel
|
||||||
|
from .blocks import FeatureFusionBlock_custom, Interpolate, _make_encoder
|
||||||
|
from .vit import forward_vit
|
||||||
|
|
||||||
|
|
||||||
|
def _make_fusion_block(features, use_bn):
|
||||||
|
return FeatureFusionBlock_custom(
|
||||||
|
features,
|
||||||
|
nn.ReLU(False),
|
||||||
|
deconv=False,
|
||||||
|
bn=use_bn,
|
||||||
|
expand=False,
|
||||||
|
align_corners=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class DPT(BaseModel):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
head,
|
||||||
|
features=256,
|
||||||
|
backbone='vitb_rn50_384',
|
||||||
|
readout='project',
|
||||||
|
channels_last=False,
|
||||||
|
use_bn=False,
|
||||||
|
):
|
||||||
|
|
||||||
|
super(DPT, self).__init__()
|
||||||
|
|
||||||
|
self.channels_last = channels_last
|
||||||
|
|
||||||
|
hooks = {
|
||||||
|
'vitb_rn50_384': [0, 1, 8, 11],
|
||||||
|
'vitb16_384': [2, 5, 8, 11],
|
||||||
|
'vitl16_384': [5, 11, 17, 23],
|
||||||
|
}
|
||||||
|
|
||||||
|
# Instantiate backbone and reassemble blocks
|
||||||
|
self.pretrained, self.scratch = _make_encoder(
|
||||||
|
backbone,
|
||||||
|
features,
|
||||||
|
False, # Set to true of you want to train from scratch, uses ImageNet weights
|
||||||
|
groups=1,
|
||||||
|
expand=False,
|
||||||
|
exportable=False,
|
||||||
|
hooks=hooks[backbone],
|
||||||
|
use_readout=readout,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.scratch.refinenet1 = _make_fusion_block(features, use_bn)
|
||||||
|
self.scratch.refinenet2 = _make_fusion_block(features, use_bn)
|
||||||
|
self.scratch.refinenet3 = _make_fusion_block(features, use_bn)
|
||||||
|
self.scratch.refinenet4 = _make_fusion_block(features, use_bn)
|
||||||
|
|
||||||
|
self.scratch.output_conv = head
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
if self.channels_last is True:
|
||||||
|
x.contiguous(memory_format=torch.channels_last)
|
||||||
|
|
||||||
|
layer_1, layer_2, layer_3, layer_4 = forward_vit(self.pretrained, x)
|
||||||
|
|
||||||
|
layer_1_rn = self.scratch.layer1_rn(layer_1)
|
||||||
|
layer_2_rn = self.scratch.layer2_rn(layer_2)
|
||||||
|
layer_3_rn = self.scratch.layer3_rn(layer_3)
|
||||||
|
layer_4_rn = self.scratch.layer4_rn(layer_4)
|
||||||
|
|
||||||
|
path_4 = self.scratch.refinenet4(layer_4_rn)
|
||||||
|
path_3 = self.scratch.refinenet3(path_4, layer_3_rn)
|
||||||
|
path_2 = self.scratch.refinenet2(path_3, layer_2_rn)
|
||||||
|
path_1 = self.scratch.refinenet1(path_2, layer_1_rn)
|
||||||
|
|
||||||
|
out = self.scratch.output_conv(path_1)
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
class DPTDepthModel(DPT):
|
||||||
|
def __init__(self, path=None, non_negative=True, **kwargs):
|
||||||
|
features = kwargs['features'] if 'features' in kwargs else 256
|
||||||
|
|
||||||
|
head = nn.Sequential(
|
||||||
|
nn.Conv2d(features,
|
||||||
|
features // 2,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1),
|
||||||
|
Interpolate(scale_factor=2, mode='bilinear', align_corners=True),
|
||||||
|
nn.Conv2d(features // 2, 32, kernel_size=3, stride=1, padding=1),
|
||||||
|
nn.ReLU(True),
|
||||||
|
nn.Conv2d(32, 1, kernel_size=1, stride=1, padding=0),
|
||||||
|
nn.ReLU(True) if non_negative else nn.Identity(),
|
||||||
|
nn.Identity(),
|
||||||
|
)
|
||||||
|
|
||||||
|
super().__init__(head, **kwargs)
|
||||||
|
|
||||||
|
if path is not None:
|
||||||
|
self.load(path)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
return super().forward(x).squeeze(dim=1)
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""MidashNet: Network for monocular depth estimation trained by mixing several datasets.
|
||||||
|
This file contains code that is adapted from
|
||||||
|
https://github.com/thomasjpfan/pytorch_refinenet/blob/master/pytorch_refinenet/refinenet/refinenet_4cascade.py
|
||||||
|
"""
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
|
||||||
|
from .base_model import BaseModel
|
||||||
|
from .blocks import FeatureFusionBlock, Interpolate, _make_encoder
|
||||||
|
|
||||||
|
|
||||||
|
class MidasNet(BaseModel):
|
||||||
|
"""Network for monocular depth estimation.
|
||||||
|
"""
|
||||||
|
def __init__(self, path=None, features=256, non_negative=True):
|
||||||
|
"""Init.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str, optional): Path to saved model. Defaults to None.
|
||||||
|
features (int, optional): Number of features. Defaults to 256.
|
||||||
|
backbone (str, optional): Backbone network for encoder. Defaults to resnet50
|
||||||
|
"""
|
||||||
|
print('Loading weights: ', path)
|
||||||
|
|
||||||
|
super(MidasNet, self).__init__()
|
||||||
|
|
||||||
|
use_pretrained = False if path is None else True
|
||||||
|
|
||||||
|
self.pretrained, self.scratch = _make_encoder(
|
||||||
|
backbone='resnext101_wsl',
|
||||||
|
features=features,
|
||||||
|
use_pretrained=use_pretrained)
|
||||||
|
|
||||||
|
self.scratch.refinenet4 = FeatureFusionBlock(features)
|
||||||
|
self.scratch.refinenet3 = FeatureFusionBlock(features)
|
||||||
|
self.scratch.refinenet2 = FeatureFusionBlock(features)
|
||||||
|
self.scratch.refinenet1 = FeatureFusionBlock(features)
|
||||||
|
|
||||||
|
self.scratch.output_conv = nn.Sequential(
|
||||||
|
nn.Conv2d(features, 128, kernel_size=3, stride=1, padding=1),
|
||||||
|
Interpolate(scale_factor=2, mode='bilinear'),
|
||||||
|
nn.Conv2d(128, 32, kernel_size=3, stride=1, padding=1),
|
||||||
|
nn.ReLU(True),
|
||||||
|
nn.Conv2d(32, 1, kernel_size=1, stride=1, padding=0),
|
||||||
|
nn.ReLU(True) if non_negative else nn.Identity(),
|
||||||
|
)
|
||||||
|
|
||||||
|
if path:
|
||||||
|
self.load(path)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
"""Forward pass.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
x (tensor): input data (image)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tensor: depth
|
||||||
|
"""
|
||||||
|
|
||||||
|
layer_1 = self.pretrained.layer1(x)
|
||||||
|
layer_2 = self.pretrained.layer2(layer_1)
|
||||||
|
layer_3 = self.pretrained.layer3(layer_2)
|
||||||
|
layer_4 = self.pretrained.layer4(layer_3)
|
||||||
|
|
||||||
|
layer_1_rn = self.scratch.layer1_rn(layer_1)
|
||||||
|
layer_2_rn = self.scratch.layer2_rn(layer_2)
|
||||||
|
layer_3_rn = self.scratch.layer3_rn(layer_3)
|
||||||
|
layer_4_rn = self.scratch.layer4_rn(layer_4)
|
||||||
|
|
||||||
|
path_4 = self.scratch.refinenet4(layer_4_rn)
|
||||||
|
path_3 = self.scratch.refinenet3(path_4, layer_3_rn)
|
||||||
|
path_2 = self.scratch.refinenet2(path_3, layer_2_rn)
|
||||||
|
path_1 = self.scratch.refinenet1(path_2, layer_1_rn)
|
||||||
|
|
||||||
|
out = self.scratch.output_conv(path_1)
|
||||||
|
|
||||||
|
return torch.squeeze(out, dim=1)
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""MidashNet: Network for monocular depth estimation trained by mixing several datasets.
|
||||||
|
This file contains code that is adapted from
|
||||||
|
https://github.com/thomasjpfan/pytorch_refinenet/blob/master/pytorch_refinenet/refinenet/refinenet_4cascade.py
|
||||||
|
"""
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
|
||||||
|
from .base_model import BaseModel
|
||||||
|
from .blocks import FeatureFusionBlock_custom, Interpolate, _make_encoder
|
||||||
|
|
||||||
|
|
||||||
|
class MidasNet_small(BaseModel):
|
||||||
|
"""Network for monocular depth estimation.
|
||||||
|
"""
|
||||||
|
def __init__(self,
|
||||||
|
path=None,
|
||||||
|
features=64,
|
||||||
|
backbone='efficientnet_lite3',
|
||||||
|
non_negative=True,
|
||||||
|
exportable=True,
|
||||||
|
channels_last=False,
|
||||||
|
align_corners=True,
|
||||||
|
blocks={'expand': True}):
|
||||||
|
"""Init.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str, optional): Path to saved model. Defaults to None.
|
||||||
|
features (int, optional): Number of features. Defaults to 256.
|
||||||
|
backbone (str, optional): Backbone network for encoder. Defaults to resnet50
|
||||||
|
"""
|
||||||
|
print('Loading weights: ', path)
|
||||||
|
|
||||||
|
super(MidasNet_small, self).__init__()
|
||||||
|
|
||||||
|
use_pretrained = False if path else True
|
||||||
|
|
||||||
|
self.channels_last = channels_last
|
||||||
|
self.blocks = blocks
|
||||||
|
self.backbone = backbone
|
||||||
|
|
||||||
|
self.groups = 1
|
||||||
|
|
||||||
|
features1 = features
|
||||||
|
features2 = features
|
||||||
|
features3 = features
|
||||||
|
features4 = features
|
||||||
|
self.expand = False
|
||||||
|
if 'expand' in self.blocks and self.blocks['expand'] is True:
|
||||||
|
self.expand = True
|
||||||
|
features1 = features
|
||||||
|
features2 = features * 2
|
||||||
|
features3 = features * 4
|
||||||
|
features4 = features * 8
|
||||||
|
|
||||||
|
self.pretrained, self.scratch = _make_encoder(self.backbone,
|
||||||
|
features,
|
||||||
|
use_pretrained,
|
||||||
|
groups=self.groups,
|
||||||
|
expand=self.expand,
|
||||||
|
exportable=exportable)
|
||||||
|
|
||||||
|
self.scratch.activation = nn.ReLU(False)
|
||||||
|
|
||||||
|
self.scratch.refinenet4 = FeatureFusionBlock_custom(
|
||||||
|
features4,
|
||||||
|
self.scratch.activation,
|
||||||
|
deconv=False,
|
||||||
|
bn=False,
|
||||||
|
expand=self.expand,
|
||||||
|
align_corners=align_corners)
|
||||||
|
self.scratch.refinenet3 = FeatureFusionBlock_custom(
|
||||||
|
features3,
|
||||||
|
self.scratch.activation,
|
||||||
|
deconv=False,
|
||||||
|
bn=False,
|
||||||
|
expand=self.expand,
|
||||||
|
align_corners=align_corners)
|
||||||
|
self.scratch.refinenet2 = FeatureFusionBlock_custom(
|
||||||
|
features2,
|
||||||
|
self.scratch.activation,
|
||||||
|
deconv=False,
|
||||||
|
bn=False,
|
||||||
|
expand=self.expand,
|
||||||
|
align_corners=align_corners)
|
||||||
|
self.scratch.refinenet1 = FeatureFusionBlock_custom(
|
||||||
|
features1,
|
||||||
|
self.scratch.activation,
|
||||||
|
deconv=False,
|
||||||
|
bn=False,
|
||||||
|
align_corners=align_corners)
|
||||||
|
|
||||||
|
self.scratch.output_conv = nn.Sequential(
|
||||||
|
nn.Conv2d(features,
|
||||||
|
features // 2,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
padding=1,
|
||||||
|
groups=self.groups),
|
||||||
|
Interpolate(scale_factor=2, mode='bilinear'),
|
||||||
|
nn.Conv2d(features // 2, 32, kernel_size=3, stride=1, padding=1),
|
||||||
|
self.scratch.activation,
|
||||||
|
nn.Conv2d(32, 1, kernel_size=1, stride=1, padding=0),
|
||||||
|
nn.ReLU(True) if non_negative else nn.Identity(),
|
||||||
|
nn.Identity(),
|
||||||
|
)
|
||||||
|
|
||||||
|
if path:
|
||||||
|
self.load(path)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
"""Forward pass.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
x (tensor): input data (image)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tensor: depth
|
||||||
|
"""
|
||||||
|
if self.channels_last is True:
|
||||||
|
print('self.channels_last = ', self.channels_last)
|
||||||
|
x.contiguous(memory_format=torch.channels_last)
|
||||||
|
|
||||||
|
layer_1 = self.pretrained.layer1(x)
|
||||||
|
layer_2 = self.pretrained.layer2(layer_1)
|
||||||
|
layer_3 = self.pretrained.layer3(layer_2)
|
||||||
|
layer_4 = self.pretrained.layer4(layer_3)
|
||||||
|
|
||||||
|
layer_1_rn = self.scratch.layer1_rn(layer_1)
|
||||||
|
layer_2_rn = self.scratch.layer2_rn(layer_2)
|
||||||
|
layer_3_rn = self.scratch.layer3_rn(layer_3)
|
||||||
|
layer_4_rn = self.scratch.layer4_rn(layer_4)
|
||||||
|
|
||||||
|
path_4 = self.scratch.refinenet4(layer_4_rn)
|
||||||
|
path_3 = self.scratch.refinenet3(path_4, layer_3_rn)
|
||||||
|
path_2 = self.scratch.refinenet2(path_3, layer_2_rn)
|
||||||
|
path_1 = self.scratch.refinenet1(path_2, layer_1_rn)
|
||||||
|
|
||||||
|
out = self.scratch.output_conv(path_1)
|
||||||
|
|
||||||
|
return torch.squeeze(out, dim=1)
|
||||||
|
|
||||||
|
|
||||||
|
def fuse_model(m):
|
||||||
|
prev_previous_type = nn.Identity()
|
||||||
|
prev_previous_name = ''
|
||||||
|
previous_type = nn.Identity()
|
||||||
|
previous_name = ''
|
||||||
|
for name, module in m.named_modules():
|
||||||
|
if prev_previous_type == nn.Conv2d and previous_type == nn.BatchNorm2d and type(
|
||||||
|
module) == nn.ReLU:
|
||||||
|
# print("FUSED ", prev_previous_name, previous_name, name)
|
||||||
|
torch.quantization.fuse_modules(
|
||||||
|
m, [prev_previous_name, previous_name, name], inplace=True)
|
||||||
|
elif prev_previous_type == nn.Conv2d and previous_type == nn.BatchNorm2d:
|
||||||
|
# print("FUSED ", prev_previous_name, previous_name)
|
||||||
|
torch.quantization.fuse_modules(
|
||||||
|
m, [prev_previous_name, previous_name], inplace=True)
|
||||||
|
# elif previous_type == nn.Conv2d and type(module) == nn.ReLU:
|
||||||
|
# print("FUSED ", previous_name, name)
|
||||||
|
# torch.quantization.fuse_modules(m, [previous_name, name], inplace=True)
|
||||||
|
|
||||||
|
prev_previous_type = previous_type
|
||||||
|
prev_previous_name = previous_name
|
||||||
|
previous_type = type(module)
|
||||||
|
previous_name = name
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import math
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
def apply_min_size(sample, size, image_interpolation_method=cv2.INTER_AREA):
|
||||||
|
"""Rezise the sample to ensure the given size. Keeps aspect ratio.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
sample (dict): sample
|
||||||
|
size (tuple): image size
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tuple: new size
|
||||||
|
"""
|
||||||
|
shape = list(sample['disparity'].shape)
|
||||||
|
|
||||||
|
if shape[0] >= size[0] and shape[1] >= size[1]:
|
||||||
|
return sample
|
||||||
|
|
||||||
|
scale = [0, 0]
|
||||||
|
scale[0] = size[0] / shape[0]
|
||||||
|
scale[1] = size[1] / shape[1]
|
||||||
|
|
||||||
|
scale = max(scale)
|
||||||
|
|
||||||
|
shape[0] = math.ceil(scale * shape[0])
|
||||||
|
shape[1] = math.ceil(scale * shape[1])
|
||||||
|
|
||||||
|
# resize
|
||||||
|
sample['image'] = cv2.resize(sample['image'],
|
||||||
|
tuple(shape[::-1]),
|
||||||
|
interpolation=image_interpolation_method)
|
||||||
|
|
||||||
|
sample['disparity'] = cv2.resize(sample['disparity'],
|
||||||
|
tuple(shape[::-1]),
|
||||||
|
interpolation=cv2.INTER_NEAREST)
|
||||||
|
sample['mask'] = cv2.resize(
|
||||||
|
sample['mask'].astype(np.float32),
|
||||||
|
tuple(shape[::-1]),
|
||||||
|
interpolation=cv2.INTER_NEAREST,
|
||||||
|
)
|
||||||
|
sample['mask'] = sample['mask'].astype(bool)
|
||||||
|
|
||||||
|
return tuple(shape)
|
||||||
|
|
||||||
|
|
||||||
|
class Resize(object):
|
||||||
|
"""Resize sample to given size (width, height).
|
||||||
|
"""
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
resize_target=True,
|
||||||
|
keep_aspect_ratio=False,
|
||||||
|
ensure_multiple_of=1,
|
||||||
|
resize_method='lower_bound',
|
||||||
|
image_interpolation_method=cv2.INTER_AREA,
|
||||||
|
):
|
||||||
|
"""Init.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
width (int): desired output width
|
||||||
|
height (int): desired output height
|
||||||
|
resize_target (bool, optional):
|
||||||
|
True: Resize the full sample (image, mask, target).
|
||||||
|
False: Resize image only.
|
||||||
|
Defaults to True.
|
||||||
|
keep_aspect_ratio (bool, optional):
|
||||||
|
True: Keep the aspect ratio of the input sample.
|
||||||
|
Output sample might not have the given width and height, and
|
||||||
|
resize behaviour depends on the parameter 'resize_method'.
|
||||||
|
Defaults to False.
|
||||||
|
ensure_multiple_of (int, optional):
|
||||||
|
Output width and height is constrained to be multiple of this parameter.
|
||||||
|
Defaults to 1.
|
||||||
|
resize_method (str, optional):
|
||||||
|
"lower_bound": Output will be at least as large as the given size.
|
||||||
|
"upper_bound": Output will be at max as large as the given size. "
|
||||||
|
"(Output size might be smaller than given size.)"
|
||||||
|
"minimal": Scale as least as possible. (Output size might be smaller than given size.)
|
||||||
|
Defaults to "lower_bound".
|
||||||
|
"""
|
||||||
|
self.__width = width
|
||||||
|
self.__height = height
|
||||||
|
|
||||||
|
self.__resize_target = resize_target
|
||||||
|
self.__keep_aspect_ratio = keep_aspect_ratio
|
||||||
|
self.__multiple_of = ensure_multiple_of
|
||||||
|
self.__resize_method = resize_method
|
||||||
|
self.__image_interpolation_method = image_interpolation_method
|
||||||
|
|
||||||
|
def constrain_to_multiple_of(self, x, min_val=0, max_val=None):
|
||||||
|
y = (np.round(x / self.__multiple_of) * self.__multiple_of).astype(int)
|
||||||
|
|
||||||
|
if max_val is not None and y > max_val:
|
||||||
|
y = (np.floor(x / self.__multiple_of) *
|
||||||
|
self.__multiple_of).astype(int)
|
||||||
|
|
||||||
|
if y < min_val:
|
||||||
|
y = (np.ceil(x / self.__multiple_of) *
|
||||||
|
self.__multiple_of).astype(int)
|
||||||
|
|
||||||
|
return y
|
||||||
|
|
||||||
|
def get_size(self, width, height):
|
||||||
|
# determine new height and width
|
||||||
|
scale_height = self.__height / height
|
||||||
|
scale_width = self.__width / width
|
||||||
|
|
||||||
|
if self.__keep_aspect_ratio:
|
||||||
|
if self.__resize_method == 'lower_bound':
|
||||||
|
# scale such that output size is lower bound
|
||||||
|
if scale_width > scale_height:
|
||||||
|
# fit width
|
||||||
|
scale_height = scale_width
|
||||||
|
else:
|
||||||
|
# fit height
|
||||||
|
scale_width = scale_height
|
||||||
|
elif self.__resize_method == 'upper_bound':
|
||||||
|
# scale such that output size is upper bound
|
||||||
|
if scale_width < scale_height:
|
||||||
|
# fit width
|
||||||
|
scale_height = scale_width
|
||||||
|
else:
|
||||||
|
# fit height
|
||||||
|
scale_width = scale_height
|
||||||
|
elif self.__resize_method == 'minimal':
|
||||||
|
# scale as least as possbile
|
||||||
|
if abs(1 - scale_width) < abs(1 - scale_height):
|
||||||
|
# fit width
|
||||||
|
scale_height = scale_width
|
||||||
|
else:
|
||||||
|
# fit height
|
||||||
|
scale_width = scale_height
|
||||||
|
else:
|
||||||
|
raise ValueError(
|
||||||
|
f'resize_method {self.__resize_method} not implemented')
|
||||||
|
|
||||||
|
if self.__resize_method == 'lower_bound':
|
||||||
|
new_height = self.constrain_to_multiple_of(scale_height * height,
|
||||||
|
min_val=self.__height)
|
||||||
|
new_width = self.constrain_to_multiple_of(scale_width * width,
|
||||||
|
min_val=self.__width)
|
||||||
|
elif self.__resize_method == 'upper_bound':
|
||||||
|
new_height = self.constrain_to_multiple_of(scale_height * height,
|
||||||
|
max_val=self.__height)
|
||||||
|
new_width = self.constrain_to_multiple_of(scale_width * width,
|
||||||
|
max_val=self.__width)
|
||||||
|
elif self.__resize_method == 'minimal':
|
||||||
|
new_height = self.constrain_to_multiple_of(scale_height * height)
|
||||||
|
new_width = self.constrain_to_multiple_of(scale_width * width)
|
||||||
|
else:
|
||||||
|
raise ValueError(
|
||||||
|
f'resize_method {self.__resize_method} not implemented')
|
||||||
|
|
||||||
|
return (new_width, new_height)
|
||||||
|
|
||||||
|
def __call__(self, sample):
|
||||||
|
width, height = self.get_size(sample['image'].shape[1],
|
||||||
|
sample['image'].shape[0])
|
||||||
|
|
||||||
|
# resize sample
|
||||||
|
sample['image'] = cv2.resize(
|
||||||
|
sample['image'],
|
||||||
|
(width, height),
|
||||||
|
interpolation=self.__image_interpolation_method,
|
||||||
|
)
|
||||||
|
|
||||||
|
if self.__resize_target:
|
||||||
|
if 'disparity' in sample:
|
||||||
|
sample['disparity'] = cv2.resize(
|
||||||
|
sample['disparity'],
|
||||||
|
(width, height),
|
||||||
|
interpolation=cv2.INTER_NEAREST,
|
||||||
|
)
|
||||||
|
|
||||||
|
if 'depth' in sample:
|
||||||
|
sample['depth'] = cv2.resize(sample['depth'], (width, height),
|
||||||
|
interpolation=cv2.INTER_NEAREST)
|
||||||
|
|
||||||
|
sample['mask'] = cv2.resize(
|
||||||
|
sample['mask'].astype(np.float32),
|
||||||
|
(width, height),
|
||||||
|
interpolation=cv2.INTER_NEAREST,
|
||||||
|
)
|
||||||
|
sample['mask'] = sample['mask'].astype(bool)
|
||||||
|
|
||||||
|
return sample
|
||||||
|
|
||||||
|
|
||||||
|
class NormalizeImage(object):
|
||||||
|
"""Normlize image by given mean and std.
|
||||||
|
"""
|
||||||
|
def __init__(self, mean, std):
|
||||||
|
self.__mean = mean
|
||||||
|
self.__std = std
|
||||||
|
|
||||||
|
def __call__(self, sample):
|
||||||
|
sample['image'] = (sample['image'] - self.__mean) / self.__std
|
||||||
|
|
||||||
|
return sample
|
||||||
|
|
||||||
|
|
||||||
|
class PrepareForNet(object):
|
||||||
|
"""Prepare sample for usage as network input.
|
||||||
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __call__(self, sample):
|
||||||
|
image = np.transpose(sample['image'], (2, 0, 1))
|
||||||
|
sample['image'] = np.ascontiguousarray(image).astype(np.float32)
|
||||||
|
|
||||||
|
if 'mask' in sample:
|
||||||
|
sample['mask'] = sample['mask'].astype(np.float32)
|
||||||
|
sample['mask'] = np.ascontiguousarray(sample['mask'])
|
||||||
|
|
||||||
|
if 'disparity' in sample:
|
||||||
|
disparity = sample['disparity'].astype(np.float32)
|
||||||
|
sample['disparity'] = np.ascontiguousarray(disparity)
|
||||||
|
|
||||||
|
if 'depth' in sample:
|
||||||
|
depth = sample['depth'].astype(np.float32)
|
||||||
|
sample['depth'] = np.ascontiguousarray(depth)
|
||||||
|
|
||||||
|
return sample
|
||||||
@@ -0,0 +1,192 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Utils for monoDepth."""
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
import torch
|
||||||
|
|
||||||
|
|
||||||
|
def read_pfm(path):
|
||||||
|
"""Read pfm file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str): path to file
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tuple: (data, scale)
|
||||||
|
"""
|
||||||
|
with open(path, 'rb') as file:
|
||||||
|
|
||||||
|
color = None
|
||||||
|
width = None
|
||||||
|
height = None
|
||||||
|
scale = None
|
||||||
|
endian = None
|
||||||
|
|
||||||
|
header = file.readline().rstrip()
|
||||||
|
if header.decode('ascii') == 'PF':
|
||||||
|
color = True
|
||||||
|
elif header.decode('ascii') == 'Pf':
|
||||||
|
color = False
|
||||||
|
else:
|
||||||
|
raise Exception('Not a PFM file: ' + path)
|
||||||
|
|
||||||
|
dim_match = re.match(r'^(\d+)\s(\d+)\s$',
|
||||||
|
file.readline().decode('ascii'))
|
||||||
|
if dim_match:
|
||||||
|
width, height = list(map(int, dim_match.groups()))
|
||||||
|
else:
|
||||||
|
raise Exception('Malformed PFM header.')
|
||||||
|
|
||||||
|
scale = float(file.readline().decode('ascii').rstrip())
|
||||||
|
if scale < 0:
|
||||||
|
# little-endian
|
||||||
|
endian = '<'
|
||||||
|
scale = -scale
|
||||||
|
else:
|
||||||
|
# big-endian
|
||||||
|
endian = '>'
|
||||||
|
|
||||||
|
data = np.fromfile(file, endian + 'f')
|
||||||
|
shape = (height, width, 3) if color else (height, width)
|
||||||
|
|
||||||
|
data = np.reshape(data, shape)
|
||||||
|
data = np.flipud(data)
|
||||||
|
|
||||||
|
return data, scale
|
||||||
|
|
||||||
|
|
||||||
|
def write_pfm(path, image, scale=1):
|
||||||
|
"""Write pfm file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str): pathto file
|
||||||
|
image (array): data
|
||||||
|
scale (int, optional): Scale. Defaults to 1.
|
||||||
|
"""
|
||||||
|
|
||||||
|
with open(path, 'wb') as file:
|
||||||
|
color = None
|
||||||
|
|
||||||
|
if image.dtype.name != 'float32':
|
||||||
|
raise Exception('Image dtype must be float32.')
|
||||||
|
|
||||||
|
image = np.flipud(image)
|
||||||
|
|
||||||
|
if len(image.shape) == 3 and image.shape[2] == 3: # color image
|
||||||
|
color = True
|
||||||
|
elif (len(image.shape) == 2
|
||||||
|
or len(image.shape) == 3 and image.shape[2] == 1): # greyscale
|
||||||
|
color = False
|
||||||
|
else:
|
||||||
|
raise Exception(
|
||||||
|
'Image must have H x W x 3, H x W x 1 or H x W dimensions.')
|
||||||
|
|
||||||
|
file.write('PF\n' if color else 'Pf\n'.encode())
|
||||||
|
file.write('%d %d\n'.encode() % (image.shape[1], image.shape[0]))
|
||||||
|
|
||||||
|
endian = image.dtype.byteorder
|
||||||
|
|
||||||
|
if endian == '<' or endian == '=' and sys.byteorder == 'little':
|
||||||
|
scale = -scale
|
||||||
|
|
||||||
|
file.write('%f\n'.encode() % scale)
|
||||||
|
|
||||||
|
image.tofile(file)
|
||||||
|
|
||||||
|
|
||||||
|
def read_image(path):
|
||||||
|
"""Read image and output RGB image (0-1).
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str): path to file
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
array: RGB image (0-1)
|
||||||
|
"""
|
||||||
|
img = cv2.imread(path)
|
||||||
|
|
||||||
|
if img.ndim == 2:
|
||||||
|
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
|
||||||
|
|
||||||
|
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) / 255.0
|
||||||
|
|
||||||
|
return img
|
||||||
|
|
||||||
|
|
||||||
|
def resize_image(img):
|
||||||
|
"""Resize image and make it fit for network.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
img (array): image
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tensor: data ready for network
|
||||||
|
"""
|
||||||
|
height_orig = img.shape[0]
|
||||||
|
width_orig = img.shape[1]
|
||||||
|
|
||||||
|
if width_orig > height_orig:
|
||||||
|
scale = width_orig / 384
|
||||||
|
else:
|
||||||
|
scale = height_orig / 384
|
||||||
|
|
||||||
|
height = (np.ceil(height_orig / scale / 32) * 32).astype(int)
|
||||||
|
width = (np.ceil(width_orig / scale / 32) * 32).astype(int)
|
||||||
|
|
||||||
|
img_resized = cv2.resize(img, (width, height),
|
||||||
|
interpolation=cv2.INTER_AREA)
|
||||||
|
|
||||||
|
img_resized = (torch.from_numpy(np.transpose(
|
||||||
|
img_resized, (2, 0, 1))).contiguous().float())
|
||||||
|
img_resized = img_resized.unsqueeze(0)
|
||||||
|
|
||||||
|
return img_resized
|
||||||
|
|
||||||
|
|
||||||
|
def resize_depth(depth, width, height):
|
||||||
|
"""Resize depth map and bring to CPU (numpy).
|
||||||
|
|
||||||
|
Args:
|
||||||
|
depth (tensor): depth
|
||||||
|
width (int): image width
|
||||||
|
height (int): image height
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
array: processed depth
|
||||||
|
"""
|
||||||
|
depth = torch.squeeze(depth[0, :, :, :]).to('cpu')
|
||||||
|
|
||||||
|
depth_resized = cv2.resize(depth.numpy(), (width, height),
|
||||||
|
interpolation=cv2.INTER_CUBIC)
|
||||||
|
|
||||||
|
return depth_resized
|
||||||
|
|
||||||
|
|
||||||
|
def write_depth(path, depth, bits=1):
|
||||||
|
"""Write depth map to pfm and png file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str): filepath without extension
|
||||||
|
depth (array): depth
|
||||||
|
"""
|
||||||
|
write_pfm(path + '.pfm', depth.astype(np.float32))
|
||||||
|
|
||||||
|
depth_min = depth.min()
|
||||||
|
depth_max = depth.max()
|
||||||
|
|
||||||
|
max_val = (2**(8 * bits)) - 1
|
||||||
|
|
||||||
|
if depth_max - depth_min > np.finfo('float').eps:
|
||||||
|
out = max_val * (depth - depth_min) / (depth_max - depth_min)
|
||||||
|
else:
|
||||||
|
out = np.zeros(depth.shape, dtype=depth.type)
|
||||||
|
|
||||||
|
if bits == 1:
|
||||||
|
cv2.imwrite(path + '.png', out.astype('uint8'))
|
||||||
|
elif bits == 2:
|
||||||
|
cv2.imwrite(path + '.png', out.astype('uint16'))
|
||||||
|
|
||||||
|
return
|
||||||
@@ -0,0 +1,509 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import math
|
||||||
|
import types
|
||||||
|
|
||||||
|
import timm
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
import torch.nn.functional as F
|
||||||
|
|
||||||
|
|
||||||
|
class Slice(nn.Module):
|
||||||
|
def __init__(self, start_index=1):
|
||||||
|
super(Slice, self).__init__()
|
||||||
|
self.start_index = start_index
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
return x[:, self.start_index:]
|
||||||
|
|
||||||
|
|
||||||
|
class AddReadout(nn.Module):
|
||||||
|
def __init__(self, start_index=1):
|
||||||
|
super(AddReadout, self).__init__()
|
||||||
|
self.start_index = start_index
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
if self.start_index == 2:
|
||||||
|
readout = (x[:, 0] + x[:, 1]) / 2
|
||||||
|
else:
|
||||||
|
readout = x[:, 0]
|
||||||
|
return x[:, self.start_index:] + readout.unsqueeze(1)
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectReadout(nn.Module):
|
||||||
|
def __init__(self, in_features, start_index=1):
|
||||||
|
super(ProjectReadout, self).__init__()
|
||||||
|
self.start_index = start_index
|
||||||
|
|
||||||
|
self.project = nn.Sequential(nn.Linear(2 * in_features, in_features),
|
||||||
|
nn.GELU())
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
readout = x[:, 0].unsqueeze(1).expand_as(x[:, self.start_index:])
|
||||||
|
features = torch.cat((x[:, self.start_index:], readout), -1)
|
||||||
|
|
||||||
|
return self.project(features)
|
||||||
|
|
||||||
|
|
||||||
|
class Transpose(nn.Module):
|
||||||
|
def __init__(self, dim0, dim1):
|
||||||
|
super(Transpose, self).__init__()
|
||||||
|
self.dim0 = dim0
|
||||||
|
self.dim1 = dim1
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
x = x.transpose(self.dim0, self.dim1)
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
def forward_vit(pretrained, x):
|
||||||
|
b, c, h, w = x.shape
|
||||||
|
|
||||||
|
_ = pretrained.model.forward_flex(x)
|
||||||
|
|
||||||
|
layer_1 = pretrained.activations['1']
|
||||||
|
layer_2 = pretrained.activations['2']
|
||||||
|
layer_3 = pretrained.activations['3']
|
||||||
|
layer_4 = pretrained.activations['4']
|
||||||
|
|
||||||
|
layer_1 = pretrained.act_postprocess1[0:2](layer_1)
|
||||||
|
layer_2 = pretrained.act_postprocess2[0:2](layer_2)
|
||||||
|
layer_3 = pretrained.act_postprocess3[0:2](layer_3)
|
||||||
|
layer_4 = pretrained.act_postprocess4[0:2](layer_4)
|
||||||
|
|
||||||
|
unflatten = nn.Sequential(
|
||||||
|
nn.Unflatten(
|
||||||
|
2,
|
||||||
|
torch.Size([
|
||||||
|
h // pretrained.model.patch_size[1],
|
||||||
|
w // pretrained.model.patch_size[0],
|
||||||
|
]),
|
||||||
|
))
|
||||||
|
|
||||||
|
if layer_1.ndim == 3:
|
||||||
|
layer_1 = unflatten(layer_1)
|
||||||
|
if layer_2.ndim == 3:
|
||||||
|
layer_2 = unflatten(layer_2)
|
||||||
|
if layer_3.ndim == 3:
|
||||||
|
layer_3 = unflatten(layer_3)
|
||||||
|
if layer_4.ndim == 3:
|
||||||
|
layer_4 = unflatten(layer_4)
|
||||||
|
|
||||||
|
layer_1 = pretrained.act_postprocess1[3:len(pretrained.act_postprocess1)](
|
||||||
|
layer_1)
|
||||||
|
layer_2 = pretrained.act_postprocess2[3:len(pretrained.act_postprocess2)](
|
||||||
|
layer_2)
|
||||||
|
layer_3 = pretrained.act_postprocess3[3:len(pretrained.act_postprocess3)](
|
||||||
|
layer_3)
|
||||||
|
layer_4 = pretrained.act_postprocess4[3:len(pretrained.act_postprocess4)](
|
||||||
|
layer_4)
|
||||||
|
|
||||||
|
return layer_1, layer_2, layer_3, layer_4
|
||||||
|
|
||||||
|
|
||||||
|
def _resize_pos_embed(self, posemb, gs_h, gs_w):
|
||||||
|
posemb_tok, posemb_grid = (
|
||||||
|
posemb[:, :self.start_index],
|
||||||
|
posemb[0, self.start_index:],
|
||||||
|
)
|
||||||
|
|
||||||
|
gs_old = int(math.sqrt(len(posemb_grid)))
|
||||||
|
|
||||||
|
posemb_grid = posemb_grid.reshape(1, gs_old, gs_old,
|
||||||
|
-1).permute(0, 3, 1, 2)
|
||||||
|
posemb_grid = F.interpolate(posemb_grid,
|
||||||
|
size=(gs_h, gs_w),
|
||||||
|
mode='bilinear')
|
||||||
|
posemb_grid = posemb_grid.permute(0, 2, 3, 1).reshape(1, gs_h * gs_w, -1)
|
||||||
|
|
||||||
|
posemb = torch.cat([posemb_tok, posemb_grid], dim=1)
|
||||||
|
|
||||||
|
return posemb
|
||||||
|
|
||||||
|
|
||||||
|
def forward_flex(self, x):
|
||||||
|
b, c, h, w = x.shape
|
||||||
|
|
||||||
|
pos_embed = self._resize_pos_embed(self.pos_embed, h // self.patch_size[1],
|
||||||
|
w // self.patch_size[0])
|
||||||
|
|
||||||
|
B = x.shape[0]
|
||||||
|
|
||||||
|
if hasattr(self.patch_embed, 'backbone'):
|
||||||
|
x = self.patch_embed.backbone(x)
|
||||||
|
if isinstance(x, (list, tuple)):
|
||||||
|
x = x[
|
||||||
|
-1] # last feature if backbone outputs list/tuple of features
|
||||||
|
|
||||||
|
x = self.patch_embed.proj(x).flatten(2).transpose(1, 2)
|
||||||
|
|
||||||
|
if getattr(self, 'dist_token', None) is not None:
|
||||||
|
cls_tokens = self.cls_token.expand(
|
||||||
|
B, -1, -1) # stole cls_tokens impl from Phil Wang, thanks
|
||||||
|
dist_token = self.dist_token.expand(B, -1, -1)
|
||||||
|
x = torch.cat((cls_tokens, dist_token, x), dim=1)
|
||||||
|
else:
|
||||||
|
cls_tokens = self.cls_token.expand(
|
||||||
|
B, -1, -1) # stole cls_tokens impl from Phil Wang, thanks
|
||||||
|
x = torch.cat((cls_tokens, x), dim=1)
|
||||||
|
|
||||||
|
x = x + pos_embed
|
||||||
|
x = self.pos_drop(x)
|
||||||
|
|
||||||
|
for blk in self.blocks:
|
||||||
|
x = blk(x)
|
||||||
|
|
||||||
|
x = self.norm(x)
|
||||||
|
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
activations = {}
|
||||||
|
|
||||||
|
|
||||||
|
def get_activation(name):
|
||||||
|
def hook(model, input, output):
|
||||||
|
activations[name] = output
|
||||||
|
|
||||||
|
return hook
|
||||||
|
|
||||||
|
|
||||||
|
def get_readout_oper(vit_features, features, use_readout, start_index=1):
|
||||||
|
if use_readout == 'ignore':
|
||||||
|
readout_oper = [Slice(start_index)] * len(features)
|
||||||
|
elif use_readout == 'add':
|
||||||
|
readout_oper = [AddReadout(start_index)] * len(features)
|
||||||
|
elif use_readout == 'project':
|
||||||
|
readout_oper = [
|
||||||
|
ProjectReadout(vit_features, start_index) for out_feat in features
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
assert (
|
||||||
|
False
|
||||||
|
), "wrong operation for readout token, use_readout can be 'ignore', 'add', or 'project'"
|
||||||
|
|
||||||
|
return readout_oper
|
||||||
|
|
||||||
|
|
||||||
|
def _make_vit_b16_backbone(
|
||||||
|
model,
|
||||||
|
features=[96, 192, 384, 768],
|
||||||
|
size=[384, 384],
|
||||||
|
hooks=[2, 5, 8, 11],
|
||||||
|
vit_features=768,
|
||||||
|
use_readout='ignore',
|
||||||
|
start_index=1,
|
||||||
|
):
|
||||||
|
pretrained = nn.Module()
|
||||||
|
|
||||||
|
pretrained.model = model
|
||||||
|
pretrained.model.blocks[hooks[0]].register_forward_hook(
|
||||||
|
get_activation('1'))
|
||||||
|
pretrained.model.blocks[hooks[1]].register_forward_hook(
|
||||||
|
get_activation('2'))
|
||||||
|
pretrained.model.blocks[hooks[2]].register_forward_hook(
|
||||||
|
get_activation('3'))
|
||||||
|
pretrained.model.blocks[hooks[3]].register_forward_hook(
|
||||||
|
get_activation('4'))
|
||||||
|
|
||||||
|
pretrained.activations = activations
|
||||||
|
|
||||||
|
readout_oper = get_readout_oper(vit_features, features, use_readout,
|
||||||
|
start_index)
|
||||||
|
|
||||||
|
# 32, 48, 136, 384
|
||||||
|
pretrained.act_postprocess1 = nn.Sequential(
|
||||||
|
readout_oper[0],
|
||||||
|
Transpose(1, 2),
|
||||||
|
nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=vit_features,
|
||||||
|
out_channels=features[0],
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
),
|
||||||
|
nn.ConvTranspose2d(
|
||||||
|
in_channels=features[0],
|
||||||
|
out_channels=features[0],
|
||||||
|
kernel_size=4,
|
||||||
|
stride=4,
|
||||||
|
padding=0,
|
||||||
|
bias=True,
|
||||||
|
dilation=1,
|
||||||
|
groups=1,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
pretrained.act_postprocess2 = nn.Sequential(
|
||||||
|
readout_oper[1],
|
||||||
|
Transpose(1, 2),
|
||||||
|
nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=vit_features,
|
||||||
|
out_channels=features[1],
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
),
|
||||||
|
nn.ConvTranspose2d(
|
||||||
|
in_channels=features[1],
|
||||||
|
out_channels=features[1],
|
||||||
|
kernel_size=2,
|
||||||
|
stride=2,
|
||||||
|
padding=0,
|
||||||
|
bias=True,
|
||||||
|
dilation=1,
|
||||||
|
groups=1,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
pretrained.act_postprocess3 = nn.Sequential(
|
||||||
|
readout_oper[2],
|
||||||
|
Transpose(1, 2),
|
||||||
|
nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=vit_features,
|
||||||
|
out_channels=features[2],
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
pretrained.act_postprocess4 = nn.Sequential(
|
||||||
|
readout_oper[3],
|
||||||
|
Transpose(1, 2),
|
||||||
|
nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=vit_features,
|
||||||
|
out_channels=features[3],
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=features[3],
|
||||||
|
out_channels=features[3],
|
||||||
|
kernel_size=3,
|
||||||
|
stride=2,
|
||||||
|
padding=1,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
pretrained.model.start_index = start_index
|
||||||
|
pretrained.model.patch_size = [16, 16]
|
||||||
|
|
||||||
|
# We inject this function into the VisionTransformer instances so that
|
||||||
|
# we can use it with interpolated position embeddings without modifying the library source.
|
||||||
|
pretrained.model.forward_flex = types.MethodType(forward_flex,
|
||||||
|
pretrained.model)
|
||||||
|
pretrained.model._resize_pos_embed = types.MethodType(
|
||||||
|
_resize_pos_embed, pretrained.model)
|
||||||
|
|
||||||
|
return pretrained
|
||||||
|
|
||||||
|
|
||||||
|
def _make_pretrained_vitl16_384(pretrained, use_readout='ignore', hooks=None):
|
||||||
|
model = timm.create_model('vit_large_patch16_384', pretrained=pretrained)
|
||||||
|
|
||||||
|
hooks = [5, 11, 17, 23] if hooks is None else hooks
|
||||||
|
return _make_vit_b16_backbone(
|
||||||
|
model,
|
||||||
|
features=[256, 512, 1024, 1024],
|
||||||
|
hooks=hooks,
|
||||||
|
vit_features=1024,
|
||||||
|
use_readout=use_readout,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _make_pretrained_vitb16_384(pretrained, use_readout='ignore', hooks=None):
|
||||||
|
model = timm.create_model('vit_base_patch16_384', pretrained=pretrained)
|
||||||
|
|
||||||
|
hooks = [2, 5, 8, 11] if hooks is None else hooks
|
||||||
|
return _make_vit_b16_backbone(model,
|
||||||
|
features=[96, 192, 384, 768],
|
||||||
|
hooks=hooks,
|
||||||
|
use_readout=use_readout)
|
||||||
|
|
||||||
|
|
||||||
|
def _make_pretrained_deitb16_384(pretrained, use_readout='ignore', hooks=None):
|
||||||
|
model = timm.create_model('vit_deit_base_patch16_384',
|
||||||
|
pretrained=pretrained)
|
||||||
|
|
||||||
|
hooks = [2, 5, 8, 11] if hooks is None else hooks
|
||||||
|
return _make_vit_b16_backbone(model,
|
||||||
|
features=[96, 192, 384, 768],
|
||||||
|
hooks=hooks,
|
||||||
|
use_readout=use_readout)
|
||||||
|
|
||||||
|
|
||||||
|
def _make_pretrained_deitb16_distil_384(pretrained,
|
||||||
|
use_readout='ignore',
|
||||||
|
hooks=None):
|
||||||
|
model = timm.create_model('vit_deit_base_distilled_patch16_384',
|
||||||
|
pretrained=pretrained)
|
||||||
|
|
||||||
|
hooks = [2, 5, 8, 11] if hooks is None else hooks
|
||||||
|
return _make_vit_b16_backbone(
|
||||||
|
model,
|
||||||
|
features=[96, 192, 384, 768],
|
||||||
|
hooks=hooks,
|
||||||
|
use_readout=use_readout,
|
||||||
|
start_index=2,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _make_vit_b_rn50_backbone(
|
||||||
|
model,
|
||||||
|
features=[256, 512, 768, 768],
|
||||||
|
size=[384, 384],
|
||||||
|
hooks=[0, 1, 8, 11],
|
||||||
|
vit_features=768,
|
||||||
|
use_vit_only=False,
|
||||||
|
use_readout='ignore',
|
||||||
|
start_index=1,
|
||||||
|
):
|
||||||
|
pretrained = nn.Module()
|
||||||
|
|
||||||
|
pretrained.model = model
|
||||||
|
|
||||||
|
if use_vit_only is True:
|
||||||
|
pretrained.model.blocks[hooks[0]].register_forward_hook(
|
||||||
|
get_activation('1'))
|
||||||
|
pretrained.model.blocks[hooks[1]].register_forward_hook(
|
||||||
|
get_activation('2'))
|
||||||
|
else:
|
||||||
|
pretrained.model.patch_embed.backbone.stages[0].register_forward_hook(
|
||||||
|
get_activation('1'))
|
||||||
|
pretrained.model.patch_embed.backbone.stages[1].register_forward_hook(
|
||||||
|
get_activation('2'))
|
||||||
|
|
||||||
|
pretrained.model.blocks[hooks[2]].register_forward_hook(
|
||||||
|
get_activation('3'))
|
||||||
|
pretrained.model.blocks[hooks[3]].register_forward_hook(
|
||||||
|
get_activation('4'))
|
||||||
|
|
||||||
|
pretrained.activations = activations
|
||||||
|
|
||||||
|
readout_oper = get_readout_oper(vit_features, features, use_readout,
|
||||||
|
start_index)
|
||||||
|
|
||||||
|
if use_vit_only is True:
|
||||||
|
pretrained.act_postprocess1 = nn.Sequential(
|
||||||
|
readout_oper[0],
|
||||||
|
Transpose(1, 2),
|
||||||
|
nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=vit_features,
|
||||||
|
out_channels=features[0],
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
),
|
||||||
|
nn.ConvTranspose2d(
|
||||||
|
in_channels=features[0],
|
||||||
|
out_channels=features[0],
|
||||||
|
kernel_size=4,
|
||||||
|
stride=4,
|
||||||
|
padding=0,
|
||||||
|
bias=True,
|
||||||
|
dilation=1,
|
||||||
|
groups=1,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
pretrained.act_postprocess2 = nn.Sequential(
|
||||||
|
readout_oper[1],
|
||||||
|
Transpose(1, 2),
|
||||||
|
nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=vit_features,
|
||||||
|
out_channels=features[1],
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
),
|
||||||
|
nn.ConvTranspose2d(
|
||||||
|
in_channels=features[1],
|
||||||
|
out_channels=features[1],
|
||||||
|
kernel_size=2,
|
||||||
|
stride=2,
|
||||||
|
padding=0,
|
||||||
|
bias=True,
|
||||||
|
dilation=1,
|
||||||
|
groups=1,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
pretrained.act_postprocess1 = nn.Sequential(nn.Identity(),
|
||||||
|
nn.Identity(),
|
||||||
|
nn.Identity())
|
||||||
|
pretrained.act_postprocess2 = nn.Sequential(nn.Identity(),
|
||||||
|
nn.Identity(),
|
||||||
|
nn.Identity())
|
||||||
|
|
||||||
|
pretrained.act_postprocess3 = nn.Sequential(
|
||||||
|
readout_oper[2],
|
||||||
|
Transpose(1, 2),
|
||||||
|
nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=vit_features,
|
||||||
|
out_channels=features[2],
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
pretrained.act_postprocess4 = nn.Sequential(
|
||||||
|
readout_oper[3],
|
||||||
|
Transpose(1, 2),
|
||||||
|
nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=vit_features,
|
||||||
|
out_channels=features[3],
|
||||||
|
kernel_size=1,
|
||||||
|
stride=1,
|
||||||
|
padding=0,
|
||||||
|
),
|
||||||
|
nn.Conv2d(
|
||||||
|
in_channels=features[3],
|
||||||
|
out_channels=features[3],
|
||||||
|
kernel_size=3,
|
||||||
|
stride=2,
|
||||||
|
padding=1,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
pretrained.model.start_index = start_index
|
||||||
|
pretrained.model.patch_size = [16, 16]
|
||||||
|
|
||||||
|
# We inject this function into the VisionTransformer instances so that
|
||||||
|
# we can use it with interpolated position embeddings without modifying the library source.
|
||||||
|
pretrained.model.forward_flex = types.MethodType(forward_flex,
|
||||||
|
pretrained.model)
|
||||||
|
|
||||||
|
# We inject this function into the VisionTransformer instances so that
|
||||||
|
# we can use it with interpolated position embeddings without modifying the library source.
|
||||||
|
pretrained.model._resize_pos_embed = types.MethodType(
|
||||||
|
_resize_pos_embed, pretrained.model)
|
||||||
|
|
||||||
|
return pretrained
|
||||||
|
|
||||||
|
|
||||||
|
def _make_pretrained_vitb_rn50_384(pretrained,
|
||||||
|
use_readout='ignore',
|
||||||
|
hooks=None,
|
||||||
|
use_vit_only=False):
|
||||||
|
model = timm.create_model('vit_base_resnet50_384', pretrained=pretrained)
|
||||||
|
|
||||||
|
hooks = [0, 1, 8, 11] if hooks is None else hooks
|
||||||
|
return _make_vit_b_rn50_backbone(
|
||||||
|
model,
|
||||||
|
features=[256, 512, 768, 768],
|
||||||
|
size=[384, 384],
|
||||||
|
hooks=hooks,
|
||||||
|
use_vit_only=use_vit_only,
|
||||||
|
use_readout=use_readout,
|
||||||
|
)
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
||||||
|
# Midas Depth Estimation
|
||||||
|
# From https://github.com/isl-org/MiDaS
|
||||||
|
# MIT LICENSE
|
||||||
|
from abc import ABCMeta
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import torch
|
||||||
|
from einops import rearrange
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
from scepter.modules.annotator.base_annotator import BaseAnnotator
|
||||||
|
from scepter.modules.annotator.midas.api import MiDaSInference
|
||||||
|
from scepter.modules.annotator.registry import ANNOTATORS
|
||||||
|
from scepter.modules.annotator.utils import resize_image, resize_image_ori
|
||||||
|
from scepter.modules.utils.config import dict_to_yaml
|
||||||
|
from scepter.modules.utils.distribute import we
|
||||||
|
from scepter.modules.utils.file_system import FS
|
||||||
|
|
||||||
|
|
||||||
|
@ANNOTATORS.register_class()
|
||||||
|
class MidasDetector(BaseAnnotator, metaclass=ABCMeta):
|
||||||
|
def __init__(self, cfg, logger=None):
|
||||||
|
super().__init__(cfg, logger=logger)
|
||||||
|
pretrained_model = cfg.get('PRETRAINED_MODEL', None)
|
||||||
|
if pretrained_model:
|
||||||
|
with FS.get_from(pretrained_model, wait_finish=True) as local_path:
|
||||||
|
self.model = MiDaSInference(model_type='dpt_hybrid',
|
||||||
|
model_path=local_path)
|
||||||
|
self.a = cfg.get('A', np.pi * 2.0)
|
||||||
|
self.bg_th = cfg.get('BG_TH', 0.1)
|
||||||
|
|
||||||
|
@torch.no_grad()
|
||||||
|
@torch.inference_mode()
|
||||||
|
@torch.autocast('cuda', enabled=False)
|
||||||
|
def forward(self, image):
|
||||||
|
if isinstance(image, Image.Image):
|
||||||
|
image = np.array(image)
|
||||||
|
elif isinstance(image, torch.Tensor):
|
||||||
|
image = image.detach().cpu().numpy()
|
||||||
|
elif isinstance(image, np.ndarray):
|
||||||
|
image = image.copy()
|
||||||
|
else:
|
||||||
|
raise f'Unsurpport datatype{type(image)}, only surpport np.ndarray, torch.Tensor, Pillow Image.'
|
||||||
|
image_depth = image
|
||||||
|
h, w, c = image.shape
|
||||||
|
image_depth, k = resize_image(image_depth,
|
||||||
|
1024 if min(h, w) > 1024 else min(h, w))
|
||||||
|
image_depth = torch.from_numpy(image_depth).float().to(we.device_id)
|
||||||
|
image_depth = image_depth / 127.5 - 1.0
|
||||||
|
image_depth = rearrange(image_depth, 'h w c -> 1 c h w')
|
||||||
|
depth = self.model(image_depth)[0]
|
||||||
|
|
||||||
|
depth_pt = depth.clone()
|
||||||
|
depth_pt -= torch.min(depth_pt)
|
||||||
|
depth_pt /= torch.max(depth_pt)
|
||||||
|
depth_pt = depth_pt.cpu().numpy()
|
||||||
|
depth_image = (depth_pt * 255.0).clip(0, 255).astype(np.uint8)
|
||||||
|
depth_image = depth_image[..., None].repeat(3, 2)
|
||||||
|
|
||||||
|
# depth_np = depth.cpu().numpy() # float16 error
|
||||||
|
# x = cv2.Sobel(depth_np, cv2.CV_32F, 1, 0, ksize=3)
|
||||||
|
# y = cv2.Sobel(depth_np, cv2.CV_32F, 0, 1, ksize=3)
|
||||||
|
# z = np.ones_like(x) * self.a
|
||||||
|
# x[depth_pt < self.bg_th] = 0
|
||||||
|
# y[depth_pt < self.bg_th] = 0
|
||||||
|
# normal = np.stack([x, y, z], axis=2)
|
||||||
|
# normal /= np.sum(normal**2.0, axis=2, keepdims=True)**0.5
|
||||||
|
# normal_image = (normal * 127.5 + 127.5).clip(0, 255).astype(np.uint8)
|
||||||
|
depth_image = resize_image_ori(h, w, depth_image, k)
|
||||||
|
return depth_image
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_config_template():
|
||||||
|
return dict_to_yaml('ANNOTATORS',
|
||||||
|
__class__.__name__,
|
||||||
|
MidasDetector.para_dict,
|
||||||
|
set_name=True)
|
||||||
@@ -0,0 +1,303 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
import torch.utils.model_zoo as model_zoo
|
||||||
|
from torch.nn import functional as F
|
||||||
|
|
||||||
|
|
||||||
|
class BlockTypeA(nn.Module):
|
||||||
|
def __init__(self, in_c1, in_c2, out_c1, out_c2, upscale=True):
|
||||||
|
super(BlockTypeA, self).__init__()
|
||||||
|
self.conv1 = nn.Sequential(nn.Conv2d(in_c2, out_c2, kernel_size=1),
|
||||||
|
nn.BatchNorm2d(out_c2),
|
||||||
|
nn.ReLU(inplace=True))
|
||||||
|
self.conv2 = nn.Sequential(nn.Conv2d(in_c1, out_c1, kernel_size=1),
|
||||||
|
nn.BatchNorm2d(out_c1),
|
||||||
|
nn.ReLU(inplace=True))
|
||||||
|
self.upscale = upscale
|
||||||
|
|
||||||
|
def forward(self, a, b):
|
||||||
|
b = self.conv1(b)
|
||||||
|
a = self.conv2(a)
|
||||||
|
if self.upscale:
|
||||||
|
b = F.interpolate(b,
|
||||||
|
scale_factor=2.0,
|
||||||
|
mode='bilinear',
|
||||||
|
align_corners=True)
|
||||||
|
return torch.cat((a, b), dim=1)
|
||||||
|
|
||||||
|
|
||||||
|
class BlockTypeB(nn.Module):
|
||||||
|
def __init__(self, in_c, out_c):
|
||||||
|
super(BlockTypeB, self).__init__()
|
||||||
|
self.conv1 = nn.Sequential(
|
||||||
|
nn.Conv2d(in_c, in_c, kernel_size=3, padding=1),
|
||||||
|
nn.BatchNorm2d(in_c), nn.ReLU())
|
||||||
|
self.conv2 = nn.Sequential(
|
||||||
|
nn.Conv2d(in_c, out_c, kernel_size=3, padding=1),
|
||||||
|
nn.BatchNorm2d(out_c), nn.ReLU())
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
x = self.conv1(x) + x
|
||||||
|
x = self.conv2(x)
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
class BlockTypeC(nn.Module):
|
||||||
|
def __init__(self, in_c, out_c):
|
||||||
|
super(BlockTypeC, self).__init__()
|
||||||
|
self.conv1 = nn.Sequential(
|
||||||
|
nn.Conv2d(in_c, in_c, kernel_size=3, padding=5, dilation=5),
|
||||||
|
nn.BatchNorm2d(in_c), nn.ReLU())
|
||||||
|
self.conv2 = nn.Sequential(
|
||||||
|
nn.Conv2d(in_c, in_c, kernel_size=3, padding=1),
|
||||||
|
nn.BatchNorm2d(in_c), nn.ReLU())
|
||||||
|
self.conv3 = nn.Conv2d(in_c, out_c, kernel_size=1)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
x = self.conv1(x)
|
||||||
|
x = self.conv2(x)
|
||||||
|
x = self.conv3(x)
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
def _make_divisible(v, divisor, min_value=None):
|
||||||
|
"""
|
||||||
|
This function is taken from the original tf repo.
|
||||||
|
It ensures that all layers have a channel number that is divisible by 8
|
||||||
|
It can be seen here:
|
||||||
|
https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py
|
||||||
|
:param v:
|
||||||
|
:param divisor:
|
||||||
|
:param min_value:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
if min_value is None:
|
||||||
|
min_value = divisor
|
||||||
|
new_v = max(min_value, int(v + divisor / 2) // divisor * divisor)
|
||||||
|
# Make sure that round down does not go down by more than 10%.
|
||||||
|
if new_v < 0.9 * v:
|
||||||
|
new_v += divisor
|
||||||
|
return new_v
|
||||||
|
|
||||||
|
|
||||||
|
class ConvBNReLU(nn.Sequential):
|
||||||
|
def __init__(self,
|
||||||
|
in_planes,
|
||||||
|
out_planes,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
groups=1):
|
||||||
|
self.channel_pad = out_planes - in_planes
|
||||||
|
self.stride = stride
|
||||||
|
# padding = (kernel_size - 1) // 2
|
||||||
|
|
||||||
|
# TFLite uses slightly different padding than PyTorch
|
||||||
|
if stride == 2:
|
||||||
|
padding = 0
|
||||||
|
else:
|
||||||
|
padding = (kernel_size - 1) // 2
|
||||||
|
|
||||||
|
super(ConvBNReLU, self).__init__(
|
||||||
|
nn.Conv2d(in_planes,
|
||||||
|
out_planes,
|
||||||
|
kernel_size,
|
||||||
|
stride,
|
||||||
|
padding,
|
||||||
|
groups=groups,
|
||||||
|
bias=False), nn.BatchNorm2d(out_planes),
|
||||||
|
nn.ReLU6(inplace=True))
|
||||||
|
self.max_pool = nn.MaxPool2d(kernel_size=stride, stride=stride)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
# TFLite uses different padding
|
||||||
|
if self.stride == 2:
|
||||||
|
x = F.pad(x, (0, 1, 0, 1), 'constant', 0)
|
||||||
|
# print(x.shape)
|
||||||
|
|
||||||
|
for module in self:
|
||||||
|
if not isinstance(module, nn.MaxPool2d):
|
||||||
|
x = module(x)
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
class InvertedResidual(nn.Module):
|
||||||
|
def __init__(self, inp, oup, stride, expand_ratio):
|
||||||
|
super(InvertedResidual, self).__init__()
|
||||||
|
self.stride = stride
|
||||||
|
assert stride in [1, 2]
|
||||||
|
|
||||||
|
hidden_dim = int(round(inp * expand_ratio))
|
||||||
|
self.use_res_connect = self.stride == 1 and inp == oup
|
||||||
|
|
||||||
|
layers = []
|
||||||
|
if expand_ratio != 1:
|
||||||
|
# pw
|
||||||
|
layers.append(ConvBNReLU(inp, hidden_dim, kernel_size=1))
|
||||||
|
layers.extend([
|
||||||
|
# dw
|
||||||
|
ConvBNReLU(hidden_dim,
|
||||||
|
hidden_dim,
|
||||||
|
stride=stride,
|
||||||
|
groups=hidden_dim),
|
||||||
|
# pw-linear
|
||||||
|
nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),
|
||||||
|
nn.BatchNorm2d(oup),
|
||||||
|
])
|
||||||
|
self.conv = nn.Sequential(*layers)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
if self.use_res_connect:
|
||||||
|
return x + self.conv(x)
|
||||||
|
else:
|
||||||
|
return self.conv(x)
|
||||||
|
|
||||||
|
|
||||||
|
class MobileNetV2(nn.Module):
|
||||||
|
def __init__(self, pretrained=True):
|
||||||
|
"""
|
||||||
|
MobileNet V2 main class
|
||||||
|
Args:
|
||||||
|
num_classes (int): Number of classes
|
||||||
|
width_mult (float): Width multiplier - adjusts number of channels in each layer by this amount
|
||||||
|
inverted_residual_setting: Network structure
|
||||||
|
round_nearest (int): Round the number of channels in each layer to be a multiple of this number
|
||||||
|
Set to 1 to turn off rounding
|
||||||
|
block: Module specifying inverted residual building block for mobilenet
|
||||||
|
"""
|
||||||
|
super(MobileNetV2, self).__init__()
|
||||||
|
|
||||||
|
block = InvertedResidual
|
||||||
|
input_channel = 32
|
||||||
|
last_channel = 1280
|
||||||
|
width_mult = 1.0
|
||||||
|
round_nearest = 8
|
||||||
|
|
||||||
|
inverted_residual_setting = [
|
||||||
|
# t, c, n, s
|
||||||
|
[1, 16, 1, 1],
|
||||||
|
[6, 24, 2, 2],
|
||||||
|
[6, 32, 3, 2],
|
||||||
|
[6, 64, 4, 2],
|
||||||
|
[6, 96, 3, 1],
|
||||||
|
# [6, 160, 3, 2],
|
||||||
|
# [6, 320, 1, 1],
|
||||||
|
]
|
||||||
|
|
||||||
|
# only check the first element, assuming user knows t,c,n,s are required
|
||||||
|
if len(inverted_residual_setting) == 0 or len(
|
||||||
|
inverted_residual_setting[0]) != 4:
|
||||||
|
raise ValueError('inverted_residual_setting should be non-empty '
|
||||||
|
'or a 4-element list, got {}'.format(
|
||||||
|
inverted_residual_setting))
|
||||||
|
|
||||||
|
# building first layer
|
||||||
|
input_channel = _make_divisible(input_channel * width_mult,
|
||||||
|
round_nearest)
|
||||||
|
self.last_channel = _make_divisible(
|
||||||
|
last_channel * max(1.0, width_mult), round_nearest)
|
||||||
|
features = [ConvBNReLU(4, input_channel, stride=2)]
|
||||||
|
# building inverted residual blocks
|
||||||
|
for t, c, n, s in inverted_residual_setting:
|
||||||
|
output_channel = _make_divisible(c * width_mult, round_nearest)
|
||||||
|
for i in range(n):
|
||||||
|
stride = s if i == 0 else 1
|
||||||
|
features.append(
|
||||||
|
block(input_channel,
|
||||||
|
output_channel,
|
||||||
|
stride,
|
||||||
|
expand_ratio=t))
|
||||||
|
input_channel = output_channel
|
||||||
|
|
||||||
|
self.features = nn.Sequential(*features)
|
||||||
|
self.fpn_selected = [1, 3, 6, 10, 13]
|
||||||
|
# weight initialization
|
||||||
|
for m in self.modules():
|
||||||
|
if isinstance(m, nn.Conv2d):
|
||||||
|
nn.init.kaiming_normal_(m.weight, mode='fan_out')
|
||||||
|
if m.bias is not None:
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
elif isinstance(m, nn.BatchNorm2d):
|
||||||
|
nn.init.ones_(m.weight)
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
elif isinstance(m, nn.Linear):
|
||||||
|
nn.init.normal_(m.weight, 0, 0.01)
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
if pretrained:
|
||||||
|
self._load_pretrained_model()
|
||||||
|
|
||||||
|
def _forward_impl(self, x):
|
||||||
|
# This exists since TorchScript doesn't support inheritance, so the superclass method
|
||||||
|
# (this one) needs to have a name other than `forward` that can be accessed in a subclass
|
||||||
|
fpn_features = []
|
||||||
|
for i, f in enumerate(self.features):
|
||||||
|
if i > self.fpn_selected[-1]:
|
||||||
|
break
|
||||||
|
x = f(x)
|
||||||
|
if i in self.fpn_selected:
|
||||||
|
fpn_features.append(x)
|
||||||
|
|
||||||
|
c1, c2, c3, c4, c5 = fpn_features
|
||||||
|
return c1, c2, c3, c4, c5
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
return self._forward_impl(x)
|
||||||
|
|
||||||
|
def _load_pretrained_model(self):
|
||||||
|
pretrain_dict = model_zoo.load_url(
|
||||||
|
'https://download.pytorch.org/models/mobilenet_v2-b0353104.pth')
|
||||||
|
model_dict = {}
|
||||||
|
state_dict = self.state_dict()
|
||||||
|
for k, v in pretrain_dict.items():
|
||||||
|
if k in state_dict:
|
||||||
|
model_dict[k] = v
|
||||||
|
state_dict.update(model_dict)
|
||||||
|
self.load_state_dict(state_dict)
|
||||||
|
|
||||||
|
|
||||||
|
class MobileV2_MLSD_Large(nn.Module):
|
||||||
|
def __init__(self):
|
||||||
|
super(MobileV2_MLSD_Large, self).__init__()
|
||||||
|
|
||||||
|
self.backbone = MobileNetV2(pretrained=False)
|
||||||
|
# A, B
|
||||||
|
self.block15 = BlockTypeA(in_c1=64,
|
||||||
|
in_c2=96,
|
||||||
|
out_c1=64,
|
||||||
|
out_c2=64,
|
||||||
|
upscale=False)
|
||||||
|
self.block16 = BlockTypeB(128, 64)
|
||||||
|
|
||||||
|
# A, B
|
||||||
|
self.block17 = BlockTypeA(in_c1=32, in_c2=64, out_c1=64, out_c2=64)
|
||||||
|
self.block18 = BlockTypeB(128, 64)
|
||||||
|
|
||||||
|
# A, B
|
||||||
|
self.block19 = BlockTypeA(in_c1=24, in_c2=64, out_c1=64, out_c2=64)
|
||||||
|
self.block20 = BlockTypeB(128, 64)
|
||||||
|
|
||||||
|
# A, B, C
|
||||||
|
self.block21 = BlockTypeA(in_c1=16, in_c2=64, out_c1=64, out_c2=64)
|
||||||
|
self.block22 = BlockTypeB(128, 64)
|
||||||
|
|
||||||
|
self.block23 = BlockTypeC(64, 16)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
c1, c2, c3, c4, c5 = self.backbone(x)
|
||||||
|
|
||||||
|
x = self.block15(c4, c5)
|
||||||
|
x = self.block16(x)
|
||||||
|
|
||||||
|
x = self.block17(c3, x)
|
||||||
|
x = self.block18(x)
|
||||||
|
|
||||||
|
x = self.block19(c2, x)
|
||||||
|
x = self.block20(x)
|
||||||
|
|
||||||
|
x = self.block21(c1, x)
|
||||||
|
x = self.block22(x)
|
||||||
|
x = self.block23(x)
|
||||||
|
x = x[:, 7:, :, :]
|
||||||
|
|
||||||
|
return x
|
||||||
@@ -0,0 +1,287 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
import torch.utils.model_zoo as model_zoo
|
||||||
|
from torch.nn import functional as F
|
||||||
|
|
||||||
|
|
||||||
|
class BlockTypeA(nn.Module):
|
||||||
|
def __init__(self, in_c1, in_c2, out_c1, out_c2, upscale=True):
|
||||||
|
super(BlockTypeA, self).__init__()
|
||||||
|
self.conv1 = nn.Sequential(nn.Conv2d(in_c2, out_c2, kernel_size=1),
|
||||||
|
nn.BatchNorm2d(out_c2),
|
||||||
|
nn.ReLU(inplace=True))
|
||||||
|
self.conv2 = nn.Sequential(nn.Conv2d(in_c1, out_c1, kernel_size=1),
|
||||||
|
nn.BatchNorm2d(out_c1),
|
||||||
|
nn.ReLU(inplace=True))
|
||||||
|
self.upscale = upscale
|
||||||
|
|
||||||
|
def forward(self, a, b):
|
||||||
|
b = self.conv1(b)
|
||||||
|
a = self.conv2(a)
|
||||||
|
b = F.interpolate(b,
|
||||||
|
scale_factor=2.0,
|
||||||
|
mode='bilinear',
|
||||||
|
align_corners=True)
|
||||||
|
return torch.cat((a, b), dim=1)
|
||||||
|
|
||||||
|
|
||||||
|
class BlockTypeB(nn.Module):
|
||||||
|
def __init__(self, in_c, out_c):
|
||||||
|
super(BlockTypeB, self).__init__()
|
||||||
|
self.conv1 = nn.Sequential(
|
||||||
|
nn.Conv2d(in_c, in_c, kernel_size=3, padding=1),
|
||||||
|
nn.BatchNorm2d(in_c), nn.ReLU())
|
||||||
|
self.conv2 = nn.Sequential(
|
||||||
|
nn.Conv2d(in_c, out_c, kernel_size=3, padding=1),
|
||||||
|
nn.BatchNorm2d(out_c), nn.ReLU())
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
x = self.conv1(x) + x
|
||||||
|
x = self.conv2(x)
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
class BlockTypeC(nn.Module):
|
||||||
|
def __init__(self, in_c, out_c):
|
||||||
|
super(BlockTypeC, self).__init__()
|
||||||
|
self.conv1 = nn.Sequential(
|
||||||
|
nn.Conv2d(in_c, in_c, kernel_size=3, padding=5, dilation=5),
|
||||||
|
nn.BatchNorm2d(in_c), nn.ReLU())
|
||||||
|
self.conv2 = nn.Sequential(
|
||||||
|
nn.Conv2d(in_c, in_c, kernel_size=3, padding=1),
|
||||||
|
nn.BatchNorm2d(in_c), nn.ReLU())
|
||||||
|
self.conv3 = nn.Conv2d(in_c, out_c, kernel_size=1)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
x = self.conv1(x)
|
||||||
|
x = self.conv2(x)
|
||||||
|
x = self.conv3(x)
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
def _make_divisible(v, divisor, min_value=None):
|
||||||
|
"""
|
||||||
|
This function is taken from the original tf repo.
|
||||||
|
It ensures that all layers have a channel number that is divisible by 8
|
||||||
|
It can be seen here:
|
||||||
|
https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py
|
||||||
|
:param v:
|
||||||
|
:param divisor:
|
||||||
|
:param min_value:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
if min_value is None:
|
||||||
|
min_value = divisor
|
||||||
|
new_v = max(min_value, int(v + divisor / 2) // divisor * divisor)
|
||||||
|
# Make sure that round down does not go down by more than 10%.
|
||||||
|
if new_v < 0.9 * v:
|
||||||
|
new_v += divisor
|
||||||
|
return new_v
|
||||||
|
|
||||||
|
|
||||||
|
class ConvBNReLU(nn.Sequential):
|
||||||
|
def __init__(self,
|
||||||
|
in_planes,
|
||||||
|
out_planes,
|
||||||
|
kernel_size=3,
|
||||||
|
stride=1,
|
||||||
|
groups=1):
|
||||||
|
self.channel_pad = out_planes - in_planes
|
||||||
|
self.stride = stride
|
||||||
|
# padding = (kernel_size - 1) // 2
|
||||||
|
|
||||||
|
# TFLite uses slightly different padding than PyTorch
|
||||||
|
if stride == 2:
|
||||||
|
padding = 0
|
||||||
|
else:
|
||||||
|
padding = (kernel_size - 1) // 2
|
||||||
|
|
||||||
|
super(ConvBNReLU, self).__init__(
|
||||||
|
nn.Conv2d(in_planes,
|
||||||
|
out_planes,
|
||||||
|
kernel_size,
|
||||||
|
stride,
|
||||||
|
padding,
|
||||||
|
groups=groups,
|
||||||
|
bias=False), nn.BatchNorm2d(out_planes),
|
||||||
|
nn.ReLU6(inplace=True))
|
||||||
|
self.max_pool = nn.MaxPool2d(kernel_size=stride, stride=stride)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
# TFLite uses different padding
|
||||||
|
if self.stride == 2:
|
||||||
|
x = F.pad(x, (0, 1, 0, 1), 'constant', 0)
|
||||||
|
# print(x.shape)
|
||||||
|
|
||||||
|
for module in self:
|
||||||
|
if not isinstance(module, nn.MaxPool2d):
|
||||||
|
x = module(x)
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
|
class InvertedResidual(nn.Module):
|
||||||
|
def __init__(self, inp, oup, stride, expand_ratio):
|
||||||
|
super(InvertedResidual, self).__init__()
|
||||||
|
self.stride = stride
|
||||||
|
assert stride in [1, 2]
|
||||||
|
|
||||||
|
hidden_dim = int(round(inp * expand_ratio))
|
||||||
|
self.use_res_connect = self.stride == 1 and inp == oup
|
||||||
|
|
||||||
|
layers = []
|
||||||
|
if expand_ratio != 1:
|
||||||
|
# pw
|
||||||
|
layers.append(ConvBNReLU(inp, hidden_dim, kernel_size=1))
|
||||||
|
layers.extend([
|
||||||
|
# dw
|
||||||
|
ConvBNReLU(hidden_dim,
|
||||||
|
hidden_dim,
|
||||||
|
stride=stride,
|
||||||
|
groups=hidden_dim),
|
||||||
|
# pw-linear
|
||||||
|
nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),
|
||||||
|
nn.BatchNorm2d(oup),
|
||||||
|
])
|
||||||
|
self.conv = nn.Sequential(*layers)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
if self.use_res_connect:
|
||||||
|
return x + self.conv(x)
|
||||||
|
else:
|
||||||
|
return self.conv(x)
|
||||||
|
|
||||||
|
|
||||||
|
class MobileNetV2(nn.Module):
|
||||||
|
def __init__(self, pretrained=True):
|
||||||
|
"""
|
||||||
|
MobileNet V2 main class
|
||||||
|
Args:
|
||||||
|
num_classes (int): Number of classes
|
||||||
|
width_mult (float): Width multiplier - adjusts number of channels in each layer by this amount
|
||||||
|
inverted_residual_setting: Network structure
|
||||||
|
round_nearest (int): Round the number of channels in each layer to be a multiple of this number
|
||||||
|
Set to 1 to turn off rounding
|
||||||
|
block: Module specifying inverted residual building block for mobilenet
|
||||||
|
"""
|
||||||
|
super(MobileNetV2, self).__init__()
|
||||||
|
|
||||||
|
block = InvertedResidual
|
||||||
|
input_channel = 32
|
||||||
|
last_channel = 1280
|
||||||
|
width_mult = 1.0
|
||||||
|
round_nearest = 8
|
||||||
|
|
||||||
|
inverted_residual_setting = [
|
||||||
|
# t, c, n, s
|
||||||
|
[1, 16, 1, 1],
|
||||||
|
[6, 24, 2, 2],
|
||||||
|
[6, 32, 3, 2],
|
||||||
|
[6, 64, 4, 2],
|
||||||
|
# [6, 96, 3, 1],
|
||||||
|
# [6, 160, 3, 2],
|
||||||
|
# [6, 320, 1, 1],
|
||||||
|
]
|
||||||
|
|
||||||
|
# only check the first element, assuming user knows t,c,n,s are required
|
||||||
|
if len(inverted_residual_setting) == 0 or len(
|
||||||
|
inverted_residual_setting[0]) != 4:
|
||||||
|
raise ValueError('inverted_residual_setting should be non-empty '
|
||||||
|
'or a 4-element list, got {}'.format(
|
||||||
|
inverted_residual_setting))
|
||||||
|
|
||||||
|
# building first layer
|
||||||
|
input_channel = _make_divisible(input_channel * width_mult,
|
||||||
|
round_nearest)
|
||||||
|
self.last_channel = _make_divisible(
|
||||||
|
last_channel * max(1.0, width_mult), round_nearest)
|
||||||
|
features = [ConvBNReLU(4, input_channel, stride=2)]
|
||||||
|
# building inverted residual blocks
|
||||||
|
for t, c, n, s in inverted_residual_setting:
|
||||||
|
output_channel = _make_divisible(c * width_mult, round_nearest)
|
||||||
|
for i in range(n):
|
||||||
|
stride = s if i == 0 else 1
|
||||||
|
features.append(
|
||||||
|
block(input_channel,
|
||||||
|
output_channel,
|
||||||
|
stride,
|
||||||
|
expand_ratio=t))
|
||||||
|
input_channel = output_channel
|
||||||
|
self.features = nn.Sequential(*features)
|
||||||
|
|
||||||
|
self.fpn_selected = [3, 6, 10]
|
||||||
|
# weight initialization
|
||||||
|
for m in self.modules():
|
||||||
|
if isinstance(m, nn.Conv2d):
|
||||||
|
nn.init.kaiming_normal_(m.weight, mode='fan_out')
|
||||||
|
if m.bias is not None:
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
elif isinstance(m, nn.BatchNorm2d):
|
||||||
|
nn.init.ones_(m.weight)
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
elif isinstance(m, nn.Linear):
|
||||||
|
nn.init.normal_(m.weight, 0, 0.01)
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
|
||||||
|
# if pretrained:
|
||||||
|
# self._load_pretrained_model()
|
||||||
|
|
||||||
|
def _forward_impl(self, x):
|
||||||
|
# This exists since TorchScript doesn't support inheritance, so the superclass method
|
||||||
|
# (this one) needs to have a name other than `forward` that can be accessed in a subclass
|
||||||
|
fpn_features = []
|
||||||
|
for i, f in enumerate(self.features):
|
||||||
|
if i > self.fpn_selected[-1]:
|
||||||
|
break
|
||||||
|
x = f(x)
|
||||||
|
if i in self.fpn_selected:
|
||||||
|
fpn_features.append(x)
|
||||||
|
|
||||||
|
c2, c3, c4 = fpn_features
|
||||||
|
return c2, c3, c4
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
return self._forward_impl(x)
|
||||||
|
|
||||||
|
def _load_pretrained_model(self):
|
||||||
|
pretrain_dict = model_zoo.load_url(
|
||||||
|
'https://download.pytorch.org/models/mobilenet_v2-b0353104.pth')
|
||||||
|
model_dict = {}
|
||||||
|
state_dict = self.state_dict()
|
||||||
|
for k, v in pretrain_dict.items():
|
||||||
|
if k in state_dict:
|
||||||
|
model_dict[k] = v
|
||||||
|
state_dict.update(model_dict)
|
||||||
|
self.load_state_dict(state_dict)
|
||||||
|
|
||||||
|
|
||||||
|
class MobileV2_MLSD_Tiny(nn.Module):
|
||||||
|
def __init__(self):
|
||||||
|
super(MobileV2_MLSD_Tiny, self).__init__()
|
||||||
|
|
||||||
|
self.backbone = MobileNetV2(pretrained=True)
|
||||||
|
|
||||||
|
self.block12 = BlockTypeA(in_c1=32, in_c2=64, out_c1=64, out_c2=64)
|
||||||
|
self.block13 = BlockTypeB(128, 64)
|
||||||
|
|
||||||
|
self.block14 = BlockTypeA(in_c1=24, in_c2=64, out_c1=32, out_c2=32)
|
||||||
|
self.block15 = BlockTypeB(64, 64)
|
||||||
|
|
||||||
|
self.block16 = BlockTypeC(64, 16)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
c2, c3, c4 = self.backbone(x)
|
||||||
|
|
||||||
|
x = self.block12(c3, c4)
|
||||||
|
x = self.block13(x)
|
||||||
|
x = self.block14(c2, x)
|
||||||
|
x = self.block15(x)
|
||||||
|
x = self.block16(x)
|
||||||
|
x = x[:, 7:, :, :]
|
||||||
|
# print(x.shape)
|
||||||
|
x = F.interpolate(x,
|
||||||
|
scale_factor=2.0,
|
||||||
|
mode='bilinear',
|
||||||
|
align_corners=True)
|
||||||
|
|
||||||
|
return x
|
||||||
@@ -0,0 +1,638 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# modified by lihaoweicv
|
||||||
|
# pytorch version
|
||||||
|
#
|
||||||
|
# M-LSD
|
||||||
|
# Copyright 2021-present NAVER Corp.
|
||||||
|
# Apache License v2.0
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
import torch
|
||||||
|
from torch.nn import functional as F
|
||||||
|
|
||||||
|
|
||||||
|
def deccode_output_score_and_ptss(tpMap, topk_n=200, ksize=5):
|
||||||
|
'''
|
||||||
|
tpMap:
|
||||||
|
center: tpMap[1, 0, :, :]
|
||||||
|
displacement: tpMap[1, 1:5, :, :]
|
||||||
|
'''
|
||||||
|
b, c, h, w = tpMap.shape
|
||||||
|
assert b == 1, 'only support bsize==1'
|
||||||
|
displacement = tpMap[:, 1:5, :, :][0]
|
||||||
|
center = tpMap[:, 0, :, :]
|
||||||
|
heat = torch.sigmoid(center)
|
||||||
|
hmax = F.max_pool2d(heat, (ksize, ksize),
|
||||||
|
stride=1,
|
||||||
|
padding=(ksize - 1) // 2)
|
||||||
|
keep = (hmax == heat).float()
|
||||||
|
heat = heat * keep
|
||||||
|
heat = heat.reshape(-1, )
|
||||||
|
|
||||||
|
scores, indices = torch.topk(heat, topk_n, dim=-1, largest=True)
|
||||||
|
yy = torch.floor_divide(indices, w).unsqueeze(-1)
|
||||||
|
xx = torch.fmod(indices, w).unsqueeze(-1)
|
||||||
|
ptss = torch.cat((yy, xx), dim=-1)
|
||||||
|
|
||||||
|
ptss = ptss.detach().cpu().numpy()
|
||||||
|
scores = scores.detach().cpu().numpy()
|
||||||
|
displacement = displacement.detach().cpu().numpy()
|
||||||
|
displacement = displacement.transpose((1, 2, 0))
|
||||||
|
return ptss, scores, displacement
|
||||||
|
|
||||||
|
|
||||||
|
def pred_lines(image,
|
||||||
|
model,
|
||||||
|
input_shape=[512, 512],
|
||||||
|
score_thr=0.10,
|
||||||
|
dist_thr=20.0,
|
||||||
|
device='cuda'):
|
||||||
|
h, w, _ = image.shape
|
||||||
|
h_ratio, w_ratio = [h / input_shape[0], w / input_shape[1]]
|
||||||
|
|
||||||
|
resized_image = np.concatenate([
|
||||||
|
cv2.resize(image, (input_shape[1], input_shape[0]),
|
||||||
|
interpolation=cv2.INTER_AREA),
|
||||||
|
np.ones([input_shape[0], input_shape[1], 1])
|
||||||
|
],
|
||||||
|
axis=-1)
|
||||||
|
|
||||||
|
resized_image = resized_image.transpose((2, 0, 1))
|
||||||
|
batch_image = np.expand_dims(resized_image, axis=0).astype('float32')
|
||||||
|
batch_image = (batch_image / 127.5) - 1.0
|
||||||
|
|
||||||
|
batch_image = torch.from_numpy(batch_image).float().to(device)
|
||||||
|
outputs = model(batch_image)
|
||||||
|
pts, pts_score, vmap = deccode_output_score_and_ptss(outputs, 200, 3)
|
||||||
|
start = vmap[:, :, :2]
|
||||||
|
end = vmap[:, :, 2:]
|
||||||
|
dist_map = np.sqrt(np.sum((start - end)**2, axis=-1))
|
||||||
|
|
||||||
|
segments_list = []
|
||||||
|
for center, score in zip(pts, pts_score):
|
||||||
|
y, x = center
|
||||||
|
distance = dist_map[y, x]
|
||||||
|
if score > score_thr and distance > dist_thr:
|
||||||
|
disp_x_start, disp_y_start, disp_x_end, disp_y_end = vmap[y, x, :]
|
||||||
|
x_start = x + disp_x_start
|
||||||
|
y_start = y + disp_y_start
|
||||||
|
x_end = x + disp_x_end
|
||||||
|
y_end = y + disp_y_end
|
||||||
|
segments_list.append([x_start, y_start, x_end, y_end])
|
||||||
|
|
||||||
|
lines = 2 * np.array(segments_list) # 256 > 512
|
||||||
|
lines[:, 0] = lines[:, 0] * w_ratio
|
||||||
|
lines[:, 1] = lines[:, 1] * h_ratio
|
||||||
|
lines[:, 2] = lines[:, 2] * w_ratio
|
||||||
|
lines[:, 3] = lines[:, 3] * h_ratio
|
||||||
|
|
||||||
|
return lines
|
||||||
|
|
||||||
|
|
||||||
|
def pred_squares(
|
||||||
|
image,
|
||||||
|
model,
|
||||||
|
input_shape=[512, 512],
|
||||||
|
device='cuda',
|
||||||
|
params={
|
||||||
|
'score': 0.06,
|
||||||
|
'outside_ratio': 0.28,
|
||||||
|
'inside_ratio': 0.45,
|
||||||
|
'w_overlap': 0.0,
|
||||||
|
'w_degree': 1.95,
|
||||||
|
'w_length': 0.0,
|
||||||
|
'w_area': 1.86,
|
||||||
|
'w_center': 0.14
|
||||||
|
}): # noqa
|
||||||
|
# shape = [height, width]
|
||||||
|
h, w, _ = image.shape
|
||||||
|
original_shape = [h, w]
|
||||||
|
|
||||||
|
resized_image = np.concatenate([
|
||||||
|
cv2.resize(image, (input_shape[0], input_shape[1]),
|
||||||
|
interpolation=cv2.INTER_AREA),
|
||||||
|
np.ones([input_shape[0], input_shape[1], 1])
|
||||||
|
],
|
||||||
|
axis=-1)
|
||||||
|
resized_image = resized_image.transpose((2, 0, 1))
|
||||||
|
batch_image = np.expand_dims(resized_image, axis=0).astype('float32')
|
||||||
|
batch_image = (batch_image / 127.5) - 1.0
|
||||||
|
|
||||||
|
batch_image = torch.from_numpy(batch_image).float().to(device)
|
||||||
|
outputs = model(batch_image)
|
||||||
|
|
||||||
|
pts, pts_score, vmap = deccode_output_score_and_ptss(outputs, 200, 3)
|
||||||
|
start = vmap[:, :, :2] # (x, y)
|
||||||
|
end = vmap[:, :, 2:] # (x, y)
|
||||||
|
dist_map = np.sqrt(np.sum((start - end)**2, axis=-1))
|
||||||
|
|
||||||
|
junc_list = []
|
||||||
|
segments_list = []
|
||||||
|
for junc, score in zip(pts, pts_score):
|
||||||
|
y, x = junc
|
||||||
|
distance = dist_map[y, x]
|
||||||
|
if score > params['score'] and distance > 20.0:
|
||||||
|
junc_list.append([x, y])
|
||||||
|
disp_x_start, disp_y_start, disp_x_end, disp_y_end = vmap[y, x, :]
|
||||||
|
d_arrow = 1.0
|
||||||
|
x_start = x + d_arrow * disp_x_start
|
||||||
|
y_start = y + d_arrow * disp_y_start
|
||||||
|
x_end = x + d_arrow * disp_x_end
|
||||||
|
y_end = y + d_arrow * disp_y_end
|
||||||
|
segments_list.append([x_start, y_start, x_end, y_end])
|
||||||
|
|
||||||
|
segments = np.array(segments_list)
|
||||||
|
|
||||||
|
# post processing for squares
|
||||||
|
# 1. get unique lines
|
||||||
|
point = np.array([[0, 0]])
|
||||||
|
point = point[0]
|
||||||
|
start = segments[:, :2]
|
||||||
|
end = segments[:, 2:]
|
||||||
|
diff = start - end
|
||||||
|
a = diff[:, 1]
|
||||||
|
b = -diff[:, 0]
|
||||||
|
c = a * start[:, 0] + b * start[:, 1]
|
||||||
|
|
||||||
|
d = np.abs(a * point[0] + b * point[1] - c) / np.sqrt(a**2 + b**2 + 1e-10)
|
||||||
|
theta = np.arctan2(diff[:, 0], diff[:, 1]) * 180 / np.pi
|
||||||
|
theta[theta < 0.0] += 180
|
||||||
|
hough = np.concatenate([d[:, None], theta[:, None]], axis=-1)
|
||||||
|
|
||||||
|
d_quant = 1
|
||||||
|
theta_quant = 2
|
||||||
|
hough[:, 0] //= d_quant
|
||||||
|
hough[:, 1] //= theta_quant
|
||||||
|
_, indices, counts = np.unique(hough,
|
||||||
|
axis=0,
|
||||||
|
return_index=True,
|
||||||
|
return_counts=True)
|
||||||
|
|
||||||
|
acc_map = np.zeros([512 // d_quant + 1, 360 // theta_quant + 1],
|
||||||
|
dtype='float32')
|
||||||
|
idx_map = np.zeros([512 // d_quant + 1, 360 // theta_quant + 1],
|
||||||
|
dtype='int32') - 1
|
||||||
|
yx_indices = hough[indices, :].astype('int32')
|
||||||
|
acc_map[yx_indices[:, 0], yx_indices[:, 1]] = counts
|
||||||
|
idx_map[yx_indices[:, 0], yx_indices[:, 1]] = indices
|
||||||
|
|
||||||
|
acc_map_np = acc_map
|
||||||
|
# acc_map = acc_map[None, :, :, None]
|
||||||
|
#
|
||||||
|
# ### fast suppression using tensorflow op
|
||||||
|
# acc_map = tf.constant(acc_map, dtype=tf.float32)
|
||||||
|
# max_acc_map = tf.keras.layers.MaxPool2D(pool_size=(5, 5), strides=1, padding='same')(acc_map)
|
||||||
|
# acc_map = acc_map * tf.cast(tf.math.equal(acc_map, max_acc_map), tf.float32)
|
||||||
|
# flatten_acc_map = tf.reshape(acc_map, [1, -1])
|
||||||
|
# topk_values, topk_indices = tf.math.top_k(flatten_acc_map, k=len(pts))
|
||||||
|
# _, h, w, _ = acc_map.shape
|
||||||
|
# y = tf.expand_dims(topk_indices // w, axis=-1)
|
||||||
|
# x = tf.expand_dims(topk_indices % w, axis=-1)
|
||||||
|
# yx = tf.concat([y, x], axis=-1)
|
||||||
|
|
||||||
|
# fast suppression using pytorch op
|
||||||
|
acc_map = torch.from_numpy(acc_map_np).unsqueeze(0).unsqueeze(0)
|
||||||
|
_, _, h, w = acc_map.shape
|
||||||
|
max_acc_map = F.max_pool2d(acc_map, kernel_size=5, stride=1, padding=2)
|
||||||
|
acc_map = acc_map * ((acc_map == max_acc_map).float())
|
||||||
|
flatten_acc_map = acc_map.reshape([
|
||||||
|
-1,
|
||||||
|
])
|
||||||
|
|
||||||
|
scores, indices = torch.topk(flatten_acc_map,
|
||||||
|
len(pts),
|
||||||
|
dim=-1,
|
||||||
|
largest=True)
|
||||||
|
yy = torch.div(indices, w, rounding_mode='floor').unsqueeze(-1)
|
||||||
|
xx = torch.fmod(indices, w).unsqueeze(-1)
|
||||||
|
yx = torch.cat((yy, xx), dim=-1)
|
||||||
|
|
||||||
|
yx = yx.detach().cpu().numpy()
|
||||||
|
|
||||||
|
topk_values = scores.detach().cpu().numpy()
|
||||||
|
indices = idx_map[yx[:, 0], yx[:, 1]]
|
||||||
|
basis = 5 // 2
|
||||||
|
|
||||||
|
merged_segments = []
|
||||||
|
for yx_pt, max_indice, value in zip(yx, indices, topk_values):
|
||||||
|
y, x = yx_pt
|
||||||
|
if max_indice == -1 or value == 0:
|
||||||
|
continue
|
||||||
|
segment_list = []
|
||||||
|
for y_offset in range(-basis, basis + 1):
|
||||||
|
for x_offset in range(-basis, basis + 1):
|
||||||
|
indice = idx_map[y + y_offset, x + x_offset]
|
||||||
|
cnt = int(acc_map_np[y + y_offset, x + x_offset])
|
||||||
|
if indice != -1:
|
||||||
|
segment_list.append(segments[indice])
|
||||||
|
if cnt > 1:
|
||||||
|
check_cnt = 1
|
||||||
|
current_hough = hough[indice]
|
||||||
|
for new_indice, new_hough in enumerate(hough):
|
||||||
|
if (current_hough
|
||||||
|
== new_hough).all() and indice != new_indice:
|
||||||
|
segment_list.append(segments[new_indice])
|
||||||
|
check_cnt += 1
|
||||||
|
if check_cnt == cnt:
|
||||||
|
break
|
||||||
|
group_segments = np.array(segment_list).reshape([-1, 2])
|
||||||
|
sorted_group_segments = np.sort(group_segments, axis=0)
|
||||||
|
x_min, y_min = sorted_group_segments[0, :]
|
||||||
|
x_max, y_max = sorted_group_segments[-1, :]
|
||||||
|
|
||||||
|
deg = theta[max_indice]
|
||||||
|
if deg >= 90:
|
||||||
|
merged_segments.append([x_min, y_max, x_max, y_min])
|
||||||
|
else:
|
||||||
|
merged_segments.append([x_min, y_min, x_max, y_max])
|
||||||
|
|
||||||
|
# 2. get intersections
|
||||||
|
new_segments = np.array(merged_segments) # (x1, y1, x2, y2)
|
||||||
|
start = new_segments[:, :2] # (x1, y1)
|
||||||
|
end = new_segments[:, 2:] # (x2, y2)
|
||||||
|
new_centers = (start + end) / 2.0
|
||||||
|
diff = start - end
|
||||||
|
dist_segments = np.sqrt(np.sum(diff**2, axis=-1))
|
||||||
|
|
||||||
|
# ax + by = c
|
||||||
|
a = diff[:, 1]
|
||||||
|
b = -diff[:, 0]
|
||||||
|
c = a * start[:, 0] + b * start[:, 1]
|
||||||
|
pre_det = a[:, None] * b[None, :]
|
||||||
|
det = pre_det - np.transpose(pre_det)
|
||||||
|
|
||||||
|
pre_inter_y = a[:, None] * c[None, :]
|
||||||
|
inter_y = (pre_inter_y - np.transpose(pre_inter_y)) / (det + 1e-10)
|
||||||
|
pre_inter_x = c[:, None] * b[None, :]
|
||||||
|
inter_x = (pre_inter_x - np.transpose(pre_inter_x)) / (det + 1e-10)
|
||||||
|
inter_pts = np.concatenate([inter_x[:, :, None], inter_y[:, :, None]],
|
||||||
|
axis=-1).astype('int32')
|
||||||
|
|
||||||
|
# 3. get corner information
|
||||||
|
# 3.1 get distance
|
||||||
|
'''
|
||||||
|
dist_segments:
|
||||||
|
| dist(0), dist(1), dist(2), ...|
|
||||||
|
dist_inter_to_segment1:
|
||||||
|
| dist(inter,0), dist(inter,0), dist(inter,0), ... |
|
||||||
|
| dist(inter,1), dist(inter,1), dist(inter,1), ... |
|
||||||
|
...
|
||||||
|
dist_inter_to_semgnet2:
|
||||||
|
| dist(inter,0), dist(inter,1), dist(inter,2), ... |
|
||||||
|
| dist(inter,0), dist(inter,1), dist(inter,2), ... |
|
||||||
|
...
|
||||||
|
'''
|
||||||
|
|
||||||
|
dist_inter_to_segment1_start = np.sqrt(
|
||||||
|
np.sum(((inter_pts - start[:, None, :])**2), axis=-1,
|
||||||
|
keepdims=True)) # [n_batch, n_batch, 1]
|
||||||
|
dist_inter_to_segment1_end = np.sqrt(
|
||||||
|
np.sum(((inter_pts - end[:, None, :])**2), axis=-1,
|
||||||
|
keepdims=True)) # [n_batch, n_batch, 1]
|
||||||
|
dist_inter_to_segment2_start = np.sqrt(
|
||||||
|
np.sum(((inter_pts - start[None, :, :])**2), axis=-1,
|
||||||
|
keepdims=True)) # [n_batch, n_batch, 1]
|
||||||
|
dist_inter_to_segment2_end = np.sqrt(
|
||||||
|
np.sum(((inter_pts - end[None, :, :])**2), axis=-1,
|
||||||
|
keepdims=True)) # [n_batch, n_batch, 1]
|
||||||
|
|
||||||
|
# sort ascending
|
||||||
|
dist_inter_to_segment1 = np.sort(np.concatenate(
|
||||||
|
[dist_inter_to_segment1_start, dist_inter_to_segment1_end], axis=-1),
|
||||||
|
axis=-1) # [n_batch, n_batch, 2]
|
||||||
|
dist_inter_to_segment2 = np.sort(np.concatenate(
|
||||||
|
[dist_inter_to_segment2_start, dist_inter_to_segment2_end], axis=-1),
|
||||||
|
axis=-1) # [n_batch, n_batch, 2]
|
||||||
|
|
||||||
|
# 3.2 get degree
|
||||||
|
inter_to_start = new_centers[:, None, :] - inter_pts
|
||||||
|
deg_inter_to_start = np.arctan2(inter_to_start[:, :, 1],
|
||||||
|
inter_to_start[:, :, 0]) * 180 / np.pi
|
||||||
|
deg_inter_to_start[deg_inter_to_start < 0.0] += 360
|
||||||
|
inter_to_end = new_centers[None, :, :] - inter_pts
|
||||||
|
deg_inter_to_end = np.arctan2(inter_to_end[:, :, 1],
|
||||||
|
inter_to_end[:, :, 0]) * 180 / np.pi
|
||||||
|
deg_inter_to_end[deg_inter_to_end < 0.0] += 360
|
||||||
|
'''
|
||||||
|
B -- G
|
||||||
|
| |
|
||||||
|
C -- R
|
||||||
|
B : blue / G: green / C: cyan / R: red
|
||||||
|
|
||||||
|
0 -- 1
|
||||||
|
| |
|
||||||
|
3 -- 2
|
||||||
|
'''
|
||||||
|
# rename variables
|
||||||
|
deg1_map, deg2_map = deg_inter_to_start, deg_inter_to_end
|
||||||
|
# sort deg ascending
|
||||||
|
deg_sort = np.sort(np.concatenate(
|
||||||
|
[deg1_map[:, :, None], deg2_map[:, :, None]], axis=-1),
|
||||||
|
axis=-1)
|
||||||
|
|
||||||
|
deg_diff_map = np.abs(deg1_map - deg2_map)
|
||||||
|
# we only consider the smallest degree of intersect
|
||||||
|
deg_diff_map[deg_diff_map > 180] = 360 - deg_diff_map[deg_diff_map > 180]
|
||||||
|
|
||||||
|
# define available degree range
|
||||||
|
deg_range = [60, 120]
|
||||||
|
|
||||||
|
corner_dict = {corner_info: [] for corner_info in range(4)}
|
||||||
|
inter_points = []
|
||||||
|
for i in range(inter_pts.shape[0]):
|
||||||
|
for j in range(i + 1, inter_pts.shape[1]):
|
||||||
|
# i, j > line index, always i < j
|
||||||
|
x, y = inter_pts[i, j, :]
|
||||||
|
deg1, deg2 = deg_sort[i, j, :]
|
||||||
|
deg_diff = deg_diff_map[i, j]
|
||||||
|
|
||||||
|
check_degree = deg_diff > deg_range[0] and deg_diff < deg_range[1]
|
||||||
|
|
||||||
|
outside_ratio = params['outside_ratio'] # over ratio >>> drop it!
|
||||||
|
inside_ratio = params['inside_ratio'] # over ratio >>> drop it!
|
||||||
|
check_distance = ((dist_inter_to_segment1[i, j, 1] >= dist_segments[i] and
|
||||||
|
dist_inter_to_segment1[i, j, 0] <= dist_segments[i] * outside_ratio) or
|
||||||
|
(dist_inter_to_segment1[i, j, 1] <= dist_segments[i] and
|
||||||
|
dist_inter_to_segment1[i, j, 0] <= dist_segments[i] * inside_ratio)) and \
|
||||||
|
((dist_inter_to_segment2[i, j, 1] >= dist_segments[j] and
|
||||||
|
dist_inter_to_segment2[i, j, 0] <= dist_segments[j] * outside_ratio) or
|
||||||
|
(dist_inter_to_segment2[i, j, 1] <= dist_segments[j] and
|
||||||
|
dist_inter_to_segment2[i, j, 0] <= dist_segments[j] * inside_ratio))
|
||||||
|
|
||||||
|
if check_degree and check_distance:
|
||||||
|
corner_info = None # noqa
|
||||||
|
|
||||||
|
if (deg1 >= 0 and deg1 <= 45 and deg2 >= 45 and deg2 <= 120) or \
|
||||||
|
(deg2 >= 315 and deg1 >= 45 and deg1 <= 120):
|
||||||
|
corner_info, color_info = 0, 'blue'
|
||||||
|
elif (deg1 >= 45 and deg1 <= 125 and deg2 >= 125
|
||||||
|
and deg2 <= 225):
|
||||||
|
corner_info, color_info = 1, 'green'
|
||||||
|
elif (deg1 >= 125 and deg1 <= 225 and deg2 >= 225
|
||||||
|
and deg2 <= 315):
|
||||||
|
corner_info, color_info = 2, 'black'
|
||||||
|
elif (deg1 >= 0 and deg1 <= 45 and deg2 >= 225 and deg2 <= 315) or \
|
||||||
|
(deg2 >= 315 and deg1 >= 225 and deg1 <= 315):
|
||||||
|
corner_info, color_info = 3, 'cyan'
|
||||||
|
else:
|
||||||
|
corner_info, color_info = 4, 'red' # we don't use it # noqa
|
||||||
|
continue
|
||||||
|
|
||||||
|
corner_dict[corner_info].append([x, y, i, j])
|
||||||
|
inter_points.append([x, y])
|
||||||
|
|
||||||
|
square_list = []
|
||||||
|
connect_list = []
|
||||||
|
segments_list = []
|
||||||
|
for corner0 in corner_dict[0]:
|
||||||
|
for corner1 in corner_dict[1]:
|
||||||
|
connect01 = False
|
||||||
|
for corner0_line in corner0[2:]:
|
||||||
|
if corner0_line in corner1[2:]:
|
||||||
|
connect01 = True
|
||||||
|
break
|
||||||
|
if connect01:
|
||||||
|
for corner2 in corner_dict[2]:
|
||||||
|
connect12 = False
|
||||||
|
for corner1_line in corner1[2:]:
|
||||||
|
if corner1_line in corner2[2:]:
|
||||||
|
connect12 = True
|
||||||
|
break
|
||||||
|
if connect12:
|
||||||
|
for corner3 in corner_dict[3]:
|
||||||
|
connect23 = False
|
||||||
|
for corner2_line in corner2[2:]:
|
||||||
|
if corner2_line in corner3[2:]:
|
||||||
|
connect23 = True
|
||||||
|
break
|
||||||
|
if connect23:
|
||||||
|
for corner3_line in corner3[2:]:
|
||||||
|
if corner3_line in corner0[2:]:
|
||||||
|
# SQUARE!!!
|
||||||
|
'''
|
||||||
|
0 -- 1
|
||||||
|
| |
|
||||||
|
3 -- 2
|
||||||
|
square_list:
|
||||||
|
order: 0 > 1 > 2 > 3
|
||||||
|
| x0, y0, x1, y1, x2, y2, x3, y3 |
|
||||||
|
| x0, y0, x1, y1, x2, y2, x3, y3 |
|
||||||
|
...
|
||||||
|
connect_list:
|
||||||
|
order: 01 > 12 > 23 > 30
|
||||||
|
| line_idx01, line_idx12, line_idx23, line_idx30 |
|
||||||
|
| line_idx01, line_idx12, line_idx23, line_idx30 |
|
||||||
|
...
|
||||||
|
segments_list:
|
||||||
|
order: 0 > 1 > 2 > 3
|
||||||
|
| line_idx0_i, line_idx0_j, line_idx1_i, line_idx1_j, line_idx2_i,
|
||||||
|
line_idx2_j, line_idx3_i, line_idx3_j |
|
||||||
|
| line_idx0_i, line_idx0_j, line_idx1_i, line_idx1_j, line_idx2_i,
|
||||||
|
line_idx2_j, line_idx3_i, line_idx3_j |
|
||||||
|
...
|
||||||
|
'''
|
||||||
|
square_list.append(corner0[:2] +
|
||||||
|
corner1[:2] +
|
||||||
|
corner2[:2] +
|
||||||
|
corner3[:2])
|
||||||
|
connect_list.append([
|
||||||
|
corner0_line, corner1_line,
|
||||||
|
corner2_line, corner3_line
|
||||||
|
])
|
||||||
|
segments_list.append(corner0[2:] +
|
||||||
|
corner1[2:] +
|
||||||
|
corner2[2:] +
|
||||||
|
corner3[2:])
|
||||||
|
|
||||||
|
def check_outside_inside(segments_info, connect_idx):
|
||||||
|
# return 'outside or inside', min distance, cover_param, peri_param
|
||||||
|
if connect_idx == segments_info[0]:
|
||||||
|
check_dist_mat = dist_inter_to_segment1
|
||||||
|
else:
|
||||||
|
check_dist_mat = dist_inter_to_segment2
|
||||||
|
|
||||||
|
i, j = segments_info
|
||||||
|
min_dist, max_dist = check_dist_mat[i, j, :]
|
||||||
|
connect_dist = dist_segments[connect_idx]
|
||||||
|
if max_dist > connect_dist:
|
||||||
|
return 'outside', min_dist, 0, 1
|
||||||
|
else:
|
||||||
|
return 'inside', min_dist, -1, -1
|
||||||
|
|
||||||
|
top_square = None # noqa
|
||||||
|
|
||||||
|
try:
|
||||||
|
map_size = input_shape[0] / 2
|
||||||
|
squares = np.array(square_list).reshape([-1, 4, 2])
|
||||||
|
score_array = []
|
||||||
|
connect_array = np.array(connect_list)
|
||||||
|
segments_array = np.array(segments_list).reshape([-1, 4, 2])
|
||||||
|
|
||||||
|
# get degree of corners:
|
||||||
|
squares_rollup = np.roll(squares, 1, axis=1)
|
||||||
|
squares_rolldown = np.roll(squares, -1, axis=1)
|
||||||
|
vec1 = squares_rollup - squares
|
||||||
|
normalized_vec1 = vec1 / (
|
||||||
|
np.linalg.norm(vec1, axis=-1, keepdims=True) + 1e-10)
|
||||||
|
vec2 = squares_rolldown - squares
|
||||||
|
normalized_vec2 = vec2 / (
|
||||||
|
np.linalg.norm(vec2, axis=-1, keepdims=True) + 1e-10)
|
||||||
|
inner_products = np.sum(normalized_vec1 * normalized_vec2,
|
||||||
|
axis=-1) # [n_squares, 4]
|
||||||
|
squares_degree = np.arccos(
|
||||||
|
inner_products) * 180 / np.pi # [n_squares, 4]
|
||||||
|
|
||||||
|
# get square score
|
||||||
|
overlap_scores = []
|
||||||
|
degree_scores = []
|
||||||
|
length_scores = []
|
||||||
|
|
||||||
|
for connects, segments, square, degree in zip(connect_array,
|
||||||
|
segments_array, squares,
|
||||||
|
squares_degree):
|
||||||
|
'''
|
||||||
|
0 -- 1
|
||||||
|
| |
|
||||||
|
3 -- 2
|
||||||
|
|
||||||
|
# segments: [4, 2]
|
||||||
|
# connects: [4]
|
||||||
|
'''
|
||||||
|
|
||||||
|
# OVERLAP SCORES
|
||||||
|
cover = 0
|
||||||
|
perimeter = 0
|
||||||
|
# check 0 > 1 > 2 > 3
|
||||||
|
square_length = []
|
||||||
|
|
||||||
|
for start_idx in range(4):
|
||||||
|
end_idx = (start_idx + 1) % 4
|
||||||
|
|
||||||
|
connect_idx = connects[start_idx] # segment idx of segment01
|
||||||
|
start_segments = segments[start_idx]
|
||||||
|
end_segments = segments[end_idx]
|
||||||
|
|
||||||
|
start_point = square[start_idx] # noqa
|
||||||
|
end_point = square[end_idx] # noqa
|
||||||
|
|
||||||
|
# check whether outside or inside
|
||||||
|
start_position, start_min, start_cover_param, start_peri_param = check_outside_inside(
|
||||||
|
start_segments, connect_idx)
|
||||||
|
end_position, end_min, end_cover_param, end_peri_param = check_outside_inside(
|
||||||
|
end_segments, connect_idx)
|
||||||
|
|
||||||
|
cover += dist_segments[
|
||||||
|
connect_idx] + start_cover_param * start_min + end_cover_param * end_min
|
||||||
|
perimeter += dist_segments[
|
||||||
|
connect_idx] + start_peri_param * start_min + end_peri_param * end_min
|
||||||
|
|
||||||
|
square_length.append(dist_segments[connect_idx] +
|
||||||
|
start_peri_param * start_min +
|
||||||
|
end_peri_param * end_min)
|
||||||
|
|
||||||
|
overlap_scores.append(cover / perimeter)
|
||||||
|
# DEGREE SCORES
|
||||||
|
'''
|
||||||
|
deg0 vs deg2
|
||||||
|
deg1 vs deg3
|
||||||
|
'''
|
||||||
|
deg0, deg1, deg2, deg3 = degree
|
||||||
|
deg_ratio1 = deg0 / deg2
|
||||||
|
if deg_ratio1 > 1.0:
|
||||||
|
deg_ratio1 = 1 / deg_ratio1
|
||||||
|
deg_ratio2 = deg1 / deg3
|
||||||
|
if deg_ratio2 > 1.0:
|
||||||
|
deg_ratio2 = 1 / deg_ratio2
|
||||||
|
degree_scores.append((deg_ratio1 + deg_ratio2) / 2)
|
||||||
|
# LENGTH SCORES
|
||||||
|
'''
|
||||||
|
len0 vs len2
|
||||||
|
len1 vs len3
|
||||||
|
'''
|
||||||
|
len0, len1, len2, len3 = square_length
|
||||||
|
len_ratio1 = len0 / len2 if len2 > len0 else len2 / len0
|
||||||
|
len_ratio2 = len1 / len3 if len3 > len1 else len3 / len1
|
||||||
|
length_scores.append((len_ratio1 + len_ratio2) / 2)
|
||||||
|
|
||||||
|
######################################
|
||||||
|
|
||||||
|
overlap_scores = np.array(overlap_scores)
|
||||||
|
overlap_scores /= np.max(overlap_scores)
|
||||||
|
|
||||||
|
degree_scores = np.array(degree_scores)
|
||||||
|
# degree_scores /= np.max(degree_scores)
|
||||||
|
|
||||||
|
length_scores = np.array(length_scores)
|
||||||
|
|
||||||
|
# AREA SCORES
|
||||||
|
area_scores = np.reshape(squares, [-1, 4, 2])
|
||||||
|
area_x = area_scores[:, :, 0]
|
||||||
|
area_y = area_scores[:, :, 1]
|
||||||
|
correction = area_x[:, -1] * area_y[:, 0] - area_y[:, -1] * area_x[:,
|
||||||
|
0]
|
||||||
|
area_scores = np.sum(area_x[:, :-1] * area_y[:, 1:], axis=-1) - np.sum(
|
||||||
|
area_y[:, :-1] * area_x[:, 1:], axis=-1)
|
||||||
|
area_scores = 0.5 * np.abs(area_scores + correction)
|
||||||
|
area_scores /= (map_size * map_size) # np.max(area_scores)
|
||||||
|
|
||||||
|
# CENTER SCORES
|
||||||
|
centers = np.array([[256 // 2, 256 // 2]], dtype='float32') # [1, 2]
|
||||||
|
# squares: [n, 4, 2]
|
||||||
|
square_centers = np.mean(squares, axis=1) # [n, 2]
|
||||||
|
center2center = np.sqrt(np.sum((centers - square_centers)**2))
|
||||||
|
center_scores = center2center / (map_size / np.sqrt(2.0))
|
||||||
|
'''
|
||||||
|
score_w = [overlap, degree, area, center, length]
|
||||||
|
'''
|
||||||
|
score_w = [0.0, 1.0, 10.0, 0.5, 1.0] # noqa
|
||||||
|
score_array = (params['w_overlap'] * overlap_scores +
|
||||||
|
params['w_degree'] * degree_scores +
|
||||||
|
params['w_area'] * area_scores -
|
||||||
|
params['w_center'] * center_scores +
|
||||||
|
params['w_length'] * length_scores)
|
||||||
|
|
||||||
|
best_square = [] # noqa
|
||||||
|
|
||||||
|
sorted_idx = np.argsort(score_array)[::-1]
|
||||||
|
score_array = score_array[sorted_idx]
|
||||||
|
squares = squares[sorted_idx]
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
'''return list
|
||||||
|
merged_lines, squares, scores
|
||||||
|
'''
|
||||||
|
|
||||||
|
try:
|
||||||
|
new_segments[:, 0] = new_segments[:, 0] * 2 / input_shape[
|
||||||
|
1] * original_shape[1]
|
||||||
|
new_segments[:, 1] = new_segments[:, 1] * 2 / input_shape[
|
||||||
|
0] * original_shape[0]
|
||||||
|
new_segments[:, 2] = new_segments[:, 2] * 2 / input_shape[
|
||||||
|
1] * original_shape[1]
|
||||||
|
new_segments[:, 3] = new_segments[:, 3] * 2 / input_shape[
|
||||||
|
0] * original_shape[0]
|
||||||
|
except Exception:
|
||||||
|
new_segments = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
squares[:, :,
|
||||||
|
0] = squares[:, :, 0] * 2 / input_shape[1] * original_shape[1]
|
||||||
|
squares[:, :,
|
||||||
|
1] = squares[:, :, 1] * 2 / input_shape[0] * original_shape[0]
|
||||||
|
except Exception:
|
||||||
|
squares = []
|
||||||
|
score_array = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
inter_points = np.array(inter_points)
|
||||||
|
inter_points[:, 0] = inter_points[:, 0] * 2 / input_shape[
|
||||||
|
1] * original_shape[1]
|
||||||
|
inter_points[:, 1] = inter_points[:, 1] * 2 / input_shape[
|
||||||
|
0] * original_shape[0]
|
||||||
|
except Exception:
|
||||||
|
inter_points = []
|
||||||
|
|
||||||
|
return new_segments, squares, score_array, inter_points
|
||||||