diff --git a/.hydra/config.yaml b/.hydra/config.yaml index 79ba5f6..0d041e9 100644 --- a/.hydra/config.yaml +++ b/.hydra/config.yaml @@ -4,7 +4,7 @@ tags: train: true test: false ckpt_path: null -seed: null +seed: 42069 datamodule: _target_: src.datamodules.kitti_datamodule.KITTIDataModule dataset_path: ${paths.data_dir} @@ -18,9 +18,10 @@ model: net: _target_: src.models.components.base.RegressorNet backbone: - _target_: torchvision.models.resnet18 + _target_: torchvision.models.mobilenet_v3_small pretrained: true bins: 2 + optimizer: adam lr: 0.001 momentum: 0.9 w: 0.4 @@ -58,34 +59,23 @@ callbacks: max_depth: -1 rich_progress_bar: _target_: pytorch_lightning.callbacks.RichProgressBar -logger: - wandb: - _target_: pytorch_lightning.loggers.wandb.WandbLogger - save_dir: ${paths.output_dir} - offline: false - id: null - anonymous: null - project: yolo3d-regressor - log_model: false - prefix: '' - group: '' - tags: [] - job_type: '' trainer: _target_: pytorch_lightning.Trainer default_root_dir: ${paths.output_dir} min_epochs: 1 - max_epochs: 25 + max_epochs: 10 accelerator: gpu devices: - 0 - - 1 - - 2 - - 3 deterministic: false - strategy: ddp num_nodes: 1 sync_batchnorm: true + limit_train_batches: 0.1 + limit_val_batches: 0.1 + gpus: + - 2 + - 3 + strategy: ddp paths: root_dir: ${oc.env:PROJECT_ROOT} data_dir: ${paths.root_dir}/data/KITTI @@ -96,3 +86,6 @@ extras: ignore_warnings: false enforce_tags: true print_config: true +logger: + project: resnet-yolo3d +name: tuning_hyp diff --git a/.hydra/hydra.yaml b/.hydra/hydra.yaml index 9e9403d..f6c55ac 100644 --- a/.hydra/hydra.yaml +++ b/.hydra/hydra.yaml @@ -120,16 +120,13 @@ hydra: hydra: - hydra.run.dir="/raid/didir/Repository/yolo3d-lightning" - hydra.job.name=train_ddp_process_1 - - hydra.run.dir="/raid/didir/Repository/yolo3d-lightning" - - hydra.job.name=train_ddp_process_2 - - hydra.run.dir="/raid/didir/Repository/yolo3d-lightning" - - hydra.job.name=train_ddp_process_3 - hydra.mode=RUN - task: [] + task: + - experiment=tuning job: - name: train_ddp_process_3 + name: train_ddp_process_1 chdir: null - override_dirname: '' + override_dirname: experiment=tuning id: ??? num: ??? config_name: train.yaml @@ -162,12 +159,12 @@ hydra: debug: null local: default.yaml hparams_search: null - experiment: null + experiment: tuning hydra: default.yaml extras: default.yaml paths: default.yaml trainer: dgx.yaml - logger: wandb.yaml + logger: null callbacks: default.yaml model: regressor.yaml datamodule: kitti_datamodule.yaml diff --git a/.hydra/overrides.yaml b/.hydra/overrides.yaml index fe51488..5d568b9 100644 --- a/.hydra/overrides.yaml +++ b/.hydra/overrides.yaml @@ -1 +1 @@ -[] +- experiment=tuning diff --git a/configs/experiment/tuning.yaml b/configs/experiment/tuning.yaml index 3151bbe..d1e3af8 100644 --- a/configs/experiment/tuning.yaml +++ b/configs/experiment/tuning.yaml @@ -7,7 +7,7 @@ defaults: - override /datamodule: kitti_datamodule.yaml - override /model: regressor.yaml - override /callbacks: default.yaml - - override /logger: wandb.yaml + - override /logger: null - override /trainer: dgx.yaml # all parameters below will be merged with parameters from default configurations set above @@ -21,7 +21,7 @@ trainer: limit_train_batches: 0.1 limit_val_batches: 0.1 gpus: [2, 3] - # strategy: ddp + strategy: ddp datamodule: train_sets: ${paths.data_dir}/train_80.txt diff --git a/configs/model/regressor.yaml b/configs/model/regressor.yaml index a90a446..50f4616 100644 --- a/configs/model/regressor.yaml +++ b/configs/model/regressor.yaml @@ -3,7 +3,7 @@ _target_: src.models.regressor.RegressorModel net: _target_: src.models.components.base.RegressorNet backbone: - _target_: torchvision.models.resnet18 # change model on this + _target_: torchvision.models.mobilenet_v3_small # change model on this pretrained: True bins: 2 diff --git a/configs/train.yaml b/configs/train.yaml index 7d40bcb..d4d76a9 100644 --- a/configs/train.yaml +++ b/configs/train.yaml @@ -7,7 +7,7 @@ defaults: - datamodule: kitti_datamodule.yaml - model: regressor.yaml - callbacks: default.yaml - - logger: wandb.yaml # set logger here or use command line (e.g. `python train.py logger=tensorboard`) + - logger: null # set logger here or use command line (e.g. `python train.py logger=tensorboard`) - trainer: dgx.yaml - paths: default.yaml - extras: default.yaml diff --git a/configs/trainer/dgx.yaml b/configs/trainer/dgx.yaml index c714c0c..2493615 100644 --- a/configs/trainer/dgx.yaml +++ b/configs/trainer/dgx.yaml @@ -1,9 +1,9 @@ defaults: - default.yaml -strategy: ddp +# strategy: ddp accelerator: gpu -devices: [0,1,2,3] +devices: [0] num_nodes: 1 sync_batchnorm: True \ No newline at end of file diff --git a/notebooks/sample.ipynb b/notebooks/sample.ipynb deleted file mode 100644 index d0efe3d..0000000 --- a/notebooks/sample.ipynb +++ /dev/null @@ -1,198 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4.710796326794897\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "alpha = 3.14\n", - "\n", - "new_alpha = float(alpha) + np.pi / 2.0\n", - "if new_alpha < 0:\n", - " new_alpha = new_alpha + 2.0 * np.pi\n", - " # make sure angle lies in [0, 2pi]\n", - "new_alpha = new_alpha - int(new_alpha / (2.0 * np.pi)) * (2.0 * np.pi)\n", - "\n", - "print(new_alpha)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "6.281592653589794\n" - ] - } - ], - "source": [ - "angle = 3.14\n", - "\n", - "# convert angle to [0, 2pi] from [-pi, pi]\n", - "angle = angle + np.pi\n", - "\n", - "print(angle)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# bins index\n", - "\n", - "bin_idxs = get_bin(angle)\n", - "\n", - "for bin_idx in bin_idxs:\n", - " angle_diff = angle - angle_bins[bin_idx]\n", - "\n", - " Orientation[bin_idx, :] = np.array([np.cos(angle_diff), np.sin(angle_diff)])\n", - " Confidence[bin_idx] = 1" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1]\n" - ] - } - ], - "source": [ - "def get_bin(angle, bin_ranges):\n", - "\n", - " bin_idxs = []\n", - "\n", - " def is_between(min, max, angle):\n", - " max = (max - min) if (max - min) > 0 else (max - min) + 2 * np.pi\n", - " angle = (angle - min) if (angle - min) > 0 else (angle - min) + 2 * np.pi\n", - " return angle < max\n", - "\n", - " for bin_idx, bin_range in enumerate(bin_ranges):\n", - " if is_between(bin_range[0], bin_range[1], angle):\n", - " bin_idxs.append(bin_idx)\n", - "\n", - " return bin_idxs\n", - "\n", - "bins = 2\n", - "interval = 2 * np.pi / bins\n", - "overlap = 0.1\n", - "bin_ranges = []\n", - "for i in range(0, bins):\n", - " bin_ranges.append(\n", - " (\n", - " (i * interval - overlap) % (2 * np.pi),\n", - " (i * interval + interval + overlap) % (2 * np.pi),\n", - " )\n", - " )\n", - "\n", - "angle = 3.40\n", - "\n", - "bins_idxs = get_bin(angle, bin_ranges)\n", - "print(bins_idxs)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1.57079633 4.71238898]\n" - ] - } - ], - "source": [ - "def generate_bins(bins):\n", - " angle_bins = np.zeros(bins)\n", - " interval = 2 * np.pi / bins\n", - " for i in range(1, bins):\n", - " angle_bins[i] = i * interval\n", - " angle_bins += interval / 2 # center of bins\n", - "\n", - " return angle_bins\n", - "\n", - "a = generate_bins(2)\n", - "print(a)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.5707963267948966" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(2*np.pi - np.pi)/2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.8.13", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.13" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "1cb2150678cc1785ad2fd1c144ed3540d41d0f38f36f5c06ddb71aec6f109d2f" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/src/models/components/base.py b/src/models/components/base.py index e361f3c..d3d71b2 100644 --- a/src/models/components/base.py +++ b/src/models/components/base.py @@ -70,8 +70,10 @@ def _get_in_features(self, net: nn.Module): # TODO: add more models in_features = { - 'resnet': (lambda: net.fc.in_features * 7 * 7), - 'vgg': (lambda: net.classifier[0].in_features) + 'resnet': (lambda: net.fc.in_features * 7 * 7), # 512 * 7 * 7 = 25088 + 'vgg': (lambda: net.classifier[0].in_features), # 512 * 7 * 7 = 25088 + # 'mobilenetv3_large': (lambda: (net.classifier[0].in_features) * 7 * 7), # 960 * 7 * 7 = 47040 + 'mobilenetv3': (lambda: (net.classifier[0].in_features) * 7 * 7), # 576 * 7 * 7 = 28416 } return in_features[(net.__class__.__name__).lower()]()