| --- |
| license: mit |
| --- |
| |
| # MobileNetV3 Backbone |
|
|
| A feature extractor based on [MobileNetV3](https://arxiv.org/abs/1905.02244), refactored from https://github.com/xiaolai-sqlai/mobilenetv3: **backbone only — the classification head is removed**, with unified naming. |
|
|
| ## Models |
|
|
| | Model | Variant | Output features | Weight file | |
| | --- | --- | --- | --- | |
| | `MobileNetV3` | small / large (auto) | 1280 | detected from checkpoint | |
| | `MobileNetV3_Small` | Small | 1280 | `mobilenetv3_small.safetensors` | |
| | `MobileNetV3_Large` | Large | 1280 | `mobilenetv3_large.safetensors` | |
|
|
| Input: `(B, 3, H, W)` images. Output: `(B, 1280)` feature vectors (migrated from ImageNet-pretrained weights). |
|
|
| ## Weight naming |
|
|
| The naming differences between the old and the new code are mapped automatically during migration: |
|
|
| | Old name | New name | |
| | --- | --- | |
| | `bn1/bn2/bn3` | `norm1/norm2/norm3` | |
| | `linear3` | `proj` | |
| | `Block.se.se.*` | `Block.se.features.*` | |
| | `linear4` (classification head) | removed | |
|
|
| ## Usage |
|
|
| ```python |
| from mobile_net import MobileNetV3_Small, MobileNetV3_Large |
| |
| fe = MobileNetV3_Large().load_pretrained('./mobilenetv3_large.safetensors') |
| fe.eval() |
| |
| fe.save_pretrained('./backbone.safetensors') |
| fe.save_pretrained('./backbone.pth') |
| |
| import torch |
| x = torch.randn(2, 3, 224, 224) |
| feat = fe(x) # (2, 1280) |
| ``` |
|
|
| ### Auto backend detection |
|
|
| `MobileNetV3.from_pretrained` inspects the checkpoint and picks Small / Large automatically: |
|
|
| ```python |
| from mobile_net import MobileNetV3 |
| |
| fe = MobileNetV3.from_pretrained('./mobilenetv3_large.safetensors') # -> Large, weights loaded |
| print(fe.backend) # 'large' |
| ``` |
|
|
| Calling it on a pinned class (`MobileNetV3_Large` / `MobileNetV3_Small`) raises if the checkpoint backend disagrees with the class. |
|
|