**Changes:**
- Add training section to setup.py with `tensorboardX` package
- Add `get_filename_from_headers` method to `supervisely._utils`
- Add `ExperimentSelector` widget
- Add `is_collapsed` method to `Card` widget
- Add `set_dataset_ids` method to `ClassesTable` widget
- Fix empty table message for `PretrainedModelsSelector` and `CustomModelsSelector` widgets
- Add `set_by_model_name` and `get_by_model_name` methods to `PretrainedModelsSelector` widget
- Add `set_train_split_percent`, `get_train_split_percent`, `set_val_split_percent` and `get_val_split_percent` methods to `RandomSplitsTable` widget
- Project type can now be set by string in `SelectDatasetTree` widget
- Add nested datasets support to `TrainValSplits` widgets
- Add `set_split_method`, `get_split_method`, `set_random_splits`, `get_train_split_percent`, `get_val_split_percent`, `set_tags_splits`, `get_train_tag`, `get_val_tag`, `set_datasets_splits`, `get_train_dataset_ids`, `get_val_dataset_ids` and `get_untagged_action` methods to `TrainValSplits` widget
- Fix error in `TreeSelect` widget
- Add `get_available_task_types` method to `BaseTrainArtifacts` class
- Add `available_task_types` attribute to Train Artifact classes
- Add `ExperimentInfo` class and `get_experiment_infos` function to `supervisely.nn.experiments`
- Refactor `ServingGUI` and add `ServingGUITemplate` class
- Update `Inference` class to work with new `ServingGUITemplate` class
- Add `BaseTrainLogger` and `TensorboardLogger` classes
- Add `TrainApp` and `TrainGUI` classes