.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "uwb/uwb_localization_tutorial.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_uwb_uwb_localization_tutorial.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_uwb_uwb_localization_tutorial.py:


Tutorial for UWB Localization
=======

.. GENERATED FROM PYTHON SOURCE LINES 5-15

.. code-block:: Python

    import torch
    import torch.nn as nn
    import os

    from pysensing.uwb.datasets.get_dataloader import *
    from pysensing.uwb.models.get_model import *
    from pysensing.uwb.training.localization import *
    from pysensing.uwb.inference.predict import *
    from pysensing.uwb.inference.embedding import *








.. GENERATED FROM PYTHON SOURCE LINES 16-36

Download Data from Cloud Storage
-----------------------------------

Open the following linke in your browser to download Localization datasets:

[Download Pedestrian_Tracking Dataset](https://pysensing.oss-ap-southeast-1.aliyuncs.com/data/uwb/Pedestrian_Tracking.zip) \
[...]()

Unzip the downloaded file and move to your data folder. For HAR, the data folder should look like this:
```
|---data 
|------|---localization 
|------|------|---Pedestrian_Tracking 
|------|------|------|---processed_data
|------|------|------|------|---AnchorPos.mat
|------|------|------|------|---Bg_CIR_VAR.mat
|------|------|------|------|---Dyn_CIR_VAR.mat
|------|------|------|---raw_data
......
```

.. GENERATED FROM PYTHON SOURCE LINES 38-52

Load the data
-----------------------------------
Human action recognition dataset: 

Human Tracking Dataset
- UWB size : n x 1 x 500 x 2

Dataset name choices are:
- 'pedestrian_tracking_mod1_CIR'
- 'pedestrian_tracking_mod2_CIR'
- 'pedestrian_tracking_mod3_CIR'
- 'pedestrian_tracking_mod1_Var'
- 'pedestrian_tracking_mod2_Var'
- 'pedestrian_tracking_mod3_Var'

.. GENERATED FROM PYTHON SOURCE LINES 52-62

.. code-block:: Python


    root = './data' 
    train_loader, val_loader, test_loader = load_localization_dataset(root, 'pedestrian_tracking_mod1_CIR')
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    for data in train_loader:
        x, y = data
        print(x.size())
        print(y.size())
        break





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Loading pedestrian tracking CIR dataset in mod 1...
    torch.Size([64, 1, 500, 2])
    torch.Size([64, 1])




.. GENERATED FROM PYTHON SOURCE LINES 63-67

Load the model
-----------------------------------
Model zoo:
ResNet

.. GENERATED FROM PYTHON SOURCE LINES 67-71

.. code-block:: Python


    model = load_localization_model(dataset_name = 'human_tracking', model_name = 'resnet')
    print(model)





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    human_tracking_resnet(
      (convblock1): Sequential(
        (0): Conv2d(1, 8, kernel_size=(10, 1), stride=(1, 1), padding=(4, 0))
        (1): BatchNorm2d(8, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (2): ReLU()
      )
      (maxpool1): MaxPool2d(kernel_size=(10, 1), stride=(5, 1), padding=0, dilation=1, ceil_mode=False)
      (convblock2): Sequential(
        (0): Conv2d(8, 16, kernel_size=(4, 2), stride=(1, 1), padding=(1, 0))
        (1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (2): ReLU()
      )
      (maxpool2): MaxPool2d(kernel_size=(2, 2), stride=(2, 2), padding=0, dilation=1, ceil_mode=False)
      (block1): Block(
        (conv1): Conv2d(16, 32, kernel_size=(4, 1), stride=(2, 1), padding=(1, 0), bias=False)
        (batch_norm1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (conv2): Conv2d(32, 32, kernel_size=(4, 1), stride=(1, 1), padding=(1, 0), bias=False)
        (batch_norm2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU()
        (res): Sequential(
          (0): Conv2d(16, 32, kernel_size=(1, 1), stride=(2, 1), bias=False)
          (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        )
      )
      (block2): Block(
        (conv1): Conv2d(32, 64, kernel_size=(4, 1), stride=(2, 1), padding=(1, 0), bias=False)
        (batch_norm1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (conv2): Conv2d(64, 64, kernel_size=(4, 1), stride=(1, 1), padding=(1, 0), bias=False)
        (batch_norm2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU()
        (res): Sequential(
          (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(2, 1), bias=False)
          (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        )
      )
      (block3): Block(
        (conv1): Conv2d(64, 128, kernel_size=(4, 1), stride=(2, 1), padding=(1, 0), bias=False)
        (batch_norm1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (conv2): Conv2d(128, 128, kernel_size=(4, 1), stride=(1, 1), padding=(1, 0), bias=False)
        (batch_norm2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU()
        (res): Sequential(
          (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 1), bias=False)
          (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        )
      )
      (maxpool3): MaxPool2d(kernel_size=(7, 1), stride=(7, 1), padding=0, dilation=1, ceil_mode=False)
      (fc): Sequential(
        (0): Linear(in_features=128, out_features=10, bias=True)
        (1): Linear(in_features=10, out_features=1, bias=True)
      )
    )




.. GENERATED FROM PYTHON SOURCE LINES 72-74

Model train
-----------------------------------

.. GENERATED FROM PYTHON SOURCE LINES 74-87

.. code-block:: Python


    criterion = nn.CrossEntropyLoss()
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

    localization_training(
        root = root,
        dataset_name='pedestrian_tracking_mod1_CIR',
        model_name='resnet',
        num_epochs=1,
        learning_rate=0.001,
        save_weights=True,
    )





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Loading pedestrian tracking CIR dataset in mod 1...
    Epoch:1,MAE Loss:26.150909321




.. GENERATED FROM PYTHON SOURCE LINES 88-90

Model inference
-----------------------------------

.. GENERATED FROM PYTHON SOURCE LINES 90-103

.. code-block:: Python


    localization_predictor = predictor(
        task='localization', 
        dataset_name='human_tracking', 
        model_name='resnet',
        pt_weights = './human_tracking_weights.pth'
    )
    for data in test_loader:
        x, y = data
        break
    outputs = localization_predictor.predict(x)
    print("output shape:", outputs.shape)





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Pretrained weights loaded.
    output shape: torch.Size([256, 1])




.. GENERATED FROM PYTHON SOURCE LINES 104-107

Generate embedding
-----------------------------------
- noted that the `model_name` variable defined in `load_model` function represents the model structure name, and in `load_pretrain_weights` function represents the model structure and pretrain dataset name.

.. GENERATED FROM PYTHON SOURCE LINES 107-114

.. code-block:: Python


    model = load_localization_model(dataset_name = 'human_tracking', model_name = 'resnet')
    model = load_pretrain_weights(model, dataset_name = 'human_tracking', model_name = 'CIR_model', device=device)
    uwb_embedding = localization_uwb_embedding(x, model, device)
    print('uwb_embedding shape: ', uwb_embedding.shape)






.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    uwb_embedding shape:  torch.Size([256, 128])





.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (0 minutes 28.170 seconds)


.. _sphx_glr_download_uwb_uwb_localization_tutorial.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: uwb_localization_tutorial.ipynb <uwb_localization_tutorial.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: uwb_localization_tutorial.py <uwb_localization_tutorial.py>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_