This is the official repository for our WACV 2025 paper, "A Multi-task Supervised Compression Model for Split Computing".
Split computing (/= split learning) is a promising approach to deep learning models for resource-constrained edge computing systems, where weak sensor (mobile) devices are wirelessly connected to stronger edge servers through channels with limited communication capacity. State-of-the-art work on split computing presents methods for single tasks such as image classification, object detection, or semantic segmentation. The application of existing methods to multi-task problems degrades model accuracy and/or significantly increase runtime latency. In this study, we propose Ladon, the first multi-task-head supervised compression model for multi-task split computing. Experimental results show that the multi-task supervised compression model either outperformed or rivaled strong lightweight baseline models in terms of predictive performance for ILSVRC 2012, COCO 2017, and PASCAL VOC 2012 datasets while learning compressed representations at its early layers. Furthermore, our models reduced end-to-end latency (by up to 95.4%) and energy consumption of mobile devices (by up to 88.2%) in multi-task split computing scenarios.
In multi-task split computing scenarios, it is critical to optimize learnable parameters of task-specific modules on a unified image processing pipeline instead of task-specific pipelines so that we can
- reduce encoding cost and energy consumption on a weak local device,
- save offloading data size by transferring only one compressed representation from the weak local device to a(n) cloud/edge server, and
- reduce end-to-end latency and local device energy consumption,
while outperforming or rivaling predictive performance of lightweight models.
Note that in split computing, models are trained offline (e.g., on a single machine) and the distributed inference like the above figure occurs only at runtime.
Refer to our previous work for supervised compression and SC2 benchmark (supervised compression for split computing)
[Preprint]
@article{matsubara2025multitask,
title={A Multi-task Supervised Compression Model for Split Computing},
author={Matsubara, Yoshitomo and Matteo, Mendula and Levorato, Marco},
journal={arXiv preprint arXiv:2501.01420},
year={2025}
}
You can download our checkpoints including trained model weights here.
Unzip the downloaded zip files under ./
, then there will be ./resource/ckpt/
.
This study was done prior to the release of sc2bench v0.1.0, which introduces a lot of breaking changes and updates the structure of configuration files.
To reuse the code and configurations at that time, check the files in ./legacy/.
If you want to use more recent versions of the required packages, refer to Updated code).
- Python >= 3.9
- sc2bench >= 0.1.0
- numpy
pipenv install
- Image classification: ILSVRC 2012 (ImageNet)
- Object detection: COCO 2017
- Semantic segmentation: PASCAL VOC 2012
Follow the instructions in my sc2-benchmark repository
Download our checkpoints including trained model weights here.
Unzip the downloaded zip files under ./
, then there will be ./resource/ckpt/
.
for beta in 0.32 1.28 5.12 10.24 20.48; do
python scripts/image_classification.py -test_only -student_only \
--config legacy/configs/ilsvrc2012/ladon/splittable_resnet50-fp-beta${beta}_from_resnet50.yaml \
--run_log logs/ilsvrc2012/ladon/splittable_resnet50-fp-beta${beta}_from_resnet50.txt
done
for beta in 0.32 1.28 5.12 10.24 20.48; do
python scripts/image_classification.py -test_only -student_only \
--config configs/ilsvrc2012/ladon/splittable_resnest269e-fp-beta${beta}_from_resnest269e.yaml \
--run_log logs/ilsvrc2012/ladon/splittable_resnest269e-fp-beta${beta}_from_resnest269e.txt
done
for beta in 0.32 1.28 5.12 10.24 20.48; do
python scripts/object_detection.py -test_only \
--config configs/coco2017/ladon/faster_rcnn_splittable_resnet50-fp-beta${beta}_fpn.yaml \
--run_log logs/coco2017/ladon/faster_rcnn_splittable_resnet50-fp-beta${beta}_fpn.txt
done
for beta in 0.32 1.28 5.12 10.24 20.48; do
python scripts/object_detection.py -test_only \
--config configs/coco2017/ladon/faster_rcnn_splittable_resnest269e-fp-beta${beta}_fpn.yaml \
--run_log logs/coco2017/ladon/faster_rcnn_splittable_resnest269e-fp-beta${beta}_fpn.txt
done
for beta in 0.32 1.28 5.12 10.24 20.48; do
python scripts/semantic_segmentation.py -test_only \
--config configs/pascal_voc2012/ladon/deeplabv3_splittable_resnet50-fp-beta${beta}_two_stages.yaml \
--run_log logs/pascal_voc2012/ladon/deeplabv3_splittable_resnet50-fp-beta${beta}_two_stages.txt
done
for beta in 0.32 1.28 5.12 10.24 20.48; do
python scripts/semantic_segmentation.py -test_only \
--config configs/pascal_voc2012/ladon/deeplabv3_splittable_resnest269e-fp-beta${beta}_two_stages.yaml \
--run_log logs/pascal_voc2012/ladon/deeplabv3_splittable_resnest269e-fp-beta${beta}_two_stages.txt
done
Use the same command as above but without -test_only
.