|
Download README.git.md from Octopus1/IMUDINO: direct link, hf CLI and curl.
- Browser
- Download file 3.2 kB
-
https://huggingface.co/Octopus1/IMUDINO/resolve/main/README.git.md
- Command line
-
hf download hf://Octopus1/IMUDINO/README.git.md
-
curl -L -o README.git.md https://huggingface.co/Octopus1/IMUDINO/resolve/main/README.git.md
3.2 kB
| # IMUDINO | |
| Official PyTorch release of the IMUDINO IMU encoder. The checkpoint `imudino.pt` | |
| contains only backbone weights. DINO/iBOT heads, the training mask token, and | |
| reconstruction code have been removed. | |
| ## Download the checkpoint | |
| The weights are hosted on Hugging Face: [Octopus1/IMUDINO](https://huggingface.co/Octopus1/IMUDINO). | |
| Download `imudino.pt` into this repository's root directory with either: | |
| ```bash | |
| # Option 1: huggingface-cli (pip install "huggingface_hub[cli]") | |
| huggingface-cli download Octopus1/IMUDINO imudino.pt --local-dir . | |
| # Option 2: plain download | |
| wget https://huggingface.co/Octopus1/IMUDINO/resolve/main/imudino.pt | |
| ``` | |
| Then follow the usage instructions below; the example scripts expect | |
| `imudino.pt` next to them by default. | |
| The backbone uses 16-sample patches, 12 transformer layers, 24 attention heads, | |
| 768-dimensional features, and 4 register tokens. It embeds all six sensor channels | |
| jointly and uses standard GELU MLPs. Frequency-aware positional encoding always | |
| uses the supplied sampling rates and a fixed 100 Hz reference. The factory retains | |
| its original name, `imuformer_huge_patch16`, for compatibility. | |
| The implementation lives in `imudino.py`; constructing `IMUFormer()` directly | |
| uses the same settings as the factory. | |
| Install PyTorch and timm in a Python 3.10+ environment: | |
| ```bash | |
| pip install -r requirements.txt | |
| python example_forward.py | |
| ``` | |
| Use `--device cuda` for a CUDA device or `--checkpoint /path/to/imudino.pt` for a | |
| different checkpoint location. The example loads weights strictly, switches to | |
| evaluation mode, and runs inference on a synthetic batch with padding. Tested | |
| with Python 3.12, PyTorch 2.15.0, and timm 1.0.30. | |
| To use the model in your own code: | |
| ```python | |
| import torch | |
| from model_factory import imuformer_huge_patch16 | |
| model = imuformer_huge_patch16() | |
| model.load_state_dict( | |
| torch.load("imudino.pt", map_location="cpu", weights_only=True), strict=True | |
| ) | |
| model.eval() | |
| with torch.inference_mode(): | |
| features = model({ | |
| "imu_data": torch.randn(2, 1024, 6), | |
| "freqs": torch.tensor([100.0, 200.0]), | |
| "masks": None, | |
| }) | |
| ``` | |
| Input `imu_data` has shape `[B, L, 6]`, with accelerometer XYZ followed by gyroscope | |
| XYZ. `L` must be a positive multiple of 16. `freqs` contains one positive sampling | |
| frequency in Hz per sequence. Use floating-point inputs on the same device as the | |
| model. The example generates synthetic data; it does not perform sensor | |
| calibration or normalization. | |
| The optional `masks` tensor has shape `[B, L]`: `True`/`1` means valid and | |
| `False`/`0` means padding. A patch is valid only when all 16 samples are valid. | |
| Omit `masks` or pass `None` for unpadded input. Padded patches remain in the output; | |
| exclude them when pooling or using patch features downstream. | |
| The output contains only the final transformer layer's tokens after layer normalization: | |
| | Key | Shape | Description | | |
| | --- | --- | --- | | |
| | `cls_token` | `[B, 768]` | Sequence representation | | |
| | `reg_tokens` | `[B, 4, 768]` | Register representations | | |
| | `patch_tokens` | `[B, L / 16, 768]` | Temporal patch representations | | |
| For the example batch, these shapes are `(2, 768)`, `(2, 4, 768)`, and `(2, 64, 768)`. | |