From e55303b553aaf1e2a0699a891176b02e7993bdf5 Mon Sep 17 00:00:00 2001 From: daidaiershidi <1154864382@qq.com> Date: Mon, 17 Jan 2022 09:17:19 +0000 Subject: [PATCH] add bcn model --- .pre-commit-config.yaml | 5 +- .../bcn/bgm/50salads/full/split1.yaml | 75 +++ .../bcn/bgm/50salads/full/split2.yaml | 75 +++ .../bcn/bgm/50salads/full/split3.yaml | 75 +++ .../bcn/bgm/50salads/full/split4.yaml | 75 +++ .../bcn/bgm/50salads/full/split5.yaml | 75 +++ .../bcn/bgm/50salads/resized/split1.yaml | 78 +++ .../bcn/bgm/50salads/resized/split2.yaml | 78 +++ .../bcn/bgm/50salads/resized/split3.yaml | 78 +++ .../bcn/bgm/50salads/resized/split4.yaml | 78 +++ .../bcn/bgm/50salads/resized/split5.yaml | 78 +++ .../bcn/bgm/breakfast/full/split1.yaml | 75 +++ .../bcn/bgm/breakfast/full/split2.yaml | 75 +++ .../bcn/bgm/breakfast/full/split3.yaml | 75 +++ .../bcn/bgm/breakfast/full/split4.yaml | 75 +++ .../bcn/bgm/breakfast/resized/split1.yaml | 78 +++ .../bcn/bgm/breakfast/resized/split2.yaml | 78 +++ .../bcn/bgm/breakfast/resized/split3.yaml | 78 +++ .../bcn/bgm/breakfast/resized/split4.yaml | 78 +++ configs/segmentation/bcn/bgm/example.yaml | 79 +++ .../bcn/bgm/gtea/full/split1.yaml | 76 +++ .../bcn/bgm/gtea/full/split2.yaml | 75 +++ .../bcn/bgm/gtea/full/split3.yaml | 75 +++ .../bcn/bgm/gtea/full/split4.yaml | 75 +++ .../bcn/bgm/gtea/resized/split1.yaml | 78 +++ .../bcn/bgm/gtea/resized/split2.yaml | 78 +++ .../bcn/bgm/gtea/resized/split3.yaml | 78 +++ .../bcn/bgm/gtea/resized/split4.yaml | 78 +++ .../bcn/model/50salads/split1.yaml | 78 +++ .../bcn/model/50salads/split2.yaml | 78 +++ .../bcn/model/50salads/split3.yaml | 78 +++ .../bcn/model/50salads/split4.yaml | 78 +++ .../bcn/model/50salads/split5.yaml | 78 +++ .../bcn/model/breakfast/split1.yaml | 79 +++ .../bcn/model/breakfast/split2.yaml | 79 +++ .../bcn/model/breakfast/split3.yaml | 79 +++ .../bcn/model/breakfast/split4.yaml | 79 +++ configs/segmentation/bcn/model/example.yaml | 79 +++ .../segmentation/bcn/model/gtea/split1.yaml | 82 +++ .../segmentation/bcn/model/gtea/split2.yaml | 79 +++ .../segmentation/bcn/model/gtea/split3.yaml | 79 +++ .../segmentation/bcn/model/gtea/split4.yaml | 86 +++ docs/en/dataset/SegmentationDataset.md | 35 ++ .../Temporal_action_segmentation.md | 19 + docs/en/model_zoo/segmentation/bcn.md | 160 ++++++ docs/images/bcn.png | Bin 0 -> 228533 bytes docs/images/bcn_error.png | Bin 0 -> 327932 bytes docs/zh-CN/dataset/SegmentationDataset.md | 35 ++ .../Temporal_action_segmentation.md | 19 + docs/zh-CN/model_zoo/segmentation/bcn.md | 158 ++++++ paddlevideo/loader/dataset/__init__.py | 3 +- paddlevideo/loader/dataset/bcn_dataset.py | 360 ++++++++++++ paddlevideo/loader/pipelines/__init__.py | 4 +- paddlevideo/loader/pipelines/bcn_pipeline.py | 135 +++++ paddlevideo/metrics/__init__.py | 3 +- paddlevideo/metrics/bcn_metric.py | 386 +++++++++++++ paddlevideo/modeling/backbones/__init__.py | 4 +- paddlevideo/modeling/backbones/bcn.py | 527 ++++++++++++++++++ paddlevideo/modeling/builder.py | 10 +- paddlevideo/modeling/framework/__init__.py | 3 +- .../modeling/framework/segmenters/__init__.py | 16 + .../modeling/framework/segmenters/base.py | 97 ++++ .../modeling/framework/segmenters/bcn.py | 290 ++++++++++ paddlevideo/modeling/heads/__init__.py | 4 +- paddlevideo/modeling/heads/bcn_head.py | 109 ++++ paddlevideo/modeling/losses/__init__.py | 3 +- paddlevideo/modeling/losses/bcn_loss.py | 131 +++++ paddlevideo/modeling/registry.py | 1 + paddlevideo/solver/custom_lr.py | 30 +- paddlevideo/tasks/train.py | 91 ++- tools/export_model.py | 6 + tools/summary.py | 4 +- tools/utils.py | 224 ++++++++ 73 files changed, 6017 insertions(+), 35 deletions(-) create mode 100644 configs/segmentation/bcn/bgm/50salads/full/split1.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/full/split2.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/full/split3.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/full/split4.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/full/split5.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/resized/split1.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/resized/split2.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/resized/split3.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/resized/split4.yaml create mode 100644 configs/segmentation/bcn/bgm/50salads/resized/split5.yaml create mode 100644 configs/segmentation/bcn/bgm/breakfast/full/split1.yaml create mode 100644 configs/segmentation/bcn/bgm/breakfast/full/split2.yaml create mode 100644 configs/segmentation/bcn/bgm/breakfast/full/split3.yaml create mode 100644 configs/segmentation/bcn/bgm/breakfast/full/split4.yaml create mode 100644 configs/segmentation/bcn/bgm/breakfast/resized/split1.yaml create mode 100644 configs/segmentation/bcn/bgm/breakfast/resized/split2.yaml create mode 100644 configs/segmentation/bcn/bgm/breakfast/resized/split3.yaml create mode 100644 configs/segmentation/bcn/bgm/breakfast/resized/split4.yaml create mode 100644 configs/segmentation/bcn/bgm/example.yaml create mode 100644 configs/segmentation/bcn/bgm/gtea/full/split1.yaml create mode 100644 configs/segmentation/bcn/bgm/gtea/full/split2.yaml create mode 100644 configs/segmentation/bcn/bgm/gtea/full/split3.yaml create mode 100644 configs/segmentation/bcn/bgm/gtea/full/split4.yaml create mode 100644 configs/segmentation/bcn/bgm/gtea/resized/split1.yaml create mode 100644 configs/segmentation/bcn/bgm/gtea/resized/split2.yaml create mode 100644 configs/segmentation/bcn/bgm/gtea/resized/split3.yaml create mode 100644 configs/segmentation/bcn/bgm/gtea/resized/split4.yaml create mode 100644 configs/segmentation/bcn/model/50salads/split1.yaml create mode 100644 configs/segmentation/bcn/model/50salads/split2.yaml create mode 100644 configs/segmentation/bcn/model/50salads/split3.yaml create mode 100644 configs/segmentation/bcn/model/50salads/split4.yaml create mode 100644 configs/segmentation/bcn/model/50salads/split5.yaml create mode 100644 configs/segmentation/bcn/model/breakfast/split1.yaml create mode 100644 configs/segmentation/bcn/model/breakfast/split2.yaml create mode 100644 configs/segmentation/bcn/model/breakfast/split3.yaml create mode 100644 configs/segmentation/bcn/model/breakfast/split4.yaml create mode 100644 configs/segmentation/bcn/model/example.yaml create mode 100644 configs/segmentation/bcn/model/gtea/split1.yaml create mode 100644 configs/segmentation/bcn/model/gtea/split2.yaml create mode 100644 configs/segmentation/bcn/model/gtea/split3.yaml create mode 100644 configs/segmentation/bcn/model/gtea/split4.yaml create mode 100644 docs/en/dataset/SegmentationDataset.md create mode 100644 docs/en/model_zoo/segmentation/Temporal_action_segmentation.md create mode 100644 docs/en/model_zoo/segmentation/bcn.md create mode 100644 docs/images/bcn.png create mode 100644 docs/images/bcn_error.png create mode 100644 docs/zh-CN/dataset/SegmentationDataset.md create mode 100644 docs/zh-CN/model_zoo/segmentation/Temporal_action_segmentation.md create mode 100644 docs/zh-CN/model_zoo/segmentation/bcn.md create mode 100644 paddlevideo/loader/dataset/bcn_dataset.py create mode 100644 paddlevideo/loader/pipelines/bcn_pipeline.py create mode 100644 paddlevideo/metrics/bcn_metric.py create mode 100644 paddlevideo/modeling/backbones/bcn.py create mode 100644 paddlevideo/modeling/framework/segmenters/__init__.py create mode 100644 paddlevideo/modeling/framework/segmenters/base.py create mode 100644 paddlevideo/modeling/framework/segmenters/bcn.py create mode 100644 paddlevideo/modeling/heads/bcn_head.py create mode 100644 paddlevideo/modeling/losses/bcn_loss.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a8e5812e8..779867bde 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,14 +1,15 @@ +repos: - repo: local hooks: - id: yapf name: yapf - entry: yapf + entry: bash -c 'yapf "$@"; git add -u' -- language: system args: [-i, --style .style.yapf] files: \.py$ - repo: https://github.com/pre-commit/pre-commit-hooks - sha: a11d9314b22d8f8c7556443875b731ef05965464 + rev: a11d9314b22d8f8c7556443875b731ef05965464 hooks: - id: check-merge-conflict - id: check-symlinks diff --git a/configs/segmentation/bcn/bgm/50salads/full/split1.yaml b/configs/segmentation/bcn/bgm/50salads/full/split1.yaml new file mode 100644 index 000000000..2fdd7160b --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/full/split1.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: True + test_mode: "more" + results_path: "./output/BCN/50salads/split1/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split1.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split1.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split1.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + +output_dir: "./output/BCN/50salads/split1/BcnBgmFull/" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 +model_name: "BcnBgmFull" diff --git a/configs/segmentation/bcn/bgm/50salads/full/split2.yaml b/configs/segmentation/bcn/bgm/50salads/full/split2.yaml new file mode 100644 index 000000000..414603150 --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/full/split2.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: True + test_mode: "more" + results_path: "./output/BCN/50salads/split2/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split2.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split2.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split2.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + +output_dir: "./output/BCN/50salads/split2/BcnBgmFull/" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 +model_name: "BcnBgmFull" diff --git a/configs/segmentation/bcn/bgm/50salads/full/split3.yaml b/configs/segmentation/bcn/bgm/50salads/full/split3.yaml new file mode 100644 index 000000000..d436ff5c2 --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/full/split3.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: True + test_mode: "more" + results_path: "./output/BCN/50salads/split3/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split3.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split3.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split3.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + +output_dir: "./output/BCN/50salads/split3/BcnBgmFull/" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 +model_name: "BcnBgmFull" diff --git a/configs/segmentation/bcn/bgm/50salads/full/split4.yaml b/configs/segmentation/bcn/bgm/50salads/full/split4.yaml new file mode 100644 index 000000000..937788a00 --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/full/split4.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: True + test_mode: "more" + results_path: "./output/BCN/50salads/split4/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split4.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split4.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split4.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + +output_dir: "./output/BCN/50salads/split4/BcnBgmFull/" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 +model_name: "BcnBgmFull" diff --git a/configs/segmentation/bcn/bgm/50salads/full/split5.yaml b/configs/segmentation/bcn/bgm/50salads/full/split5.yaml new file mode 100644 index 000000000..75366068c --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/full/split5.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: True + test_mode: "more" + results_path: "./output/BCN/50salads/split5/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split5.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split5.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split5.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + +output_dir: "./output/BCN/50salads/split5/BcnBgmFull/" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 +model_name: "BcnBgmFull" diff --git a/configs/segmentation/bcn/bgm/50salads/resized/split1.yaml b/configs/segmentation/bcn/bgm/50salads/resized/split1.yaml new file mode 100644 index 000000000..23d79c7a4 --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/resized/split1.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: False + test_mode: "more" + results_path: "./output/BCN/50salads/split1/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split1.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split1.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split1.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + mode: 'more' + temporal_dim: 400 + dataset: '50salads' + +output_dir: "./output/BCN/50salads/split1/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/50salads/resized/split2.yaml b/configs/segmentation/bcn/bgm/50salads/resized/split2.yaml new file mode 100644 index 000000000..5e799fec3 --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/resized/split2.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: False + test_mode: "more" + results_path: "./output/BCN/50salads/split2/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split2.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split2.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split2.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + mode: 'more' + temporal_dim: 400 + dataset: '50salads' + +output_dir: "./output/BCN/50salads/split2/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/50salads/resized/split3.yaml b/configs/segmentation/bcn/bgm/50salads/resized/split3.yaml new file mode 100644 index 000000000..b7353f6ec --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/resized/split3.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: False + test_mode: "more" + results_path: "./output/BCN/50salads/split3/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split3.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split3.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split3.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + mode: 'more' + temporal_dim: 400 + dataset: '50salads' + +output_dir: "./output/BCN/50salads/split3/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/50salads/resized/split4.yaml b/configs/segmentation/bcn/bgm/50salads/resized/split4.yaml new file mode 100644 index 000000000..00cf83a65 --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/resized/split4.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: False + test_mode: "more" + results_path: "./output/BCN/50salads/split4/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split4.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split4.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split4.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + mode: 'more' + temporal_dim: 400 + dataset: '50salads' + +output_dir: "./output/BCN/50salads/split4/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/50salads/resized/split5.yaml b/configs/segmentation/bcn/bgm/50salads/resized/split5.yaml new file mode 100644 index 000000000..c7ce9dd8b --- /dev/null +++ b/configs/segmentation/bcn/bgm/50salads/resized/split5.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "50salads" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "50salads" + use_full: False + test_mode: "more" + results_path: "./output/BCN/50salads/split5/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/train.split5.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split5.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/50salads/splits/test.split5.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [100, 200] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 2 + result_path: './inference/' + mode: 'more' + temporal_dim: 400 + dataset: '50salads' + +output_dir: "./output/BCN/50salads/split5/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 300 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/breakfast/full/split1.yaml b/configs/segmentation/bcn/bgm/breakfast/full/split1.yaml new file mode 100644 index 000000000..b2c34251a --- /dev/null +++ b/configs/segmentation/bcn/bgm/breakfast/full/split1.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "breakfast" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "breakfast" + use_full: True + test_mode: "more" + results_path: "./output/BCN/breakfast/split1/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/train.split1.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split1.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split1.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + +output_dir: "./output/BCN/breakfast/split1/BcnBgmFull/" +model_name: "BcnBgmFull" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/breakfast/full/split2.yaml b/configs/segmentation/bcn/bgm/breakfast/full/split2.yaml new file mode 100644 index 000000000..cfb1b39bb --- /dev/null +++ b/configs/segmentation/bcn/bgm/breakfast/full/split2.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "breakfast" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "breakfast" + use_full: True + test_mode: "more" + results_path: "./output/BCN/breakfast/split2/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/train.split2.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split2.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split2.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + +output_dir: "./output/BCN/breakfast/split2/BcnBgmFull/" +model_name: "BcnBgmFull" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/breakfast/full/split3.yaml b/configs/segmentation/bcn/bgm/breakfast/full/split3.yaml new file mode 100644 index 000000000..67a23c4e4 --- /dev/null +++ b/configs/segmentation/bcn/bgm/breakfast/full/split3.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "breakfast" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "breakfast" + use_full: True + test_mode: "more" + results_path: "./output/BCN/breakfast/split3/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/train.split3.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split3.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split3.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + +output_dir: "./output/BCN/breakfast/split3/BcnBgmFull/" +model_name: "BcnBgmFull" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/breakfast/full/split4.yaml b/configs/segmentation/bcn/bgm/breakfast/full/split4.yaml new file mode 100644 index 000000000..9a6574fac --- /dev/null +++ b/configs/segmentation/bcn/bgm/breakfast/full/split4.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "breakfast" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "breakfast" + use_full: True + test_mode: "more" + results_path: "./output/BCN/breakfast/split4/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/train.split4.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split4.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split4.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + +output_dir: "./output/BCN/breakfast/split4/BcnBgmFull/" +model_name: "BcnBgmFull" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/breakfast/resized/split1.yaml b/configs/segmentation/bcn/bgm/breakfast/resized/split1.yaml new file mode 100644 index 000000000..ac030d7f7 --- /dev/null +++ b/configs/segmentation/bcn/bgm/breakfast/resized/split1.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "breakfast" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "breakfast" + use_full: False + test_mode: "more" + results_path: "./output/BCN/breakfast/split1/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/train.split1.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split1.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split1.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + mode: 'more' + temporal_dim: 300 + dataset: 'breakfast' + +output_dir: "./output/BCN/breakfast/split1/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/breakfast/resized/split2.yaml b/configs/segmentation/bcn/bgm/breakfast/resized/split2.yaml new file mode 100644 index 000000000..01e03d16e --- /dev/null +++ b/configs/segmentation/bcn/bgm/breakfast/resized/split2.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "breakfast" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "breakfast" + use_full: False + test_mode: "more" + results_path: "./output/BCN/breakfast/split2/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/train.split2.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split2.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split2.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + mode: 'more' + temporal_dim: 300 + dataset: 'breakfast' + +output_dir: "./output/BCN/breakfast/split2/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/breakfast/resized/split3.yaml b/configs/segmentation/bcn/bgm/breakfast/resized/split3.yaml new file mode 100644 index 000000000..8a10f571e --- /dev/null +++ b/configs/segmentation/bcn/bgm/breakfast/resized/split3.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "breakfast" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "breakfast" + use_full: False + test_mode: "more" + results_path: "./output/BCN/breakfast/split3/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/train.split3.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split3.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split3.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + mode: 'more' + temporal_dim: 300 + dataset: 'breakfast' + +output_dir: "./output/BCN/breakfast/split3/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/breakfast/resized/split4.yaml b/configs/segmentation/bcn/bgm/breakfast/resized/split4.yaml new file mode 100644 index 000000000..45392c364 --- /dev/null +++ b/configs/segmentation/bcn/bgm/breakfast/resized/split4.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "breakfast" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "breakfast" + use_full: False + test_mode: "more" + results_path: "./output/BCN/breakfast/split4/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/train.split4.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split4.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/breakfast/splits/test.split4.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + mode: 'more' + temporal_dim: 300 + dataset: 'breakfast' + +output_dir: "./output/BCN/breakfast/split4/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/example.yaml b/configs/segmentation/bcn/bgm/example.yaml new file mode 100644 index 000000000..c245517f7 --- /dev/null +++ b/configs/segmentation/bcn/bgm/example.yaml @@ -0,0 +1,79 @@ +# BCN-bgm parameter +MODEL: #MODEL field + framework: "BcnBgm" #Mandatory, indicate the type of network, associate to the 'paddlevideo/modeling/framework/'. + backbone: + name: "BcnBgm" #Mandatory, indicate the type of backbone, associate to the 'paddlevideo/modeling/backbones/'. + dataset: "50salads" #Optional [50salads, gtea, breakfast], indicate the type of dataset, associate to the 'paddlevidel/data'. + use_full: True #Optional [True, False], use the full model or resized model. + loss: + name: "BcnBgmLoss" #Mandatory, indicate the type of loss, associate to the 'paddlevideo/modeling/losses/'. + head: + name: "BcnBgmHead" #Mandatory, indicate the type of loss, associate to the 'paddlevideo/modeling/heads/'. + dataset: "50salads" #Optional [50salads, gtea, breakfast], indicate the type of dataset, associate to the 'paddlevidel/data'. + use_full: True #Mandatory [True, False], use the full model or resized model. + test_mode: "more" #Optional [more, less], how to calculate the results of the test set. + results_path: "./output/BCN/50salads/split1/BcnBgmResized/results" #Optional, the path to save the segmentation result, like "./output/BCN/[gtea, 50salads, breakfast]/[split1, split2...]/[BcnBgmFull, BcnBgmResized]/results". + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Mandatory, valid batch size per gpu. + test_batch_size: 1 #Mandatory, test batch size per gpu. + num_workers: 4 #Optional, the number of subprocess on each GPU. + train: + format: 'BcnBgmDataset' #Mandatory, indicate the type of dataset, associate to the 'paddlevidel/loader/dateset'. + file_path: "./data/50salads/splits/train.split1.bundle" #Optional, choose split + use_full: True #Optional [True, False], use the full model or resized model. + bd_ratio: 0.05 #Mandatory + valid: + format: 'BcnBgmDataset' #Mandatory, indicate the type of dataset, associate to the 'paddlevidel/loader/dateset'. + file_path: "./data/50salads/splits/train.split1.bundle" #Optional, choose split + use_full: True #Optional [True, False], use the full model or resized model. + bd_ratio: 0.05 #Mandatory + test: + format: 'BcnBgmDataset' #Mandatory, indicate the type of dataset, associate to the 'paddlevidel/loader/dateset'. + file_path: "./data/50salads/splits/train.split1.bundle" #Optional, choose split + use_full: True #Optional [True, False], use the full model or resized model. + bd_ratio: 0.05 #Mandatory + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "GetBcnBgmTrainLabel" #Mandatory, processing raw label. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "GetBcnBgmTrainLabel" #Mandatory, processing raw label. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "GetBcnBgmTrainLabel" #Mandatory, processing raw label. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' #Mandatory, the type of optimizer, please to the 'paddlevideo/solver/' + learning_rate: #Optional, the type of learning rate scheduler, please refer to the 'paddlevideo/solver/' + name: 'CustomMultiStepDecay' + learning_rate: 0.001 #Optional, the initial learning rate. + milestones: [100, 200] #Optional, milestones=[int(epochs / 3), int(2 * epochs / 3)] in bcn-bgm model. + gamma: 0.3 #Optional, attenuation coefficient. + weight_decay: #Optional, regularization. + name: 'L2' + value: 0.0001 + +METRIC: + name: 'BcnBgmMetric' #Mandatory, the type of optimizer, please to the 'paddlevideo/metrics' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' #Optional, the type of inference_helper, please to the 'tools/utils.py' + num_channels: 2048 #Mandatory, the number of in channel + sample_rate: 1 #Optional, sample_rate for feature + result_path: './inference/' #Optional, the path to save + mode: 'more' #Optional [more, less], how to calculate the results of the test set, only use in resized + temporal_dim: 300 #Optional, only use in resized + dataset: "50salads" #Optional [50salads, gtea, breakfast], indicate the type of dataset, associate to the 'paddlevidel/data', only use in resized + +output_dir: "./output/BCN/50salads/split1/BcnBgmResized/" #Optional, like "./output/BCN/[gtea, 50salads, breakfast]/[split1, split2...]/[BcnBgmFull, BcnBgmResized]/results". +model_name: "BcnBgmFull" #Optional, model name like [BcnBgmFull, BcnBgmResized]. +log_interval: 2000 #Optional, the interval of logger. +epochs: 300 #Optional, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 #Optional, the interval of save. diff --git a/configs/segmentation/bcn/bgm/gtea/full/split1.yaml b/configs/segmentation/bcn/bgm/gtea/full/split1.yaml new file mode 100644 index 000000000..b630248ea --- /dev/null +++ b/configs/segmentation/bcn/bgm/gtea/full/split1.yaml @@ -0,0 +1,76 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "gtea" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "gtea" + use_full: True + test_mode: "more" + results_path: "./output/BCN/gtea/split1/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/train.split1.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split1.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split1.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0002 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + + +output_dir: "./output/BCN/gtea/split1/BcnBgmFull/" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 +model_name: 'BcnBgmFull' diff --git a/configs/segmentation/bcn/bgm/gtea/full/split2.yaml b/configs/segmentation/bcn/bgm/gtea/full/split2.yaml new file mode 100644 index 000000000..6bd9a8ea6 --- /dev/null +++ b/configs/segmentation/bcn/bgm/gtea/full/split2.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "gtea" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "gtea" + use_full: True + test_mode: "more" + results_path: "./output/BCN/gtea/split2/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/train.split2.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split2.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split2.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0002 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + +output_dir: "./output/BCN/gtea/split2/BcnBgmFull/" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 +model_name: 'BcnBgmFull' diff --git a/configs/segmentation/bcn/bgm/gtea/full/split3.yaml b/configs/segmentation/bcn/bgm/gtea/full/split3.yaml new file mode 100644 index 000000000..e07511887 --- /dev/null +++ b/configs/segmentation/bcn/bgm/gtea/full/split3.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "gtea" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "gtea" + use_full: True + test_mode: "more" + results_path: "./output/BCN/gtea/split3/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/train.split3.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split3.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split3.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0002 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + +output_dir: "./output/BCN/gtea/split3/BcnBgmFull/" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 +model_name: 'BcnBgmFull' diff --git a/configs/segmentation/bcn/bgm/gtea/full/split4.yaml b/configs/segmentation/bcn/bgm/gtea/full/split4.yaml new file mode 100644 index 000000000..6883dd558 --- /dev/null +++ b/configs/segmentation/bcn/bgm/gtea/full/split4.yaml @@ -0,0 +1,75 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "gtea" + use_full: True + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "gtea" + use_full: True + test_mode: "more" + results_path: "./output/BCN/gtea/split4/BcnBgmFull/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/train.split4.bundle" + use_full: True + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split4.bundle" + use_full: True + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split4.bundle" + use_full: True + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0002 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmFull_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + +output_dir: "./output/BCN/gtea/split4/BcnBgmFull/" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 +model_name: 'BcnBgmFull' diff --git a/configs/segmentation/bcn/bgm/gtea/resized/split1.yaml b/configs/segmentation/bcn/bgm/gtea/resized/split1.yaml new file mode 100644 index 000000000..e56b7d28e --- /dev/null +++ b/configs/segmentation/bcn/bgm/gtea/resized/split1.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "gtea" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "gtea" + use_full: False + test_mode: "more" + results_path: "./output/BCN/gtea/split1/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/train.split1.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split1.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split1.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0002 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + mode: 'more' + temporal_dim: 300 + dataset: 'gtea' + +output_dir: "./output/BCN/gtea/split1/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/gtea/resized/split2.yaml b/configs/segmentation/bcn/bgm/gtea/resized/split2.yaml new file mode 100644 index 000000000..b6cbaf1fa --- /dev/null +++ b/configs/segmentation/bcn/bgm/gtea/resized/split2.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "gtea" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "gtea" + use_full: False + test_mode: "more" + results_path: "./output/BCN/gtea/split2/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/train.split2.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split2.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split2.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0002 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + mode: 'more' + temporal_dim: 300 + dataset: 'gtea' + +output_dir: "./output/BCN/gtea/split2/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/gtea/resized/split3.yaml b/configs/segmentation/bcn/bgm/gtea/resized/split3.yaml new file mode 100644 index 000000000..404806b1d --- /dev/null +++ b/configs/segmentation/bcn/bgm/gtea/resized/split3.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "gtea" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "gtea" + use_full: False + test_mode: "more" + results_path: "./output/BCN/gtea/split3/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/train.split3.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split3.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split3.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0002 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + mode: 'more' + temporal_dim: 300 + dataset: 'gtea' + +output_dir: "./output/BCN/gtea/split3/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/bgm/gtea/resized/split4.yaml b/configs/segmentation/bcn/bgm/gtea/resized/split4.yaml new file mode 100644 index 000000000..40d5fd8b6 --- /dev/null +++ b/configs/segmentation/bcn/bgm/gtea/resized/split4.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnBgm" + backbone: + name: "BcnBgm" + dataset: "gtea" + use_full: False + loss: + name: "BcnBgmLoss" + head: + name: "BcnBgmHead" + dataset: "gtea" + use_full: False + test_mode: "more" + results_path: "./output/BCN/gtea/split4/BcnBgmResized/results" + +DATASET: #DATASET field + batch_size: 1 + valid_batch_size: 1 + test_batch_size: 1 + num_workers: 4 + train: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/train.split4.bundle" + use_full: False + bd_ratio: 0.05 + valid: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split4.bundle" + use_full: False + bd_ratio: 0.05 + test: + format: 'BcnBgmDataset' + file_path: "./data/gtea/splits/test.split4.bundle" + use_full: False + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: + decode: + name: "GetBcnBgmTrainLabel" + + valid: + decode: + name: "GetBcnBgmTrainLabel" + + test: + decode: + name: "GetBcnBgmTrainLabel" + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + name: 'CustomMultiStepDecay' + learning_rate: 0.0002 + milestones: [32, 65] + gamma: 0.3 + weight_decay: + name: 'L2' + value: 0.0001 + +METRIC: #METRIC field + name: 'BcnBgmMetric' + +INFERENCE: + name: 'BcnBgmResized_Inference_helper' + num_channels: 2048 + sample_rate: 1 + result_path: './inference/' + mode: 'more' + temporal_dim: 300 + dataset: 'gtea' + +output_dir: "./output/BCN/gtea/split4/BcnBgmResized/" +model_name: "BcnBgmResized" +log_interval: 2000 +epochs: 100 +log_level: "DEBUG" +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/50salads/split1.yaml b/configs/segmentation/bcn/model/50salads/split1.yaml new file mode 100644 index 000000000..0d6d769d8 --- /dev/null +++ b/configs/segmentation/bcn/model/50salads/split1.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/50salads/splits/train.split1.bundle" + bgm_result_path: "./output/BCN/50salads/split1/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/50salads/split1/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 19 + dataset: "50salads" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/train.split1.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split1.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split1.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [30] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [30] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/50salads/mapping.txt" + log_path: "./output/BCN/50salads/split1/BcnModel/metric.csv" + dataset: "50salads" + +output_dir: "./output/BCN/50salads/split1/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 20 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/50salads/split2.yaml b/configs/segmentation/bcn/model/50salads/split2.yaml new file mode 100644 index 000000000..8ec39ce39 --- /dev/null +++ b/configs/segmentation/bcn/model/50salads/split2.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/50salads/splits/train.split2.bundle" + bgm_result_path: "./output/BCN/50salads/split2/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/50salads/split2/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 19 + dataset: "50salads" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/train.split2.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split2.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split2.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [30] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [30] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/50salads/mapping.txt" + log_path: "./output/BCN/50salads/split2/BcnModel/metric.csv" + dataset: "50salads" + +output_dir: "./output/BCN/50salads/split2/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 20 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/50salads/split3.yaml b/configs/segmentation/bcn/model/50salads/split3.yaml new file mode 100644 index 000000000..0964dccca --- /dev/null +++ b/configs/segmentation/bcn/model/50salads/split3.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/50salads/splits/train.split3.bundle" + bgm_result_path: "./output/BCN/50salads/split3/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/50salads/split3/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 19 + dataset: "50salads" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/train.split3.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split3.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split3.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [30] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [30] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/50salads/mapping.txt" + log_path: "./output/BCN/50salads/split3/BcnModel/metric.csv" + dataset: "50salads" + +output_dir: "./output/BCN/50salads/split3/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 20 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/50salads/split4.yaml b/configs/segmentation/bcn/model/50salads/split4.yaml new file mode 100644 index 000000000..424195da5 --- /dev/null +++ b/configs/segmentation/bcn/model/50salads/split4.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/50salads/splits/train.split4.bundle" + bgm_result_path: "./output/BCN/50salads/split4/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/50salads/split4/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 19 + dataset: "50salads" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/train.split4.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split4.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split4.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [30] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [30] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/50salads/mapping.txt" + log_path: "./output/BCN/50salads/split4/BcnModel/metric.csv" + dataset: "50salads" + +output_dir: "./output/BCN/50salads/split4/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 20 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/50salads/split5.yaml b/configs/segmentation/bcn/model/50salads/split5.yaml new file mode 100644 index 000000000..e8fe34d61 --- /dev/null +++ b/configs/segmentation/bcn/model/50salads/split5.yaml @@ -0,0 +1,78 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/50salads/splits/train.split5.bundle" + bgm_result_path: "./output/BCN/50salads/split5/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/50salads/split5/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 19 + dataset: "50salads" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/train.split5.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split5.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/50salads/splits/test.split5.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.001 + milestones: [30] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0001 + milestones: [30] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/50salads/mapping.txt" + log_path: "./output/BCN/50salads/split5/BcnModel/metric.csv" + dataset: "50salads" + +output_dir: "./output/BCN/50salads/split5/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 20 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/breakfast/split1.yaml b/configs/segmentation/bcn/model/breakfast/split1.yaml new file mode 100644 index 000000000..a3f4b523c --- /dev/null +++ b/configs/segmentation/bcn/model/breakfast/split1.yaml @@ -0,0 +1,79 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/breakfast/splits/train.split1.bundle" + bgm_result_path: "./output/BCN/breakfast/split1/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/breakfast/split1/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 48 + dataset: "breakfast" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/train.split1.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/test.split1.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/test.split1.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0005 + milestones: [20] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.00005 + milestones: [20] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/breakfast/mapping.txt" + log_path: "./output/BCN/breakfast/split1/BcnModel/metric.csv" + dataset: "breakfast" + + +output_dir: "./output/BCN/breakfast/split1/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 2000 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/breakfast/split2.yaml b/configs/segmentation/bcn/model/breakfast/split2.yaml new file mode 100644 index 000000000..91da76417 --- /dev/null +++ b/configs/segmentation/bcn/model/breakfast/split2.yaml @@ -0,0 +1,79 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/breakfast/splits/train.split2.bundle" + bgm_result_path: "./output/BCN/breakfast/split2/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/breakfast/split2/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 48 + dataset: "breakfast" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/train.split2.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/test.split2.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/test.split2.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0005 + milestones: [20] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.00005 + milestones: [20] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/breakfast/mapping.txt" + log_path: "./output/BCN/breakfast/split2/BcnModel/metric.csv" + dataset: "breakfast" + + +output_dir: "./output/BCN/breakfast/split2/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 2000 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/breakfast/split3.yaml b/configs/segmentation/bcn/model/breakfast/split3.yaml new file mode 100644 index 000000000..216df06df --- /dev/null +++ b/configs/segmentation/bcn/model/breakfast/split3.yaml @@ -0,0 +1,79 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/breakfast/splits/train.split3.bundle" + bgm_result_path: "./output/BCN/breakfast/split3/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/breakfast/split3/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 48 + dataset: "breakfast" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/train.split3.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/test.split3.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/test.split3.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0005 + milestones: [20] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.00005 + milestones: [20] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/breakfast/mapping.txt" + log_path: "./output/BCN/breakfast/split3/BcnModel/metric.csv" + dataset: "breakfast" + + +output_dir: "./output/BCN/breakfast/split3/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 2000 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/breakfast/split4.yaml b/configs/segmentation/bcn/model/breakfast/split4.yaml new file mode 100644 index 000000000..93b1ade9a --- /dev/null +++ b/configs/segmentation/bcn/model/breakfast/split4.yaml @@ -0,0 +1,79 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/breakfast/splits/train.split4.bundle" + bgm_result_path: "./output/BCN/breakfast/split4/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/breakfast/split4/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True + num_post: 4 + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 + num_layers: 12 + num_f_maps: 256 + dim: 2048 + num_classes: 48 + dataset: "breakfast" + use_lbp: True + num_soft_lbp: 1 + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/train.split4.bundle" + bd_ratio: 0.05 + valid: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/test.split4.bundle" + bd_ratio: 0.05 + test: + format: 'BcnModelDataset' + file_path: "./data/breakfast/splits/test.split4.bundle" + bd_ratio: 0.05 + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' + learning_rate: 0.0005 + milestones: [20] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' + learning_rate: 0.00005 + milestones: [20] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/breakfast/mapping.txt" + log_path: "./output/BCN/breakfast/split4/BcnModel/metric.csv" + dataset: "breakfast" + + +output_dir: "./output/BCN/breakfast/split4/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 2000 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/example.yaml b/configs/segmentation/bcn/model/example.yaml new file mode 100644 index 000000000..919f44593 --- /dev/null +++ b/configs/segmentation/bcn/model/example.yaml @@ -0,0 +1,79 @@ +MODEL: #MODEL field + framework: "BcnModel" #Mandatory, indicate the type of network, associate to the 'paddlevideo/modeling/framework/'. + data_path: "./data/50salads/splits/train.split1.bundle" #Mandatory, the path to [.bundle] file of train data + bgm_result_path: "./output/BCN/50salads/split1/BcnBgmResized/results" #Mandatory, the path to results of resized-resolution bgm + bgm_pdparams: "./output/BCN/50salads/split1/BcnBgmFull/BcnBgmFull_best.pdparams" #Mandatory, the path to full-resolution bgm weight + use_lbp: True #Optional [True, False], use the full model or resized model + num_post: 4 #Optional, the layer number of lbp + backbone: + name: "BcnModel" #Mandatory, indicate the type of backbone, associate to the 'paddlevideo/modeling/backbones/'. + num_stages: 4 #Optional, the stage number of model + num_layers: 12 #Optional, the layer number in each stage + num_f_maps: 256 #Optional, the number of hidden channels in each layer + dim: 2048 #Mandatory, the number of channels for input + num_classes: 19 #Optional, the number of categories + dataset: "50salads" #Optional, dataset + use_lbp: True #Optional [True, False], use the full model or resized model + num_soft_lbp: 1 #Optional, the layer number of soft_lbp + loss: + name: "BcnModelLoss" + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Mandatory, valid batch size per gpu. + test_batch_size: 1 #Mandatory, test batch size per gpu. + num_workers: 2 #Optional, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' #Mandatory, indicate the type of dataset, associate to the 'paddlevidel/loader/dateset'. + file_path: "./data/50salads/splits/train.split1.bundle" #Optional, choose split + bd_ratio: 0.05 # Mandatory + valid: + format: 'BcnModelDataset' #Mandatory, indicate the type of dataset, associate to the 'paddlevidel/loader/dateset'. + file_path: "./data/50salads/splits/test.split1.bundle" #Optional, choose split + bd_ratio: 0.05 #Mandatory + test: + format: 'BcnModelDataset' #Mandatory, indicate the type of dataset, associate to the 'paddlevidel/loader/dateset'. + file_path: "./data/50salads/splits/test.split1.bundle" #Optional, choose split + bd_ratio: 0.05 #Mandatory + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Mandatory + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Mandatory + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Mandatory + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' #Mandatory, the type of optimizer, please to the 'paddlevideo/solver/' + learning_rate: #Mandatory, the type of optimizer, please to the 'paddlevideo/solver/' + - + name: 'CustomMultiStepDecay' #Mandatory, the learning rate scheduler for main model + learning_rate: 0.001 + milestones: [30] + gamma: 0.3 + - + name: 'CustomMultiStepDecay' #Mandatory, the learning rate scheduler for bgm model + learning_rate: 0.0001 + milestones: [30] + gamma: 0.3 + +METRIC: + name: 'BcnModelMetric' #Mandatory, the type of optimizer, please to the 'paddlevideo/metrics' + overlap: [.1, .25, .5] #Optional, the iou threshold value when calculating f-score + actions_map_file_path: "./data/50salads/mapping.txt" # Mandatory, the path to actions_map + log_path: "./output/BCN/50salads/split1/BcnModel/metric.csv" #Optional, the path to save metric results + dataset: "50salads" #Optional, choose dataset + + +output_dir: "./output/BCN/50salads/split1/BcnModel/" #Optional, path to save output +model_name: "BcnModel" #Mandatory, model name. +log_interval: 20 #Optional, the interval of logger. +epochs: 50 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 #Optional, the interval of save. diff --git a/configs/segmentation/bcn/model/gtea/split1.yaml b/configs/segmentation/bcn/model/gtea/split1.yaml new file mode 100644 index 000000000..3367e919c --- /dev/null +++ b/configs/segmentation/bcn/model/gtea/split1.yaml @@ -0,0 +1,82 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/gtea/splits/train.split1.bundle" + bgm_result_path: "./output/BCN/gtea/split1/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/gtea/split1/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True #.. + num_post: 4 #.. + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 #.. + num_layers: 10 #.. + num_f_maps: 256 #.. + dim: 2048 #.. + num_classes: 11 #.. + dataset: "gtea" #.. + use_lbp: True #.. + num_soft_lbp: 1 #.. + loss: + name: "BcnModelLoss" #.. + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/train.split1.bundle" #.. + bd_ratio: 0.05 #.. + valid: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/test.split1.bundle" #.. + bd_ratio: 0.05 #.. + test: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/test.split1.bundle" #.. + bd_ratio: 0.05 #.. + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' #.. + learning_rate: 0.0005 #.. + milestones: [20] #.. + gamma: 0.3 #.. + - + name: 'CustomMultiStepDecay' #.. + learning_rate: 0.00005 #.. + milestones: [20] #.. + gamma: 0.3 #.. + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/gtea/mapping.txt" + log_path: "./output/BCN/gtea/split1/BcnModel/metric.csv" + dataset: "gtea" + +INFERENCE: + name: 'BcnModel_Inference_helper' + num_channels: 2048 + +output_dir: "./output/BCN/gtea/split1/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 2000 #Optional, the interval of logger. +epochs: 60 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/gtea/split2.yaml b/configs/segmentation/bcn/model/gtea/split2.yaml new file mode 100644 index 000000000..72003ff70 --- /dev/null +++ b/configs/segmentation/bcn/model/gtea/split2.yaml @@ -0,0 +1,79 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/gtea/splits/train.split2.bundle" + bgm_result_path: "./output/BCN/gtea/split2/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/gtea/split2/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True #.. + num_post: 4 #.. + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 #.. + num_layers: 10 #.. + num_f_maps: 256 #.. + dim: 2048 #.. + num_classes: 11 #.. + dataset: "gtea" #.. + use_lbp: True #.. + num_soft_lbp: 1 #.. + loss: + name: "BcnModelLoss" #.. + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/train.split2.bundle" #.. + bd_ratio: 0.05 #.. + valid: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/test.split2.bundle" #.. + bd_ratio: 0.05 #.. + test: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/test.split2.bundle" #.. + bd_ratio: 0.05 #.. + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' #.. + learning_rate: 0.0005 #.. + milestones: [20] #.. + gamma: 0.3 #.. + - + name: 'CustomMultiStepDecay' #.. + learning_rate: 0.00005 #.. + milestones: [20] #.. + gamma: 0.3 #.. + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/gtea/mapping.txt" + log_path: "./output/BCN/gtea/split2/BcnModel/metric.csv" + dataset: "gtea" + + +output_dir: "./output/BCN/gtea/split2/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 2000 #Optional, the interval of logger. +epochs: 60 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/gtea/split3.yaml b/configs/segmentation/bcn/model/gtea/split3.yaml new file mode 100644 index 000000000..3165e4274 --- /dev/null +++ b/configs/segmentation/bcn/model/gtea/split3.yaml @@ -0,0 +1,79 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/gtea/splits/train.split3.bundle" + bgm_result_path: "./output/BCN/gtea/split3/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/gtea/split3/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True #.. + num_post: 4 #.. + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 #.. + num_layers: 10 #.. + num_f_maps: 256 #.. + dim: 2048 #.. + num_classes: 11 #.. + dataset: "gtea" #.. + use_lbp: True #.. + num_soft_lbp: 1 #.. + loss: + name: "BcnModelLoss" #.. + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/train.split3.bundle" #.. + bd_ratio: 0.05 #.. + valid: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/test.split3.bundle" #.. + bd_ratio: 0.05 #.. + test: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/test.split3.bundle" #.. + bd_ratio: 0.05 #.. + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' #.. + learning_rate: 0.0005 #.. + milestones: [20] #.. + gamma: 0.3 #.. + - + name: 'CustomMultiStepDecay' #.. + learning_rate: 0.00005 #.. + milestones: [20] #.. + gamma: 0.3 #.. + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/gtea/mapping.txt" + log_path: "./output/BCN/gtea/split3/BcnModel/metric.csv" + dataset: "gtea" + + +output_dir: "./output/BCN/gtea/split3/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 2000 #Optional, the interval of logger. +epochs: 60 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/configs/segmentation/bcn/model/gtea/split4.yaml b/configs/segmentation/bcn/model/gtea/split4.yaml new file mode 100644 index 000000000..9f03b9355 --- /dev/null +++ b/configs/segmentation/bcn/model/gtea/split4.yaml @@ -0,0 +1,86 @@ +MODEL: #MODEL field + framework: "BcnModel" + data_path: "./data/gtea/splits/train.split4.bundle" + bgm_result_path: "./output/BCN/gtea/split4/BcnBgmResized/results" + bgm_pdparams: "./output/BCN/gtea/split4/BcnBgmFull/BcnBgmFull_best.pdparams" + use_lbp: True #.. + num_post: 4 #.. + backbone: + name: "BcnModel" #Optional, model'. + num_stages: 4 #.. + num_layers: 10 #.. + num_f_maps: 256 #.. + dim: 2048 #.. + num_classes: 11 #.. + dataset: "gtea" #.. + use_lbp: True #.. + num_soft_lbp: 1 #.. + loss: + name: "BcnModelLoss" #.. + +DATASET: #DATASET field + batch_size: 1 #Mandatory, batch size per gpu. + valid_batch_size: 1 #Optional, valid batch size per gpu. + test_batch_size: 1 #Optional, test batch size per gpu. + num_workers: 2 #Mandatory, the number of subprocess on each GPU. + train: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/train.split4.bundle" #.. + bd_ratio: 0.05 #.. + valid: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/test.split4.bundle" #.. + bd_ratio: 0.05 #.. + test: + format: 'BcnModelDataset' #.. + file_path: "./data/gtea/splits/test.split4.bundle" #.. + bd_ratio: 0.05 #.. + +PIPELINE: #PIPELINE field + train: #Mandotary, indicate the pipeline to deal with the training data, please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + valid: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + + test: #Mandatory, indicate the pipeline to deal with the validing data. please refer to the 'paddlevideo/loader/pipelines/' + decode: + name: "BcnModelPipeline" #Decoder type. + +OPTIMIZER: #OPTIMIZER field + name: 'Adam' + learning_rate: + - + name: 'CustomMultiStepDecay' #.. + learning_rate: 0.0005 #.. + milestones: [20] #.. + gamma: 0.3 #.. + - + name: 'CustomMultiStepDecay' #.. + learning_rate: 0.00005 #.. + milestones: [20] #.. + gamma: 0.3 #.. + +METRIC: + name: 'BcnModelMetric' + overlap: [.1, .25, .5] + actions_map_file_path: "./data/gtea/mapping.txt" + log_path: "./output/BCN/gtea/split4/BcnModel/metric.csv" + dataset: "gtea" + +INFERENCE: + name: 'BCN_Inference_helper' + num_channels: 2048 + # actions_map_file_path: "./data/gtea/mapping.txt" + # postprocessing_method: "refinement_with_boundary" + # boundary_threshold: 0.5 + # feature_path: "./data/gtea/features" + +output_dir: "./output/BCN/gtea/split4/BcnModel/" +model_name: "BcnModel" #Mandatory, model name. +log_interval: 2000 #Optional, the interval of logger. +epochs: 60 #Mandatory, total epoch +log_level: "DEBUG" #Optional, the logger level. +save_interval: 2000 diff --git a/docs/en/dataset/SegmentationDataset.md b/docs/en/dataset/SegmentationDataset.md new file mode 100644 index 000000000..46295ddb6 --- /dev/null +++ b/docs/en/dataset/SegmentationDataset.md @@ -0,0 +1,35 @@ +English | [简体中文](../../zh-CN/dataset/SegmentationDataset.md) + +# Video Action Segmentation Dataset + +The video motion segmentation model uses breakfast, 50salads and gtea data sets. The use method is to use the features extracted by the pre training model, which can be obtained from the ms-tcn official code base.[feat](https://zenodo.org/record/3625992#.Xiv9jGhKhPY) + +- Dataset tree +```txt +─── GTEA + ├── features + │ ├── S1_Cheese_C1.npy + │ ├── S1_Coffee_C1.npy + │ ├── S1_CofHoney_C1.npy + │ └── ... + ├── groundTruth + │ ├── S1_Cheese_C1.txt + │ ├── S1_Coffee_C1.txt + │ ├── S1_CofHoney_C1.txt + │ └── ... + ├── splits + │ ├── test.split1.bundle + │ ├── test.split2.bundle + │ ├── test.split3.bundle + │ └── ... + └── mapping.txt +``` + +- data tree +```txt +─── data + ├── 50salads + ├── breakfast + ├── gtea + └── ... +``` diff --git a/docs/en/model_zoo/segmentation/Temporal_action_segmentation.md b/docs/en/model_zoo/segmentation/Temporal_action_segmentation.md new file mode 100644 index 000000000..8027de53f --- /dev/null +++ b/docs/en/model_zoo/segmentation/Temporal_action_segmentation.md @@ -0,0 +1,19 @@ +[English](../../../en/model_zoo/segmentation/Trmporal_action_segmentation.md) | 简体中文 + +本仓库提供经典和热门时序动作分割模型的性能和精度对比 + +| Model | Metrics | Value | Flops(M) |Params(M) | test time(ms) bs=1 | test time(ms) bs=2 | inference time(ms) bs=1 | inference time(ms) bs=2 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| MS-TCN | F1@0.5 | 38.8% | 791.360 | 0.8 | 170 | - | 10.68 | - | +| ASRF | F1@0.5 | 55.7% | 1,283.328 | 1.3 | 190 | - | 16.34 | - | +| BCN | F1@0.5 | 56.0% | 14,463.616 | 14.0 | 268 | - | - | - | + +* 模型名称:填写模型的具体名字,比如PP-TSM +* Metrics:填写模型测试时所用的指标,使用的数据集为**breakfast** +* Value:填写Metrics指标对应的数值,一般保留小数点后一位 +* Flops:模型一次前向运算所需的浮点运算量,可以调用PaddleVideo/tools/summary.py脚本计算(不同模型可能需要稍作修改),保留小数点后一位,使用数据**输入形状为(1, 2048, 1000)的张量**测得 +* Params(M):模型参数量,和Flops一起会被脚本计算出来,保留小数点后一位 +* test time(ms) bs=1:python脚本开batchsize=1测试时,一个样本所需的耗时,保留小数点后两位。测试使用的数据集为**breakfast**。 +* test time(ms) bs=2:python脚本开batchsize=2测试时,一个样本所需的耗时,保留小数点后两位。时序动作分割模型一般是全卷积网络,所以训练、测试和推理的batch_size都是1。测试使用的数据集为**breakfast**。 +* inference time(ms) bs=1:推理模型用GPU(默认V100)开batchsize=1测试时,一个样本所需的耗时,保留小数点后两位。推理使用的数据集为**breakfast**。 +* inference time(ms) bs=2:推理模型用GPU(默认V100)开batchsize=1测试时,一个样本所需的耗时,保留小数点后两位。时序动作分割模型一般是全卷积网络,所以训练、测试和推理的batch_size都是1。推理使用的数据集为**breakfast**。 diff --git a/docs/en/model_zoo/segmentation/bcn.md b/docs/en/model_zoo/segmentation/bcn.md new file mode 100644 index 000000000..5e0b80d6a --- /dev/null +++ b/docs/en/model_zoo/segmentation/bcn.md @@ -0,0 +1,160 @@ +[简体中文](../../../zh-CN/model_zoo/segmentation/bcn.md) | English + +# BCN Video action segmentation model + +--- +## Contents + +- [Introduction](#Introduction) +- [Data](#Data) +- [Train&Test](#Train&Test) +- [Inference](#Inference) +- [Reference](#Reference) + +## Introduction + +BCN model is an improvement on the video motion segmentation model ms-tcn, which was published on WACV in 2021. We reproduce the officially implemented pytorch code and obtain approximate results in paddlevideo. + + +
+
+BCN Overview
+
+
+BCN Error
+
@YnFT#I~IvXDrR+y z`!RI$$+j8BZ3~TSjT;jqcKK_%Z6DhVPN{BfylP%NpHyzE2=EDJ@H?F>zPN8&Y!5lp zy4pCjpNYD`Ii??}9=P4?%c*Q)CvrstzaR+*vOHh?^E9~&Q2 zg6F&zy+7bc^TpbsjU$ G;07_U<|mG-BP zFMs@q{Lx*va20{IMl)mWuMxTEY_DM-e`od^j~^i?oZsM~{>l5|<|^rl{qgqk*MsSU z?RDD(yAefoN{zx3+H>zS);-~^AKoUOB6_vJW~^XS_jC7}zrp}d3|908|Eo}(9I}9g zwW1p%4JXZg#^yQl39_%G-q4HUilX6R%+w&hxjeue=|C&hE0y>3^OCh4m>Zyp4j(=i zt_tRN6l0WRcyV|$o+Vlu-Y?`|gnMXg6s2_O$OLE|)Q{Yg0Ti3_SC16;a;Y47Bq5lI z=qhN=0t;m7fE8|(EKbAi^zf#g)15-c@k^p?tS<6b`2gddu^>VU6bdrg(yVLBX%a`f z?GjS)nd`zesj7tD1P#&+X-8?L@AW^9i_E?+{OFX2SJ25?;PY7B^+=p7$|#bV(P5Uv zDZ$}k{`g%~R*R#EVwR$g_i9;nu!KxyQkEq{o$+kQrQ_)N2)Y(V%TlYYZvATK!S&hS zM*nu;)E8W%TK_^7n_8FV6yrm T2i8Z667v5aX1N6w3?)kbo lLnh{GXY(Eep-2F-d(cQr>Bbm0}VgEdR}vn1Go*03=LEb zX$^fHj9RNjtHAl9GQ#q-=I@qt*0%l2DJS2ncvSZE8cg|IJDhynTy0!OKem0M;b^Zy zS=6ogRJPVO?Y%P-UBv;*p|_0R+Ts}5pFBeMyEER~+1Pq+;X8L|YpHFYZT||uR$ iK=ON^6~$#&%_lXV>H7+J2h`Ywo9!kafN^FM40BS3Q{mot=e_v5ust zZvMT_jn2u(*X7sLmow-kXk5SQH^UvFfu9lNg_d7b{OX!p+Q>SJPNsrH&MN#Xp#AWl zb|!ikLak%53AG%*dAeLq=NT6beq1)O^%-=I6|l%z_dV&`MbqFWcXi2*;_`U>F_a^p zxt+=Vh5PV&iv`>qG0QZ^mjA%3@~D0CAyDAy*}HnSsqQFXBRDzo6-%dWz>S~--RbCl z?_yLyZ%dEMjqTiOvEiFFN2R&`?@r?O%U!dd;|E>nZ_Mu2TedxC5j>A>rRV7z6;JaI ziydp7YZB+d8$5mjN3Rvo0niGB)PT<4TF+sx#m6=CJC79E3W#^&xBAbvBldg>rV7wc zBYqtBK07Qw%mtoN9tR&@hhO+6_a;MMb#HsF`zKP?8CIZCKc06|d$ZlQZbu(w=-L0W zSLl%Ox^s6}@S1r#Mw%eh78vku=TqfmCEXc)I4%JDNRyrj*`31!p8Er`yBTH@Nrlyo z-&Kh9PL<97tuNgxuk{{c3I=c9F>B>xH@_yq@|*^0E_W$KD8$^Tb)i)xaBx(`IP#-C zZxDxw2m>t`Q3J$<5I-wxv!%r$WP5=T2e?H>NsDzU9LoBq&P(-aGP7af3$5u@5rOc_ zE6ieEMWi>KCkFoKu#0W#7Y)$GBf?Zu%1llUj2e`N0fPd^1^WO>frB1?aJ>Jd#lb1T zApgpT00RrP1cUmgjy&l7{)+=W?=*kEArnHtpg~`#pvOHI;@{d(PPvf(rXk+Tz=Tvp zq@+M^6=Nq;Q#)r1dzW19lXFl8tb?SMGZ+{q+4}=7rA&GOYJbsERntXNPL|u)-j?3b z#NNo1-rd&Wy&W)KcWzM9*3`w2$lcb)&Y9bt5BOINZczF?n*m7lR}~j)KA@(YB9Vx_ zlPM7!Ju5vUkROhSh=|w8#Ee^6RQw-u&=()j!o|gbn}Na2&5hoTh2GxDoPmjpi;IDg znSq&^4pf8A*~8Ao(4EfCndI+A{%uFp)Y;g{(!s^j-j3+KT|*;#R~J4Y@V%q|{Qe%N zsk`O>^ywRz@xQzLuabW#c^TfP{$H&4 zo6mpcf*8#Y$II}aMdOEK3;y{4T1R|KQ3X}d8zg1#KX6#kALZX~P#SzLy)WzmBp-rc zQldht?%=0-(C(^YSbRsYGm&45DdlL1B3QwT;PNHaj?|C~HK+nykPBrPAZ8-bi==-` zYoHfO{_Y@avwWINd#?MnW|OdH!tpC8?e|Li-M$ GcoG*rUGv=p__tZs%osjVLDsXYz%7^ |#8Has7jUpJDuh;G2+0gf)-Rhh70rX5Mspaz~#3JL$iKD he`AC7qS0hF-^JynP$IcpoPeKi=;ItVH&h~h;eRA3Rva`9KnJg< z1FrvEBp96|VwM4MZ@2&h@VXFbB;J#v%=|lwBq;>BC=ByKF|tT!WJ+yk;HuWTltW}J zfUjpNPXq-QmwM&m&mZCau{5O`Be8F^TFgJs$i@20G^&6amAd!WvkEmXM>B !g~)~Et7n~h #FOxWJRzY#M-#p8%<%dU1r7S`GT;uwMD612$Rlk8=;}^LDpIN*zq52 zp!^9UeMpK;ri3CNMN$g}zoQ-(DWGbrMYf9ASh4aOn>(L&v>-F_#YV+Tz_WJ{hm)FE zayrA| zr*%y0Ex?^|j*Y$?zgMcKp)?kXfWSbqmP=5UB=Cp%WOmJ$9VzSq?jcS6=c`G98QjP! zj7ARo^>23^cB^4U$rB6z?lZw-5zwNP*vs8Su|fc1yN6G7Ox-WXCfjp+X}q4Tj=()p zA)>5YZ}<6AWl`K|+~^8F4IN)!pvTX)x>|eO|4@UZljeWE5Sh{r4c*f)@R>jQl9(Sr z5s%Dfz3`1xzQ(AZ(RzVaijmj%8GAID4ic8Bl@Ehjb%?HdDk1`t^X>Jis>P>OHcP-y zzg6?$@iG0%)}9wuWTmG6ZnfG_gjTm1S>X8sa=F2pBJ%BWkZ^|k J{45I;~asyza<@v4mJq2~r8XE z{P%?Sk5DERBnVw%>)Ee8JWKBntlah&OLHi50?2c3o0uplk%H#fm7!jZI zD;kBoWD3p1M)Gc68S;S?f|lLEL>5S@1N-(`4)XKw^;%t|Dj^47K;mHhczvWyauA5b z4+fjw;dLjyNUxS1=!7nkyvGgT^F)u2kEhgauEq%Q?((=YE0oK?B(1vry@6!Z$5x`4 zCyaognSHgn?s2i{pUJ>wSaKBN}7tSg(?F= oJ0TYfr#WA*2)SO_H?bJp8;Tt7 z00Z9#F@XH&H!6}kDg3!A0|V`pVyE^$j8f6KV%XldzszS)_ePRv_IZ;>GdQYvB@>4} zKmP7|Gtu7}h%UmIDpC1i!tXaF7oJQ<9lt~*B(#W=BnfqKVN((>qWoPv8n-m;VYxzw zgOcXcJj1B%TC18ipoXZzj1wyX^HhNhkZs_7DW(`3ObXRtPpcA&NKmLY)a d()qXYPw zs1iPnrZA-B4>})ABx$g3Qihaoe3!#}2I udI+`f_qZLt~DWh$d#KnwQM!8(Pb$Rb;U?Hs?++U?nj@pfPMer Lm+05*^$uY_qv`L7qiA_>!bcZho3U^yFMj2DK^i0H+6LV98ll% zH)3p#u84J(Q&jp=Z;03+vctX(qleFOxc!7*r%Y?AArkY!2Yd%Q@jo7tTp!I!XyZTM zuGnL9ITez!N#Zi1qN0VPckblfmsNE_(CK_c0? 3hRONwP8Jm+?(9~Zr)7;aQMq;oV^fled1bq9m#t@715qlL0O6F{m6X8H zv)Zwx8sj20Xgya8y*^*}&p%9&(df7=EDe9fdSAW~!eMC_RqNUuy}mppa1v=T84n<+ zmMDv9uf_G{nZnZLc0T`+(b7ZV@+L|XDJuqTeWjQrD0Emv?dnXdbCr7ekwl7EQhN&= zu^xX?gaQpMRIV5!N#!6fe-p&uYS8IRGbl)GE|VW1is(qT_0zkOIGk2nJsz3(XMdk( zy$Nt3QzV&IYgd0udpbdEtEZM!V+k=_=vLtjZ(=(8W-OUbN3leiOg+)dbt+egNs=(Z znbf$svM)#!2R3!OKtiX2Vi-l69c7Tqd0$c{6EukosnH;0uF3(WaE+^{{+5~6=v~sP z=W{M@4cOGzynpm_3EcY*E!~?-oQ82{hj^M86Dg$9)kbl@mApA*g~*QWhU{h2ZSh(? zqEwF B47Y^oDQywN+P@3GL5<|`Davbz0Y<3mG-{w?)j#G2kADS+9IHx7f)0=AdVAH`rvZkdq)A>gUUtjp zM`G(lJk0cmm`vn}gqm=@R+Bm5_s1nuxoiO)dmbn`m|Nv)Vx9Iz{OO%!BZjut6@xN> z9qDY=@|AY_Kt5%)6$X2vJZdu z5+|dU8jSkk!f7r|^AXYSaADbuMwp5_B@w6DqQY?{KuV``^=SeX#C9eiu;=u< 4g*dQ8lOn!NnmKlc)U)!_G2ao*{87-W89`QsreZ0$Bw41ug|6PO5{m2PMAJc;ip z7qn26-uNguAu|sdJiLrzQ&Zzb60v|8RDVolQkBEwxl%Qnl8)NXKOtDH<|MVjrsRg1 zFQ?>Z#Iy=IWp*_IkH6@Vp6dm-uv@>JS^1LVh+q*U8KE5)$-wJ*amMnvol7 `$C*e$XzWtFJrJk5Oz_J4wtq$r?EXSGjWeY+fAmC2LgX`o6r>`XV!= z6_r95sgK%%pk?%Aa* otj1~ zMHWm**Y5jrqw%1RqPJLOz_A$5@cJgw@;#nZrBdEo%$gCElC-G#&PYZVuhn}xKwJw( z={~KM%gXi;PApS3fBsWA{`rUFOG;fSS?yy!CDF92FUdoWY%y~(`FI%>#SQ65RWTFu zwK1KGf7?+0bN=s)9^^jO0x=rk-&JMTvo?sO#AxmjOIQZT6(=epauC>st6YDQ5Unl^ zzxL @J~FkBkS~ zk(@e%4BiCA{JoEQt*XkQrZSQEfaW9VUJ-6OJ4s-i`(_=9DB_Cx0?x>vu(KM2TYCno z3e5S=4(2hHWU5;j!UQ%_jBkuiHli_3u}+}rpo?rvT$&mUcG{rP6&ywkn8Xg{#mIn6 zPeZBQI6*@%X}sY^IkD&IB55tt5@vLf*YmdDg`XQnBF{$H$cd$}NEY(MaBiYf6=Z-b z*JCV`L&X}j1un5RgT=Rvb)qq4j)k1;!(AUg;eIVF?btokJ)58R_~#Z9SBo+wDnFtx zz~>3NbP9c5EWwe)OU0Npr_MAQIF0egjm}$Y_GO8A^MIgu<@#W7nR4I$aJ3m&x~J4` zGA8nkXCMyWwo RFd{wQ*;Q7K9GXe~?GguY4O(<|~(9k%r{M!K_IP!kuqVjsVK4gQS zg79yPW!S8uIf pN+X}eOR}PnagM|5d)>FHQPwEOblv8=fAGy+gxTn3 z(t5fUB6VZ>|t; znJ;Tw+_XcAyX*Svl&?-cp~wB=yOeV1?82WA6PVH8imX2&)gkbVyFAv1C6lq*NeahZ zY~866jA7C1QVtU)8(Y}GJ!os2^@$fRY41+Sg%JOw5|#Oc)5 Dk2+8@u`((b1 zf==jL8PW->?Xqes(sXp#@VsaY3pO }bFvpMm z@r+TfS*M|R(HGnV6_>Z|Y!#^%OR5vP#?jjy=gIBIu^a(| Oyff>0ew;~7aj+%u79j_2Gu4Z zJ8@!$(aa22vJEagi4S_Xc$h >f;w>ra;8Cc7>&=XUPz`Ygw?nFv!D z^!j`DVhF78k65@yyx-PDqwu)_WeaqDZKe?!p~$F4U`#_KlFTxEaL(WytHm#U-(@;= z5Ukm0Ygc3{VsQ;8D_{PsJ<^RT)oY@(?ctBhS^*FC3s{<84)LXTEx!tO-Ahr5?Z!ow z=y$ZP29la!vxS8xqf)!n6~QAQb-F+r6;dT&Bo~f@n5)#{WGb~h)e&seS=s?ITJR -%rFg)B@b9S=fM S9 zqb_@VRqeMel38LX%!hg0?0^`hE%ph2!L*h)w=I3h@Cjs*Z3h;D4Rb}vt2Bj}U>x)? zsqm%`D*+|MRE!7`yh(>8%M~rs>5WL&EcS$rV!fiyl}IHiGsk>HP{-9X!ZfKM;xRu* z1&N&zpToywc*SUleXg-T7mHw?Jr42uw)hE;{UT{jRe3=$3Q-K)gzU@s9mw49DN!yW z_2^+Me8L%~@HJ1R4ae8mDbD}ws83oRhWDYKYEzC6C~-gyUF!Fbb5QVDSnxTpH1RL# zaG-&Jo@C%S l^$y=)-Z@Va%q z+~2S}+3Ag?9`(3BU7=dw=lr E+VsXmXTUPaYINQ7U8wgd6|*AMwAJ&ju!VnPzVxXk(>%w%ZTJpf;Azjjxw3J` z$VVu9=pj0rv+sIzpkLiqdx6jEq4=mu#Y-;HJSKV1?WJ>lwTaHoTm4B&lYf}0#6vTA zt;W8>`^Sg_ZSrq4r%B)D*zhctn^84NW7NVT71yQLUm0F Lk7-8K=oVk**l3~At95cU4GphrbVDD(0xf&@Do4<3r9;doj zB_NX|n+E09jwEOZH4k|UIiy|%&j(61C#9~Shq@;^yu_cu!ecpe8Pb`c7JgOZLh+E{ zkDNNH)wOv^$3x)&*=B4_KiLVSYz&Y&_dWY0L_L{dN70;bK$osGC>$d-@t^^A*zKRX zAsl@{H(ctYh09H2#$5Y4 Okz7I zF5n5wmeHt9OG@)CK8=8l&LLgeD9j>pB9ZvmZ#6EVp|qfzq?XK9!}T~~5u>PhTbNHk zHCg=+@g}H`JnFV}ep{ZVYBA1@_yyHtOt3x53uvM-Ewn35tH#fjFhH?nG;WoBC(v~P zhABgom95OfK|eD`8f3L5Ex!AA-`%K^1TYqn_?H6Ee|g&PfEQ1G@cn)}azj@(tGIxX z0Ac+5ac=67);z7zkJwya;_wg8R@`cgj;!$c-4TBNB%U$-E> z524ldrEV(61CM~)FPy6mYorUN>(x_eYk*Co+2(`c^*!;u&xTO>(+!9B+K;+l4g1r* zgQ*sj}IeXs2HNGi>)y_fo8u`U=<9bceDjHNdLm zcuX ssNxvk zR~C+4BNY$Fi!a*7a@Zdvu20xhG2#~&*D1puWWHzAsGQAPYvM&>J=2cXpG`r~by`Fr z(aiUs>A002cd0zn8T!--?(^lawKAwlYW2|SwWFTt+;#U^l3aScEdRMl8eP0FjhwhQ z_H%(T?aWo58f!s|BQaME!dGk3J5Wz$wF|M*)~AqtK)k_Ss2Nc~vJ!ATUii2pq0p~E zpkve>cL*a%yVy1;IF^2k24xtg)JxtCIuxH-Vhz-*246d%9p%c2Z|n~D&8=%(k9tgx z(#29*7U3{N(`w0-I;8pPtmj+muo!)g@mVd^k*YdhBX9xY2sn{gP6xuh13AOIUX^O) zZ8pQynfFfyO1B=W73xZw+)0d0KQlI~pE&(a!2XysL>@4A+TBd3A-QPee`Q=tWi}l_ zx2|(h$|r-S _N|YSZ8L+A+An(iuaVDfoq*-Oh8AgK-FBFsg1Pm zhmmS8b+U=w&`B~n(df{?B&;vbGYw-2kB_a?Ya !N$gv3Vfp;)^rXTEzeLKH z|I4KAu7Ek^XIpW(c&>G)`}FNYaP3fD19*i%UzOJEkYnK3&DFl2*1p Bg-p9!=Zt7B?wbCUvz@OOE%`HH<=`P^<&OMZW~tDW#SUNLF$dwuHt_Oyp(vMw<% z5SNT S0Rz3=$kYAF@v+j?tb?psyPWKjYn#=9Gi zEIApCai)qF+miZps;Aes?;l3ZQswnHO}IUcno5L=?o52N@2d&7Ud^mlPo2{wMsw-f z7KVK9&qI$2Ogf32#(W& M*bV{F0hpvME1ZqAFnVVy41x%v6m)f8IB} z$vs^PS>0)E(%@}W_jas^q_&DX$H(Z=w+Gpyiq^@Fm(vzVf13D|>+&n%PxhoUraXJo z&zJmLl&4Lv8zoGxzBmt-13AXUoqNq#>(T)m>v)k9(uJMZJ%H*N+@BHMP}i!}CmHSC z%r2j)ijAGQ^=4%CWNi3~q&a>yzAjE=WNuj}LQU=6J|*3*ng6)rYl*tMY!3g9m#jvB zt?|d`MLE?dg{pgLxL%O|>h5i*-j93B+h ?AlwIClA#Sc zjk8Ouh9FTPG|n>_4`{YUQMe)yh{JzAx_~Q_Lc&7tQ#l2_P(pmQ{gbt4-j@pQ !;gz`qPDsTg zmlDqFhteCQuc(|Y>thH_ml y&?j2XXDMbDD zc+~D@J=x@39+YUmP4Qrk(Qq|6NqTb_}}!ns4GM@#kHtGu0BlC(#%%sNPN?d zf a!}(Z6zs#=I=;$xv{-s3=-Yo-B5K7? pVZ{Fm|*ivoxN-{P`KtM47KI~2j$15G*alO z>T{>Wn4dDd$)65aJ1Sbr3q%o_cJZMRqDx3fR$F)5KIv!-eZhz?kR)OQh&BG2MKr>Z z0fwrJo+_Y7kV=Qa3bZ$oInAxwu=#`$uKe v#I)w*rj**N;1xR~D{n;l?4N1v4sqh_1V>6kASMC@kS)>`u|^eYSxLxaot zMpw?Ck5v-o|9Jcq-s4~%R>|55sw8o|FqFW9`y|Srx}&{6&N{f=bz0S@`#~ZUp}Q%h z)pB#uUCzHl5gQk(1G415RiE`P_=t5hkvdtN a+aR)q|z5j7hg~=tZEQZU1J+LS#P7%r*3nW)#<(zp}CVD zr?}mWCcGQB`&lnR*edF{6s9c6`e4+p28F90*9b2Lnak#>?y YT2W=JG&P<)sS@jdaS@bet<={`HfXS vDD@n*0(WuhwSdGo$6&*?> if=(Wj^-*Ydvm!rOt?{AsHqoIX0r=C)?ae=Z9{20^xCXt!V0zLC5v^++lgdXb ztF?|D4zrq_ker4dd%Q-WI8XKMGArKzo4{)P#HU?0;!HY8KIbm!T%9;Ii `=#!u=@*HC=K*hqB 5PTamXY?zY< zD1oxoww#T(ofgYVsD#N%S=e-udvxKMgadMexvwPS)_KcKWX7+2j<}{W-Z0xW2i@Yl ziMKdf*Ig_JN`KCznR^y%65Gfu4Rtgcj%ee14_V39OT*v~=!eOJp3nzg8D-a5xYNku zS*qXMn1z#(-Pk3FjdxQcOsyq_PoEnE#QN%36NZ3!MKHwd-x(D}5n _Oh$Am3ehJSUj0M0a6vL>_F=$c65T*}>LuPX7$G87#_h7+}4pT~U`J1y+ z(O?BX&o;UUfpgx 1R~&gO D zTM_ZIO__8#GlVLtNeoGI)&DlCVx(7gSSfs|ec86w=j+jB)@w9-7%ozX_vuDmb3kd4 zI=LvUYKFtG&1Epp8W}_piMrOQnM`>6QjPEG^oaDj+&84?B9T9;@cUJ7e9y=^xYo5I z|2zE3&JUl1h3}REF^T7*QDdSUZ1eUuXG{SYCo_CeoHRbT`&zB)RI8j6tz|cab1IFt zlYG)*!TIDfO(LFYOQBBSb?9V`8Yw%j3k?yjoPglKnN7pa3Tq6#dCi!eE&amo#^uQ5 z?Fnhov=iY)sy)nsR$Ye1aY-#JecCFQAWibhVzr88_9Ww6nWgO<^9 q>R3pOIdP;qr zD5sF!cRFcGa2Nu@5c#Y6gZT-tfv^v1V`2)z?-w*~sCsev8N&*%85rIq7*3JhrP&X} z#NCX)B6zp9Tra{p_j@^!dXGPs_c>7Mk9vpnH1eMQ$u9h`Qa`Q%?M((8WgmEEobv`V z_d4G6*&1-v%IWDEQ`sJDv|aWh7ZP%kZ1_ xA6xr=HH6^23rY)b&L_9JBZxAv|OU<&3BZ&ycpN0;=YY4Rw+|dHT|J zl#F*WTNG$X%rCRk#Yz$GFbjTMrah_N{A8kJ4%M(ai$kwNK(TM*kOI>}HM2={4fe`t z(VKsrmEC3BR?Xq}k $&Xsijd?h{5!afGM_uF0XmvuY zY&Fjo!q$#pCBqnHf5+Z2&D*5-+3b5pK2xL+X)|foP>QAFRf;@#x%mpo`({LcG)ahR z^tG$YAnFpWu6l}*i{tSn(k~WSxV(?kwgz~s0fh;Q<0pBtl`^ +%kndE|p5VRsG`O~OT3GSHZi;A`aq)$$V&O8{$Yue>E+R!C2${Rpg zTsPq(uS_}1HhY~t)h460n*xQ{$Fg{^Xf!JOE_Vi}yZromAcS^5uQoe^Fa<#_de}T) z%I6lhc~G)ofXwk@Rhl)xkrakWn-tQTIc(0cuR;Ri+ndaO=srB2RV{^(YhfU-M4T0} z`}H9Tx69#IP~@{Po$CmMGhu}|mjJ2w^FhtKTom_G6bG#ME7ibKiYk<9p-oG2C(%O( zR{M4QI $hl(xdxM>&42$)fN_gk3EcV04!gpPN#Rv+@Qzr zjyoGgx%+}JvzRY>pHe&4gOcal8J!c@rqeHyUB~BQx?7x4hSFwrkYkkmzDb^4&0j%+ z@NsVb@54lXw`Gy%TnOIf#t`(e!>HN{3P1gX;T;!66ykB%1gq3-0al!qYE;ozI5C?H zeWlf^6>L_6wXSl>?MH(J$k0$N=+&Bpb8;R8(S(EGC&1}v8j^_itzfEA635T3VEUfJ z%iM83Cxs~0qMQ5Uk|qq+-Eo-fhqEk-nx|Tw^LHf}@4?=Mr1`5Em}V?cx*5x0tyO%p z %e2%ZB8GivKQ5-^s znD{)x!gM$`6Hmn4A3lh3B*6U!&}Dqep`GmE(6GDbzk_I>HI-GX^RBfdbBDUbus%vu z@n%+uq;SQT28?Hc-9PkF3|;~1d_mxY`^7;5(TN&?-suhl%I`6-g3;f_uk8*ZLvAWu zTTuCp^jI2zQ}%J-E4Sj?>m;A2RsGQE3mcLWtSf@Sa~vjR)7Kls eA%Oz9 z??`sBKU@`w;&E2n(n!T9Sy`~*{6 6PZL|;H|H?=8!mgAfVWE~^) z-j{5p0>d&DGVm0uLXeglq}F!pXS+|})M0{xQWe{jV61!(19KL|bA<>9SuL@1*UHKj zo!$cD#(PR;QHmFa!deO43q E1yZ4KigEpx`kA6sqX% z5+WZ4D$kc;uu%^R7N*Z!--1?GP`Mgy`$)gkE@56S9k?&XkSJ{5%! @0nrnAP!< z6z%ZL3=Vr~Vq<^{92R|4zz6sNWE%O?0SD;#-l-j4-@9YLSH!hXk{JW=1ri`UY>jnN z`pImB_2v*`xfXg*!%1)Tb_&c`Dt1^D4qJSp>Inb^JPO~qyEBk{EDJY`OCWfAH%(GD zV{^UO8N|#|jD;7FRfF};SiO@H^8%C$PN-Gk-K7cU52!q_KuFqyGc%*^+OnWk9+};x z+pXa~`TWJ0#0E_PfxN_TnwPtClDi-k2YGccnX=X6ygTGyq0=-nq)aB0T)##i?)e2e zezryj=Fh=R^112@G@ipr3~b^c+?_B%Gqn @;t+>S0Eck=^;f{5f4n@kJy;4bQ&` z?hb9~H)YR7mDD-6d2^vguV7D=B@*%%?}i3PiqyEcLa8%=#G+2~_|Ll^>IoFqjd@~P z-~$ j_PTo3f9&FP3BeXipzhtX9`qMT z1n>)AFDrzJJi(2Unull2iSO#Refe}SnKPKp=cQPzNc@g^T *!P1ybQCor2>Ie$iygz$Gk%Apc7-~&NF$*d|(k4zPqIl_J&uWkQmGC=u zjkO=?epuJVAXYFXGphUZQV?rTz@V~4QY!(bN(2*h))p^BA1milP`6-}3B?j;@`nJ{ zrFK3Dl|g9fXiT!?EQ(mOw@d@Q1M7>nrso4iS_3qHOQTQBrhj^pZ4D1uSP`DsVI!3| z{#Y&p2On-`*xr%Ymv0b>lDHsvGDuBt(nBQ#57lHvL8J26{lyz{ekXV*qDxG|WH}zE z-%h~6Mimf;5_UuD`a*4;CwSX@&N#6t{$dI~2%h&tA!i_q$Iao-u2c}5;YEtRC+yA1 z;vhUj`{xGTEnxdtxmF$NFXxv>SJiS&ln-#|ai-_%9g%8f>aY-GFj{qHVjv(}#qpn? z1fufMp2Wo(qtG`3cY_J0d8tjL5b)+7fFdCl0aOEmq62Gf@z@}QvRU-=h1phd9M|3N zjEgdd1}e2xXpgI7kq*99)C7t0A7e26@RMG7h8 8#STx4 z%2O{(dQ#*1lZt{iv=mI^xirZID{vD xWw3q`oU%O~x&HZ13-SU)YO*&CXD^QH}$ZIY7x6jITcPoIypU4(Qg#z7M1@YrOx z)&m0dU2aD*06_o?PN!X%2n?E#rVZZ}ID+HD>(gIoEanq^puBhB?e*D;MzU6?H`jN$ zjF48>lkJ{h_`{8^uIlcvnNqEGcP5Jm=j}dNDdZ#ugZ0w2KHhI{oY+}i*J9DfuS<<2 z2!UNly{KEvXd8wX^~mjXiv3~dH| &&0NaTcUR&cam+U9`qUdf_wc|Lvlc5#`j?@M`?{j?y2#ucu~tEWbCfldN4 zH-ETa-psK x*9qe=@I{3n(oS3d5shrC$7=M++FL@y4kT- z0V*CX?VD&!s!VHg!0E-8u6|*s^0isX-Kkcy+tXi^`t8l6&XObTAV4go%J-=Gi9O 8e+CDIV<~hK0R 1Np5GVCeh<%W?#BI60JEd;rLY1U3 z+m{z)9*8IiwIY8Mz4V7% )OoIRooyV*zm}f^ue6r)#p`}%yPP?BWK7>2wqjCT;tv0jbW5MhF_R(u#SUt=r*!XhiSDtEj-p4@MR z680G^<@|hky4&ON^Rpg>*FfWPN%Sc5X8ay=J=jL(6C9}trTvB3X#XAzeTa}_T9Pjd zQUVyyPv>xu%~ kD+Tfcp|X(@*tUrpnu3e>t@qmD#XWp+PX !^kx z;1o*M M;cDj+jMqHrC}5Inx(`@j< s+*7OCdmp0vEC7|GJ3I zbO}8OsyIklqJAAH8@3VfJs#6$3?}{2DGPR;h3t-%2JI^KRvO34%^!4jt3K!~{M{Pf zwgN4d9ynWR`hy)+_#WLx%1JG)?aM>r#!rkZ{01x}(YeB3R0}oV*Mw61HXPguF@lD6 zrFTk46+5=j{#A8?&nC0JBQJBTOQ0ATk5jrb8m_&S$DF2hUCIiV#IzMNRq#c%{T h&=0kZ9@iuC5DXro2v(m#Yr;w_4hb4EnyE#Tz+@6;-_>UHLP63|#Ta2kQ9suu1 zfiJ`le`(+eUq7ukZ0wxMG6lnlTi&QXd|vDDsh0S=n{FQ{rL0D$v-x;`RLLoiOZ5>* z6%< s>KFEVGVnxhxb zQCQ9?oe1SjQ|E*NXKr(qzvapd{#n~e(2X@wl~z-Cas1gkRQQnZ=@G)5epV3wwj(H! z`TM`lO0d6=XRf!FNnozyO%oZRAJDtBU6aD}V(CQs6-9Y@-x)YKlmz*WdrX*B?_Ep* z*VCk{V- ?{?f9P z)gmHM(A_Ro7rr@dFgN`42U$<`JBteTXb!|QQ1%z;ufW$^-41x&?ixNT@S^k`TwTBX z8xPksDGc5ywETldq)9Fuf<71gpq z8rP6m_g*r3Op$&!a-s}8^)T)+^oFnI0~J}s5c&m`gH^V-UejipyHlq(Gv%-Pv(H_v zlup`5DcAXG9D!PC5)`+db(N3LEheL&DuXX+Q3O@lYw=&~7juQe12q)+`e^lJ6Pvz% zR)*9z4^_LJQabV905wA%=ypgbY^$NrH`p$P0y1^qpt2%i1+7yD*&AF)^Q$~=jQi24 zov_>=QSB!&pJSknT_dy`C~;1tO-rIW;VH<;<&);H_Bvz3wn|BJIqzqgV3)TxjTQ{$ zo9GreY=2^=yGt2wllyI#8%xc0cm4BJrB2%+E)w7}bK~DtM8=>v44}0|{r2bsVZgE< zlt(!{zh3$DcQR~9a+_I;x_i1Z{Ix=o%NFrEk^N%dm1julXsWBuU0@GKRAp;V{jXy` zq^6*4vLwXk-!G@t>Xkhv%xI3MF9|eJe8b@rOLH$C_XrX?OLZ3ZVsU7`YNm^%n#(4z zYpDGnQGF(geY(#Z<{E~lrD7!{48iS$G{*oH6_>?9&Fhl}z-|yIP5-Yzxu- vh*mzM6eG E5s2i zZ^|UeOCdkV7Ia`Jk_vQn93?Z}aO*SZJpLA=;zXLuIn9KIDaMYRGq{ooapKUQk9{GD zt?-fLkk+bs^ww!Adcuh<-hz^n; Z6&N4BlhnVP at3&3E{;*8XiOdklg{ud @Me9Z4#y zWVfT~2XbB;q=C(3Os!gKBPq0%TdOaak?o~WeK$jIq=#YiEp5qMPLhN!K3*su9-X!u z5eSG7f9QuH|5#xmZn@;>^0esBG?zc5y>t`d^G8a_7<1+dwAblgo5FAB^v89m;!XcM z%rpPrVSY2WxPs2RzTSMK#B;aG#MZUOXZMlN9YX+x&mdO<*171s+GHRP6bt}F=lMLI z6|>P3HZrKHq}U%4f(i$%S*8^LG@H4A9S2lXp%XAekVx#hv{*cVsWb4(s`k3Fviv^X z>};+bOg(;kz9rpspdy}go2!t@x?7^#U;`P!T!1Zg!};;YKQj1ykA$L$Ih(k^5}cv} z+`+-z08Oa2l&4v1yg-zLkkSd5hcIU>Oj}sY^9XXvLqF2iKe1-%#ZOt2MT>4+##)_4 z7V3__Qzd?3)4i#-RsJzEX}K~FuSf(ZxB0^;3L}aBFedioYuI2;pKL)5M+8o_4~Iun z)yyIhL%4j7>=OM+Hp^1?gtZ(2n$0^C>Bn9kzY%v7VUgo7hhu&GoxndG3J8=^4~Ze` z)iepF+H^dt%HQpJ&;9Z`QfF!-Stfn#bIHeeD;$&&oD{cvL)*q)bqbrW3S!6H{IyqR zc*H9!{F)*<3Z=@B>Kw$NcS4~y6czPLzMGUfV|sh)vP<{8T~Xir5Jh4^(nF_~fpqkz z99bsV_;98eyFccQIq5H;lu@buta$LpbnN|RIv^jun`6{j`11D`{8yKaCc>}Foae$3 z8H8M)KmAVQ;rIMUO+WSiBlGTL&4BDJmwvMotk1)>^q(?qGuH-XPV4EPic?q-cybkT zGt(A2BX8QhrJ9ZYvX5a5q&LcbI=mG#DmQuQlDo;eQSdTR=`8YUFfkfD&hkMW%;t-9 zz?k+v#C8ozYE7cb?YTKcmnBbiA^l%o0L^&02-rXR0$?Tfn=Fz96 TtqAdJ?jB27F!H(wh!S1NQn7+%Bwq|hqqsG!Xe{g^igEA>9X7_GN7pVIdwx&T z{FL0ulfx%yv<@i55I9XUY)R=}>=v{e!3z_Q$^WEhZQd$ti8*Dvp}DXaue>Hn^g^Hd zt!K~v)8Zd00+mt}qGVtFM_i%Po^Pdqpi(xW7E)|E{c{Q`tT&8~CV!G%zt!z@8L>qg zh@;?mtY+eGQnsl30p5W_S$$ykqZG)&HaGh~vgA%nSdwA%2c6_?Flbxk0&x`wx0~L9 zPM@UbqQtLn^F8n^>C)Qn@q^kI*7UwQSOK2XCuB*M^@*M8?DxL7`r}TqZH1(x;b$=j zDG8}iA*J7KBMQ&HPiDzPBlna=OipHPN>BjAZIdi`J-6#`Hi@`gI`5(PoPE6b`bfBD zb!$i8tex>H2cuewyTsokYEhM?0ba)!hm-G*PwhYYMq}P26sgboYnwc&K9cP5N%$B& zC9@!p5(!d=>bN5IA&GDI?iia2HY7cco>>*62Tm$jpmC(>=^YFw%OzEsblt;34yMmt zz4QYlm-X^W@U<*`#prgF}=y^?uN zUk3>}jA6WPPFV)jfa30;MXHfXS^nYXEVcLd-Nhb_fFxh(@j`9Tmd`;!sxeCP*}Iwe zwxM_mXi||c^!mke&+Mwl{O`l_RG1fdo4*cHsQw*Ir&K?``4iR?(-~qky3Jm8%aA5i zMGP;Q)Tze{;~aXonHYCM#`x}fG|RfT13KXwC+mcrDbomVcIbn&f<*OapQM5hp(u`t zxkzz4qG6lAB(c-@B4WvTKeu7NWXARGW4?=Hf^|p!V$++=w28N@v9*`Ht;~~qG+ktO z+?#FYIpU2ad8Uq`X_8mrMB{xq82pb%g59T1bk%pn(|EAvDalFM>E|{bTv_H;TzAN3 z7S}nerhpWdIbolOpck{mp}MvVfx>7TK+6d(UG!tRrlUZ9n6+9z$2EsQ{eNtLQt<7E z4auO}i@z_^`SB_ )X7L61FPt zJSh{nOn)0NulPavp;=ot Q_J?v&!D$%6% zIym=coxRKukDAiFkD8cOFI?;yJ!YN(Etw{2NmTtGM2C|r{Vr=P(uYi$@GX&(h ;#X_FY&Lo6u|3H$P}(?OF;3&zz4Y(d297L2*h z)&4=CCVagEHt;7%*6_;UH+%2+O6~ntL-e1BHkzX?%MD)Y9{AzPmSZ|Y{V0~*j>#Z2 zV3jGHW;|wQH7+isD9x{9O$b^(lkL_$BbbF0Rm;1;6V+Mq?VdcpS$g2@MgDFQ+NWve z=?a@r3pD5IrJ9O5KevaIk%0`e)ggb-Y#~N= nfGrs8QPU5 z!TH}BLYvM)IM-5{K6@-Ns_e)ZfCq* NyNK zClk?+NGNQWt#d^{YCjCIlh~prJ?rH!tg?|Vnh1~R;?6bt!ENs0QOJskSnGkZyJ;iX zk%}`#!b1i1a;j(|&D!_zY>A>f&D8qGbl?C^IIGI<@F0aU7F7{j;y|n9_Q^8GBnX!; zPu~B$D>5f7zG_-mpG2YQOFBH^RhinwOCBk7m%E;^3$a6ar@*Wq*-K8Ax3dkm<8#fl z*Up1PU%S`E6TCzIAWxD#gMLLZ$`P6p2OUG|CFRMT;3`*x%sR7st8-b5Es7s~uNjHn z8w44){^=`i&XdwJ(N$5Vanj=v1v|yM<{fO6pRyUjfl}~qr<-ZqOvb_k<~p+@(7BN` zNAC1kYm&n^=4UUKfZx*<{xHzL>&Mbxx4Ir_S{`668Jq`yi6odd4yQ(AaVpxl06@9? z9K*-h@nos7SbZb M9Po zCc?WbJ@dVI47Z0&jJmfhdeD-N{*3rzn^RWXc_zKdfz~j^l*uZY<0Dp%?Qb`?SrYW1 zCqCmv>#Nrf82n1(7021@mNF_fUh%FH+f=Z>S7^H3@!}8rF&>^~$lBk2bJs^>sYqmW z_|-3lO{ufzDHpCkI@9^6I6Q(eVgGp|HwyW=9GQp>xwlQ$sn$hhQJu^) E7wrqZ zh6s_@5J4vKpZ`ZZJ t>jXTQEBk4!zr1?vM<@0QV z8PGv#lowo%>GR%<30ozv&r%QD_)w`kyIT*W&GSRstb4Ii^~Z@)uOW}Qm}D%;?F<2D zIDpqBs-_1922w|Ss4;z4TJ5n3&0{YUN6NDN>Al+eH#-e7pG!<69QyUCjh3&28yhV< zT@K5FUu7&VrO+?_?a0koS;Z4k+v7&O>zXhtsdc!xJ-cZt=Op-5q(~Q3C2@|YNzWl^ z#wB&9Eq+~O@qUs@&c_`Gf|b=pp&zA=4eNL``sNsUU|lu$+mmDtIa>Z8s?|Z=8=P1f zjrIc9f$(1epB+uj7h@}JR%9p!6HsrBY?eDaZI|vIvJu)Smd};!5&fw!Th)D9aOxj; ziOp|dwK0jeXd@fOWHwtVPQMo(uC2_O_(jTnUJK4MA|Z?Zh7}O2=rhq#e&xQi+>Ee& z*A?D=@uXTJHF}oc&M`%EHkK*(u5K#EzMGn=Vujsk-yedB_+&PQO&MF@oZ`otHOR28 zU#n+fb(gGH%$f85*dJwy9u>bSt4E)^2EEir0nT3-L;(u!WW#%*XC0y9uB%b*zlD+q z9cLfGud2wBwmD02lIv79Ph7&-1eIOYB?HzH5yUNY$-wD?+Sy{V=F6SaObKo$Y`odp zkn6b077qRAa0dgz1t!oN=+^JPS4o*a2T}Sv|3dgd6y@JJR_mk4R(C4Z{9MSVmb;B0 zc|4Ty7kJSNSyg*+nCE#L{qfc1ekJxzbBe#M*6ps^Es5-9mtEQk{54Z#(yK1V{#KQ7 zN%6APi%67C(}x0(^tbYxWoG+}f65K%KO_9c)>&22YH^OkAY|-NR1mGh&{WBXmkwbn zT%F|VUWp9Wv#}G5-IR68(dzp&^V0ifrF9-%kW5$C lo>g$(=9LyB-ieq2)I-A67 z`Wwcxak!sxtFQZ{kYq3$`2Ct{QeY8p#PWYbvSP2WV@Pnvt4Wrfcvq$r8hnP9br|S4 zJ7mR$SdT@DDj6?DL^VD7LG2Zk5vr8S8GQMt>3e(M`$A^_|2}OLP7>YS(jF%H0+9qP z@|*JKA*ALjK-fnu#;9HdA>(gMB 9T42r}PxxA*to7^Q!HQwiPzJBjET#1kl1zIsfaPOEFQoJD zInY<4)9TDVQvYFXtiU(PqcnLT+n}GN$HC`?NBUS>bSB(LP_Ml2)`xHdm%CLh6a8zU z=q)u~5epVhQe9x@^)8{|>V1sS{*68XFKewEW@Ken`;CkCLrE(p6}-$re}?dz0JgV; z9BxIT2HvyqAIyX0t#MmsnGHw+xC5OJnB)Ww^Lta8XsOfDkbQnY-T54URcy4ArnL8j z)>OKb?E6>Uh^tFhPztk^9|>qV(~el-P?KRHT4(aPwWi A0`}^vRZUZNT9aJX zioL^U`Uyqk;&%dDi|HiFQ<+X;*wWw;GFcGR2rMRfVFYTu-z6LekDc5=Z|u*|;T)xC zwW`wo5LVo#hT+kd1=%sUWUJ7x0F^GL17AWuT(%0>NQvztPuktXAyEA9794^MZ2Ect zb>8Js$d_yarW8H1zsm5sm}0U0^mGkDfJ-Y%YYERKWsss;wb4$$Os`pucNQ3*M8Dx1 zYtWAK?eKki3;2uhV>{bJiC=#(7__7Y|%uYeX4dhs>MMC?y)pdvD3!~joRd~5bViShCbI| zvcn}QJ!eA@i0|Z;Yw|{v@a^{$iVHk~Y7MEGyM|Ozt44NXm7Dz{sq4k+RN1c n} ze%}jPmCfv0u5zK!H3%xVRHN40e^z!xfj(7@e4IM5KbAXcm&rXv6OJJ`FBgsM$mA?< z=I@l}2~@58iLO&0UbCFfv`}`3`Hhk}W}kNe!7;m@+jz=d6;IQOC8OP-1t((hH%d+B z<{32_aIfQ!>R^3U8DRiud*A2PW~T`^;0L9X4IL(-WjFM>`N8|gX-i^;0&IbsK-5nJ zM^3PY(Q}M+G*|*-qvIdKGm3TNKD~S|{l+ZONA}howUbx?djJi`Z=v#>l@q4#gms%a zL2@J=u=7TI0ZWoGUv!~XCc^pC(BnUlZBOm^w}`a5ok)O|-#PGYNtaA0-4F)eQNVX8 z8BdnlOshjW3h!UNct%@LP>}e>HYSzK`T&`q`mDpj6pdwhtx*pg!{e*xSNa;wcIZ9N zRoWYs`ar(Lx*7vzot7^P956}MM0~^d5WjoOTUjaOn7R$(h>32_m|~-L&Q_v&fBxS1 z_WXfg#KRDwg7;FkoegDwa_nPp+% 6+HNy07CEmM^Th1NJK)+V zf@5?WQR46EW}<*a?nK2i;z(*SUf_7C_tuf!^;|UdNC6WqV3R;x=@P13qOwJkVv Q0KuDlc$H}az3`Cq_A$RFBFpEpJ~HTZN`=Mwm&A;z zh>Vl&*^-@6*Qt9d>$ldwQI 94>LI9WT2aZlqIuF#elTi6?iS#5H^0>w=Lzft; zcC3axpdWp-CM$%&Yl$1^9yyQC9&7!+(Oy>Dr)<$$qI}BW8)LWmhw$V-xVEi?1?ea& zUc~QQ*oJlc!jtoTIBf0sy 2*a~zUYLmL}m{+c7?40U}D#Umc9mN`#1HT+*?l^IlQf0yl{B9?L8!}NT zw;R!k79AU%O_!+|80R=XjY;|8cv1P5VtnO^>EvE#s)oz{Vx#zHq98V*w8reB+rQ&_ zh(WeLDZ_04^wKgNfLmrHB(W_rEUk!*)n||F?zvj&o2wQJ%w5F}XV<&+ZaxGer_6aX zCkh$f$)I18TYB-z3cm%ZmC_f4gB$Sfi{)X+u>w&Q6acp(bXK*PMDNTnDJu;luG;h2 zi1lR~_70?!v|##TgQRCTIz3n%Y|b5%2Jd{fXt=Hayw_w?FN#N51N-Z>v@7)N2~3Q% zs*Pch@R;c%@LHt6pA%Jf+*_gC(6=Z~+8)=>86>i5QCAivN*b9S?v7>%U<){HivjOE zRp5?C@K&J0sXT8)Mt@_f&H;1-mnf7&<2XN^q{tnweo|~kb=_?LZLEZ$U)PS3HX6 z=?u-i6%^UUSco>5ePn`8`*R^)PV@)ft^Sspcz;)_k$Lq4z3195xiYLphMrD*R&is! zF&Q;A+eCr|z~?cc3p2406?HDU?2+x}_$2j>{9W5bMSW+u44$HYQA@0zK*M|cuuoeq z51W&*bw;|o1D-O>xc7W6g(cJcFqt7sI PucNDqD64DC zboqB#@w~+m2>2`sq+zOU3eqSnSpVc}Z$T{3<}110>crc2?+mQ^R+D76n{Pf&7XETN zn|a9~Qn{9w-b*O6UK|TY?0G8Ca=uKbS75W^IT6K)FcZ~Ij7ixMy34{-I%-6+u223$ z*}uHjS%KWwWVtbzHiT>v2ETr{w*@&85Fz4g)7{$5S*ogNe~Do{`^ZW|ZAnQ-QFQS3 zHQ3WSU6Q^U4P{8IKR-PTe&fjRaRqJQGLbLxhq1kU5Hj$_Npy!vy=KLm#ZqIvitrqE zTfc69TKbZ$329FxGCM7Eh=N3JY`G~6Q-Ur`VwQ1IzD!}(__j<+JS^`c@c0Q9Mw6QT z%3>N^sMqYYakJ(JU&+9sx_=7{wx+&@W0n#WN9qUwuq^dQ^hw68_rbrNkypDr{v2Vp zD<`cmiGk4@T*g9bcR84aNQKtO!Mh_5{xo-#K6|FXU{d8#?3EIp+@d)qV!j*QBQUb0 zX(LtUJ?V};t&q*$-Z59XkxU%ldXdA@-MjtMB9(n=9MH=O(C7@^T871DL~3OIiaPKT zOZ3o0;Y+W(s7&g$bcH?;ktxo(TvPir9a5;_4UN=!8p28f_4}!o#45_=!~}<81{QLP zhFrXRm^y-y8@*>oKfpMS?pbWi(RLmu^faiu%E&RtB_!=%yXdNiupLvXU$C8$U~c(` zBS|vP@U><(tb=LD?73^{oyb4b7}B9^h*4#T`A`KsQ&2J=b>0Mgr`-0G$t_KqkSZ ICe2B=%b|V|`Pi{Sz*u5M~6?WS^-p&6MhQJiK{SE--yL%CU#^YP^r4hy*rdsQA zhuDM0{4+rhrI-TMuFsR>yE;}w>M`Nb)N@P$x(eIApF9s7bptk-#q{mKPD(mf>6~hv zk ^-w|vnK z(&t-Z8ygx0HQ7}#waUZsQbtMnWOOn{Y6Y6?L^J0JQaTc7FIEQVq~9j0!yrXZxGA!4 z3n|ww#2}4mxP6lm>E__plc7|DQ3vj)B{tqR@?zD}!7kFgv8?`}c^tvRwL;}F%JDwk zvbR?Nv*|+0Vsz$j{{$prqp2#v-(gpe`W8(15JBAy2}f*)lq)^QPBUGC4vf6nt6tyJ ziGIUKM!{*&S f^af@ThnoPfORdf`u|1zteF%e=-FufK6fx*H@F &+7=QIAY*INrH@Dy(`L2c_2BjE*W)p{t z>88bfvEL4;5GEb_kyO`gJ9S!>82mlMZ6}1Jv=kv~X=Ni;IpePI%EP;69M7@gOITzp zqZ{fhED0onF}V7Y)>saL8rLF4wzJ-{FiY$PzhnA}r ; bKQ5#PB_bYG*^BXxO-9l}2HE}A{4bCDhp_C6bZ3P*NKN>NQQ5`~V z7F%UpG|``*iIDdA*D_0gRCAkbmv$HHt;i_nJP&W@=f)bc^2e!lTdq;10hPx?NlHKe z^HeY9>j8Lj>OjT|Gp?$lecLg;ST3LJxR=aoM@@mxg4`n>;MwdhE!FG>=@wFR5+ezE zjVhC`?q6bG0GvrD5`5|X3TPrhN^cjvm)=Jq )LZfru?nZru`|}S|Wl!7 sNs^a=_>litPl@J%=LJjxtzAK;W>Rbkg z$1kyU?uU2>hJV5kYx&v6z->32e1&VLD8eD(mzYyLL5bsyf2*4y(_pfQebO_=18*DhgEjB&u0A2|Q@5id9xt)m(2X#xlNRlXM>M;)U zguldJg9=}`jE=*_4%GOpY?2^u!^H!-zp`)qAnx=dX$?b=m_lAdb<9lGl=wU>jDu<9 zbl6%Jkr7N@e)KAE0?EENxU3Wi?194|$P1ftSEC1Q{kRUbHMZCq7kwcPfj|H%-qs@-MfuFs%Je?*?-)WVUn&puXjBc zZzB3+z`;c>ia=9?u_moFJmY^fx%1^SoAX4 %V#H*=i{D_(RB4|FI%QnaREwU zB!baZYTin _5+hlX{4YrK}5JxAdY|^;cZ?ux&+LS1 zc9|7XYPHNl9S6o07-253Ho2*|(2OBagRA~^?JAjHpa8*vmm=qNmD#KJs zx<(LEPr%NaqH-2n2A5yQV{PBdZ{*YK^KI%Ya3WlcJUF)kp7EcyM?g83C!fryX`cO~ zTNV)ML+VatsW9N7q8prm6Dz;`kFt+|lF|goO&$@M!Ki)F`Mw$2>ds z_BOF(Q?%mz#cWcQGR!$9I{F^Hj_Ra8MA0}RLjj*Pe|#=zvfSJo$5YVm3D-PNv)Rfw z3y{EFOJ>WiEVNG*T`JT@-!mFC-yqoT*(BY|49I?=(BI$G5tL &s(jtb(UYwpcoZh-Q z`v!|u0;9s#00EV2Bgw(};lTwbU$d 7-|I-C?3)15AI{}IoT9d{e|qfduz10Fw`Cmh!>~06HkRMFm5M{A)wan z|0V;V{&T?eHU^y-&XyfOj@OrOV( @E+y@#AQ1S_A zjQ?`!8N*SL<<9dF^YZBNq*QI_5fG+e7@!!*<=_w6Q{yqz }t|8 zCbw7H%}z(X*%q3|GdAhtFZO$SW@nGqG{OSLqGk>{+%yAXg~|77*RH4Z8V)^*q-_t~ zKJwtQ^TF%?uD8Y&Q`+)6nJHLuwUA_s^G!)>v@vdAxb`QOy<%%5hkrU+a3yc&_JTq6 zDB|mE`_@=iwYU1q%Vxf ?4cqB1Ydwo;wc=0WIv|D@;~!qPx#-yIXq&t4B7;%q}@iYZw}s+D~r z`c3|b@8?9s^ubJBE}gJY*PKl#tB~LW`j3g-wGRUHd=LJPhzOq?dSyz(&t`He=;}9a z MyugesdFm4VmBj2um$#!T#U3!w`Gr0tU)7f78#5ae#A2s^Bu64gK(V!7V*Sn# zNMsRIFg-kHs%(=0 mEcMaue1 ^9a9U@kKpdA5*Q!+^l?q(g!O2X> zK|;~ FajZpg=4g EPOXizO l_F(1zeTv8$3Ok-iC^#KP4}0={DHOu*DFG+b%U~KAb=b@c+Vma;64bQ>Ir>+5T_Q zd8W}19hSLzW!1azX!y69SghF 6>xnIpcF2R6zuqmqkGeqK@QRT%S#Pbl5mQ|6$PuGQN!@6VmO1zP*u+o3 +v)+wVq<_9W(i!e7-P+~v x(1J^wDniMZ$ z_nGhH1Gf>tnK}OxS{W&Z6kdV41xC47L8nF|lS%w^+eW*~{kHa&6-mSD{V5*zQR0Dm zhp~W$x!orS RL&j9)y|)N z`C}L}7ZfZ%vhEh;Wn3! !Og;ce$- zcK&OkQwF>BX8>t%Qr=YGpxsL&AkFh)cM^aSmcY;6sw$L96!?+ztP^pXhQEb_TzJD{ z^@A}0SJ}m-jwl@XD WL4qZA$bzb_uD Ui_M{-K>+c}x2=zP`>o~h2d$#$ z#fqIVW?h&@gbv%VgB Ccw&Tsd Fg-$8sQ)AI+%G=N&aQ!i0r6B1T
1SI4DTS2!^8gJhfbUOiAnM%p)t8` zxu1Mswc}tbp m&aSj rcKf1me=IHA#uw>X#OM3Z=eFeQ>^-4Ey}vcl9vtZ0Wik!D1HS}f;RHOi zk5?~z;rOYF+%nUef)|X@2k$a!H5CnkwMOE!*Z{wF5OFPPjZwbiA4cK|NTsumm0B2> z2Ka6M5 LPm~-!!p10Te`?e511if2a z&%m@R_Sf6U3gm2bGLf>;Ghl9Bc5SpCN51SJ{zrUT75}j7stPq*l`O>~vEn0HkdH%q zM0B+J=Vw(_RhY)E(-p4g(?hRW*qu~xFvFojR3K5EAhhD=#qcwIX1+?tHcb3FzeN-O zLhPUBxYb|Gh{vKMHC?Do*Q8IFYBCV3dUZJ4M>(K{qm2)XR0;*<#Ch7*PHui3D$H$i zWtcP_t }3 zYyhz}VdiB$2q3YC*&rDZNaepA&+@*RY|-a-{;jkqc;(2rncY5{^k>|KfqXz6^NtzG zR1-oBHbrBwEd18Csvk-VQtnp=Fu7-J3ex^4I+ltm7MPO?AqvV4%?H3I`iO*%z8C$@ zy$Jj~NM&7DXz{QE%RV z5*C0FK9hUdegJWFRoi_6vn(_R%rqrMBA~!|R`CF_en9O{Nrrz0sC!E0J#Sm%2sFb} zFJ?a)GDML;3WV$}e9el4T3{q6r<0`g7FWW7=fD2 ^z{TQ3?u*i5VA;D- zP62<{;`Z+b5*j3_WxO-c9l2(LiA5n0PGDS24rd|71>)hr6`Ov`kIj4(QlW1^)cn%` z3nK~JHuwtFn0K89W=^ci&Xhk*(4BRoZ)Yn`RC9fA)%&czDB}3_p;gVvVOmFt4?2qj zV=U-P-+V#OS-0nUCPf}(*jG-vRK}^2goG3zG+sbM15k<-yR^5qE`yoTu3sp%=*HJeulKJIwGD;+2e=Bn%Gk)4Pq zJC_5AP0L$c&TBNlQC(a0<} _SaV=XI6r0$Z0{FgAxC zpY03XM$0Wqq94poe|=T##UyL5xyQ|lJMK2*U;xb+kmb){1qg01hT5_}!Fx!&r>~QI z4N>4F(10}e&j7uQ=^XJO1kE@qndqF~>3pRwI}=S4K^YMlMo_hwDZrTR;qoB=Gtp`D z9%&kfNoawjSu6eeH4?($P*cctV1~kEwad#AG6O5e!Y0?>hohjP_gYnbPp1%0*IBLd zKB8JB_bSaE^da!(sNwt%)erRDqi$QVt&D??>My{7AiBP$!45pRPy3!;$F&+IEpK-s zRVT$>m^H?UUF;hO2f%BdpvW5zrH$j?iUXw|7932lxj^24;*V1E74loxZ=^pQgK|)* z^iAC0Ti-!pwy&BPterAHsix527dQx*5z>sfYHJmh_{Fe!o+i@6AYB|W)K6H~`JeQ& z =^eHt(j7_1=4``S@dI6YTHx^nzv0Hl#%j*NJqFZcimB=8WgJ4U$Krr2 z3FGx0%$JS(2?YDP1!!SA1(v@=h@C^X)`9bZDv9+Y;XpQ+E7dm_(D&QAvi;|?Z_ho} zX&pU{d{T}qsb?^|I7F8rP c;1c#b&7H3wd`z2J2H&Mt}9@} z8fwuGu2fJpn7A2%tV$hl@DA5HMW1fB;tmP!XpnHE{tI;)-r{5C#4xukXi!2Wy3Wb% z4Afn5Lbsw@n`b5~$$cbZV-Lh8JCd>W|F&w|iyU{<`d4bLS2V<9^Y8Z}$@fsv+=SwS zNGg3jA!eBqFK%U^oQ}O_c0Q?g*}+0sun!JM8T;b5sgO6(_V 0Wyd$s(?^@$J4)19TO1nzdN4iHq=j+&joGaPi|uU+u{Un)2B- zLcTMqd03Khx04xf{M-)XZ$YiWfz2rQ_s>8HIe`@zM5uFkFj^Eni6CC1bcYZ?ND;Ij z@m;*=$M|>8_d#Ci?QseDfa;U8bbLOv6It3bwHZ8a`N{`Kfj=_|KH#x^J=y<#;IP8# zk#2YGp^9%{tfRta19Iulyr-UMMDaB^6oQ<`Id<=WE_?Re5HgO(#c1Tux*`w9Tmbn< z<+SZ%hJXJfx;Xv(93&Lm$*(~#sR4hxOwc1O^tY~pX!}GMkve@s{?ZN_xjC76+2O@6 z<;$_2lVat>G=W1pB`1y78nu~nQ2hAkDHq W0MFd20MK;J4AW@lDJJr6|L$G45o<^*G#W@(f|BtT(}OF z@zAw&w{)V HS6`;gooX3Fi`Zq+U@wOjG85ywYA+nT3pJw6( z)`2*0CQlmKl{66V*F8L|ew^?%0l4tv--#4f^28cmZ*=^iK|FSLl0=+eN91#}N6=?S z8FJ@?Oh}Kmb|IEkXs{muUd>ZQ_RZHXtelu8Axb;h%Xgp47h5X}aETE-{a%L_U_7 z`t)v~QcCsdU!OpajwXJ@V{8KS$K6+l@>^BaBM0~XUih5YTI8A+@ ?u_D#{3?G4F zLmY=Du-?S1#p?9`vy-2sAsb-?_R*(gx;Np1Mgfhkh*c?#JHo*4$rV?s0*DD`>MTEi zXdSj#n6GVp!vd2N#DivhMowZ1oX=(*|0&=MqQ730B0ILhJC`j|FY{SLO)weP1YRu! zVMG%ayi|4GvGuWbL^lY@=xoL(7^(HIkCPte_Lt5pGB3XqrP3Rk&RR{&_@MO?Fh!0W zCQLd~QL73>wD|buUkk8yGvUfm7Qqm8YEqEyAH>9BTUR(NEC1WC({g{^K;r2D8Ys#h zEO-^!R6r>!9e>M(N2y@q&}5|{bB#gV=y7hGj7Z)|sd&^dtcHUTpLmV}B9D?@%+IGi zt{OirugDhOqR%|M5rY01T4Tewgm3JNqpZ9`{>Iy^xarLT8pP{;FuD4