-
Clone this repo
-
Unzip
data.tar.gz
file to<root_project>/data
folder. -
Create config.json file (as example you can be use
<project_root>/configs/example.config.json
)
- Copy entrypoint.d to
<project_root>/docker/source
- Copy NGC-DL-CONTAINER-LICENSE to
<project_root>/docker/source
- Copy nvidia_entrypoint.sh to
<project_root>/docker/source
- (Optional) Enable
docker
Buildkit - Run from
project_root
directory
docker build -f ./docker/ighting.Dockerfile --build-arg REQUIREMENTS_FILE=cu_12_2.txt . -t daniinxorchenabo/emotions-classify-env:lighting-cu122-latest
docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -p 0.0.0.0:8888:8888 -p 0.0.0.0:6006:6006 -it -v .:/workspace/NN daniinxorchenabo/emotions-classify-env:lighting-cu122-latest ./docker/before_learn.sh train.py train --config-file ./configs/test.config.json
docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -it -v .:/workspace/NN daniinxorchenabo/emotions-classify-env:lighting-cu122-latest python train.py train --config-file ./configs/config.json
import json
from data_controller.load_data import load_data
from train.lighting_model import LitModule
from train.train_func import dataset_choice
with open(CONFIG_FILENAME.json, "w") as f:
config = json.load(f)
train, validation, dataset = load_data(
bath_size=config['learn_params']["batch_size"],
num_workers=config["load_dataset_workers_num"],
dataset_class=dataset_choice(config),
padding_sec=config['learn_params'].get('padding_sec', 0),
spectrogram_size=config['learn_params'].get('spectrogram_size', 0),
)
model = LitModule.load_from_checkpoint(
CHECKPOINT_FILENAME.ckpt,
emotions_count=len(dataset.emotions),
states_count=len(dataset.states),
dataset=dataset,
config=config
)
model.eval()
y_preds = [(model(i['array'].to('cuda:0')), i['emotion'], i['state']) for i in validation]
res_emotion_acc = [model.acc(i[0][0], i[1]) for i in y_preds]
res_state_acc = [model.st_acc(i[0][1], i[2]) for i in y_preds]
print(res_emotion_acc, res_state_acc)
Пример конфига для обучения модели
{
"pipeline": [
{
"type": "train",
"model": "Wav2Vec2FnClassifier",
"model_architecture": {
"conv_h_count": 1,
"conv_w_count": 1,
"layer_1_size": 32,
"layer_2_size": 32
},
"learn_params": {
"lr": {
"base_lr": 0.0007505403591860749,
"conv_lr": 0.0007505403591860749
},
"batch_size": 8,
"padding_sec": 5,
"max_epoch": 10
},
"saving_data_params": {
"saved_checkpoints_path": [
"$$ROOT_DIR$$",
"weights",
"checkpoints",
"$$MODEL_NAME$$",
"$$DATETIME$$"
],
"saved_checkpoints_filename": [
"classifier_",
"$$DATETIME$$",
"_{epoch:02d}"
],
"tensorboard_lr_monitors_logs_path": [
"$$ROOT_DIR$$",
"logs"
],
"start_from_saved_checkpoint_path": null
}
}
],
"load_dataset_workers_num": 1
}
Пример конфига для тюнинга моделей
{
"pipeline": [
{
"type": "tune",
"model": "TransformerClassifier",
"model_architecture": {
"layer_1_size": null,
"layer_2_size": null,
"patch_transformer_size": null,
"transformer_depth": null,
"transformer_attantion_head_count": null
},
"learn_params": {
"lr": {
"base_lr": null
},
"batch_size": null,
"spectrogram_size": 512,
"max_epoch": 200
},
"saving_data_params": {
"saved_checkpoints_path": [
"$$ROOT_DIR$$",
"weights",
"checkpoints",
"$$DATETIME$$"
],
"saved_checkpoints_filename": [
"classifier_",
"$$DATETIME$$",
"_{epoch:02d}"
],
"tensorboard_lr_monitors_logs_path": [
"$$ROOT_DIR$$",
"logs"
],
"tune_results_path": [
"$$ROOT_DIR$$",
"tmp",
"tune"
],
"tune_results_dir": [
"tune_",
"$$DATETIME$$"
],
"tune_session_path": [
"$$ROOT_DIR$$",
"tmp",
"ray",
"session"
]
},
"tune": {
"enable_tune_features": false,
"max_tune_epochs": 20,
"num_samples": 100
}
}
],
"load_dataset_workers_num": 1
}
Установка значения null
помечает параметр для тюнинга. В противном случае (в случае установки конкретного значения) тюнинг по этому параметру произодиться не будет
Пример конфига для вывода результатов тюнинга.
{
"pipeline": [
{
"type": "print_tune_res",
"res_path": [
"$$ROOT_DIR$$",
"tmp",
"tune",
"tune_20240425-101338"
]
}
],
"load_dataset_workers_num": 1
}
-
pipeline
.type
- тип действия. Возможные значения:train
- Запустить обучение модели с заданной конфигурациейtune
- Запустить тюнинг для заданной моделиprint_tune_res
- Напечатать результаты тюнинга
-
pipeline
.model
- Тип нейросетевой архитектуры. Используется только дляpipeline
.type
=train
иpipeline
.type
=tune
. Принимает следующие значения:Wav2Vec2FnClassifier
- Использование полносвязной архитектуры, с фича-экстрактором на базеWav2Vec
Wav2Vec2CnnClassifier
- Использование моделиefficientnet
для обработки ембединговWav2Vec
SpectrogramCnnClassifier
- Использование моделиefficientnet
для обработки спектрограммTransformerClassifier
- Использование моделиVisionTransformer
для обработки спектрограмм
-
pipeline
.learn_params
- Набор параметров, использующихся для обучения. Применяется вpipeline
.type
=train
иpipeline
.type
=tune
-
pipeline
.learn_params
.lr
.base_lr
- Основнойlearning rate
для обучения модели. -
pipeline
.learn_params
.lr
.conv_lr
- Отдельныйlearning rate
для обученияconv
слоёв. Применяется для обученияpipeline
.model
=Wav2Vec2FnClassifier
-
pipeline
.learn_params
.batch_size
- Размер батча для обучения нейронной сети -
pipeline
.learn_params
.max_epoch
- Максимальное количество эпох для обучения. Имеет смысл только приpipeline
.type
=train
-
pipeline
.learn_params
.padding_sec
- Количество секунд, по которому обрезаются данные из обучающей выборки. Используется только в нейросетевых моделях, основанных наWav2Vec
подходе, таких какpipeline
.model
=Wav2Vec2FnClassifier
иpipeline
.model
=Wav2Vec2CnnClassifier
-
pipeline
.learn_params
.spectrogram_size
- Размер спектограммы в пикселях. Используется только в нейросетевых моделях, основанных на спектограммах, таких какpipeline
.model
=SpectrogramCnnClassifier
иpipeline
.model
=TransformerClassifier
-
pipeline
.saving_data_params
- Пути для сохранения конфигов, логов и так далее. Используется только вpipeline
.type
=train
иpipeline
.type
=tune
. -
pipeline
.saving_data_params
.saved_checkpoints_path
- Путь для сохранения весов нейросетей. Имеет значение только дляpipeline
.type
=train
. Значение является массивом из названий папок. -
pipeline
.saving_data_params
.saved_checkpoints_filename
- Шаблон имени файла весов нейросетей. Имеет значение только дляpipeline
.type
=train
. Значение явялется массивом, который конкатенируется в строку. -
pipeline
.saving_data_params
.start_from_saved_checkpoint_path
- Путь, по которому расположены сохранённые веса, для того, чтобы продолжить обучение именно с них.- Если установленно
null
, то обучение будет производиться с начсала. - Если значение - массив из названий папок, то обучение будет происходить с чекпоинта, указанного в этом массиве.
- Если установленно
-
pipeline
.saving_data_params
.tune_results_path
- Путь, по которому будут сохраняться результаты тюнинга. Имеет смысл только приpipeline
.type
=tune
. Значение является массивом из названий папок. -
pipeline
.saving_data_params
.tune_results_dir
- Формат названия папки, в которой будут храниться результаты тюнинга. Имеет смысл только приpipeline
.type
=tune
. Значение явялется массивом, который конкатенируется в строку. -
pipeline
.saving_data_params
.tune_session_path
- Путь, по которому будут сохраняться файлы сессий тюнинга. Имеет смысл только приpipeline
.type
=tune
. Значение является массивом из названий папок. -
pipeline
.saving_data_params
.tensorboard_lr_monitors_logs_path
- Путь для сохранения логов обучения, которые визуализируются при помощиtensorboard
. Значение является массивом из названий папок. -
pipeline
.saving_data_params
.tensorboard_lr_monitors_logs_name
- Имя папки, в которую будет сохранён лог. Значение явялется массивом, который конкатенируется в строку. -
pipeline
.saving_data_params
.tensorboard_lr_monitors_logs_version
- Шаблон для имени каждого лога. Массив строк, который конкатенируется в название папки, илиnull
.- при
pipeline
.type
=train
массив строк илиnull
. - при
pipeline
.type
=tune
строгоnull
. Установка другого значения приведёт к некорректному отображению логов
- при
-
pipeline
.saving_data_params
.tensorboard_lr_monitors_logs_sub_dir
- Поддиректория для логов. Массив строк, который конкатенируется в название папки, илиnull
.- Механизм работы не проверен, лучше не трогайте и оставьте
null
- Путь к файлу с логом формируется как
tensorboard_lr_monitors_logs_path
/tensorboard_lr_monitors_logs_name
/tensorboard_lr_monitors_logs_version
/tensorboard_lr_monitors_logs_sub_dir
/log file
- Или (если
tensorboard_lr_monitors_logs_sub_dir
=null
)tensorboard_lr_monitors_logs_path
/tensorboard_lr_monitors_logs_name
/tensorboard_lr_monitors_logs_version
/log file
- Механизм работы не проверен, лучше не трогайте и оставьте
-
pipeline
.tune
- Специфичные параметры для тюнинга. -
pipeline
.tune
.enable_tune_features
- Включить оптимизацииray
для тюнинга моделейtrue
- включитьfalse
- выключить
-
pipeline
.tune
.max_tune_epochs
- Максимальное количество эпох для тюнинга одной конфигурации -
pipeline
.tune
.num_samples
- Количество моделей, среди которых будет производиться тюнинг -
pipeline
.tune
.checkpoints_save_threshold
- Порог целево метрики, ниже которого веса при тюнинге не буду сохранены -
pipeline
.tune
.target_metric_name
- Название метрики в логгере, по которой будет производиться тюнинг- Вероятно, вы хотите использовать
val/em_acc
илиval/st_acc
- Вероятно, вы хотите использовать
-
load_dataset_workers_num
- Количество процессов для загрузки данных
Параметры, отвечающие за архитектуру нейронной сети.
pipeline
.model
=Wav2Vec2FnClassifier
pipeline
.model_architecture
.conv_h_count
- Количество1d
свёрток по высоте эмбелинговWav2Vec
pipeline
.model_architecture
.conv_w_count
- Количество1d
свёрток по линии времени эмбелинговWav2Vec
pipeline
.model_architecture
.layer_1_size
- Количество нейронов на первом слое классификатораpipeline
.model_architecture
.layer_2_size
- Количество нейронов на втором слое классификатора
pipeline
.model
=Wav2Vec2CnnClassifier
- Не имеет настраиваемых параметров
pipeline
.model
=SpectrogramCnnClassifier
- Не имеет настраиваемых параметров
pipeline
.model
=TransformerClassifier
pipeline
.model_architecture
.layer_1_size
- Последнее измерение выходного тензора после линейного преобразованияpipeline
.model_architecture
.layer_2_size
- Размер слоя MLP (FeedForward)pipeline
.model_architecture
.patch_transformer_size
- Размер патчей (patch_size). значение image_size (hfpvth входной спектограммы) должно быть кратно значению patch_size. Количество патчей: n = (image_size // patch_size) ** 2 и n должно быть больше 16.pipeline
.model_architecture
.transformer_depth
- Количество блоков трансформера.pipeline
.model_architecture
.transformer_attantion_head_count
- Количество параллельных слоёв внимания в одном блоке трансформера.