The similarity based knowledge distillation mehod to compress the 6-dof Pose Regressor model so that it can show high performance on 5W low-power environment
- LINUX
- Colab
- Python 3
- CPU : Intel Xeon CPU 2.3 GHHz(Dual-Core)
- GPU : Nvidia Tesla T4
- GPU memory : 8GB
git clone https://github.com/e-LENS/SCKD.git
cd SCKD
pip install -r requirements.txt
-
Outdoor dataset
Download King's College dataset under
datasets
folder -
Indoor dataset
Download 7 Scenes dataset under
datasets
folder
datasets/KingsCollege
datasets/Chess
datasets/Fire
datasets/Heads
datasets/Office
datasets/Pumpkin
datasets/RedKitchen
datasets/Stairs
- Compute the mean image for each dataset
python util/compute_image_mean.py --dataroot datasets/[Dataset_name] --height 256 --width 455 --save_resized_imgs
In 7 Scenes dataset, Position & Orientation is given in 4x4 matrix format.
PoseNet requires 7 dimension vector of position (X,Y,Z) & Orientation quaternion (W,P,Q,R)
Use posenet-pytorch/7scenes_preprocessing.py
to convert 4x4 matrix to 7 dim vector.
Train & Test the PoseNet model on each dataset
'resnet18im': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
'resnet34im': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
'resnet50im': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
'resnet101im': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
'resnet152im': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
!python train.py --model [resnet18 | resnet34 | resnet50 | resnet101] --dataroot [DATAROOT] --name [model]/[Dataset]/[beta500_ex] --beta 500 --gpu 0 --niter 500 --batchSize32 --lr 0.001
!python test.py --model [resnet18 | resnet34 | resnet50 | resnet101] --dataroot [DATAROOT] --name [model]/[Dataset]/[beta500_ex] --gpu 0
!python KD_train.py --model [resnet18 | resnet34 | resnet50 | resnet101] --dataroot [DATAROOT] --name [student model]/[Dataset]/[beta500_bt_lr_m#1_m#2_scaling] --beta 500 --gpu 0 --niter 500 --T_model [ resnet34 | resnet50 | resnet101] --T_path [TeacherModel_Path] --save_epoch_freq 5 --SCmodule [ 0 | 1 | 2 | 3 | 4 | 5 ] --hintmodule [ 0 | 1 | 2 | 3 | 4 | 5 ] [--SCKL]
SCmodule
과hintmodule
option layer는 list type 으로 선택가능
!python KD_test.py --model [resnet18 | resnet34 | resnet50 | resnet101] --dataroot [DATAROOT] --name [student model]/[Dataset]/[beta500_bt_lr_m#1_m#2_scaling] --beta 500 --gpu 0
- Train result is saved here ;
./checkpoints/[name]
- Test result is saved here ;
./results/[name]
** ResNet Model Size **
Backbone Models | ResNet50(Teacher) | ResNet34(Teacher) | ResNet18(Student) |
---|---|---|---|
Size(MB) | 102.45 | 87.27 | 46 |
Number of Parameter | 25,613,383 | 21,817,159 | 11,708,999 |
** Inference time at Jetson Nano 2GB developer kit **
Backbone Models | ResNet50(Teacher) | ResNet34(Teacher) | ResNet18(Student) |
---|---|---|---|
Median Inference Time (clock) | 125 | 90 | 50 |
** Comparision with other KD method for Regression problems **
Model | Shop Facade | Stairs |
---|---|---|
Vanilla KD | 8.25m / 9.17° | 0.39m / 13.08° |
M.U's KD | 1.45m / 7.58° | 0.39m / 15.27° |
Self-Similarity KD | 0.94m / 6.56° | 0.37m / 13.63° |
Ours | 0.93m / 5.96° | 0.33m / 13.02° |