{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/mutualnet-adaptive-convnet-via-mutual","title":"MutualNet: Adaptive ConvNet via Mutual Learning from Different Model Configurations","arxiv_id":"2105.07085","date":"2021-05-14","proceeding":null,"authors":["Taojiannan Yang","Sijie Zhu","Matias Mendieta","Pu Wang","Ravikumar Balakrishnan","Minwoo Lee","Tao Han","Mubarak Shah","Chen Chen"],"abstract":"Most existing deep neural networks are static, which means they can only do inference at a fixed complexity. But the resource budget can vary substantially across different devices. Even on a single device, the affordable budget can change with different scenarios, and repeatedly training networks for each required budget would be incredibly expensive. Therefore, in this work, we propose a general method called MutualNet to train a single network that can run at a diverse set of resource constraints. Our method trains a cohort of model configurations with various network widths and input resolutions. This mutual learning scheme not only allows the model to run at different width-resolution configurations but also transfers the unique knowledge among these configurations, helping the model to learn stronger representations overall. MutualNet is a general training methodology that can be applied to various network structures (e.g., 2D networks: MobileNets, ResNet, 3D networks: SlowFast, X3D) and various tasks (e.g., image classification, object detection, segmentation, and action recognition), and is demonstrated to achieve consistent improvements on a variety of datasets. Since we only train the model once, it also greatly reduces the training cost compared to independently training several models. Surprisingly, MutualNet can also be used to significantly boost the performance of a single network, if dynamic resource constraint is not a concern. In summary, MutualNet is a unified method for both static and adaptive, 2D and 3D networks. Codes and pre-trained models are available at \\url{https://github.com/taoyang1122/MutualNet}.","url_abs":"https://arxiv.org/abs/2105.07085v2","url_pdf":"https://arxiv.org/pdf/2105.07085v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"mutualnet-adaptive-convnet-via-mutual","repo_url":"https://github.com/taoyang1122/MutualNet","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"action-recognition-in-videos","task_name":"Action Recognition"},{"task_slug":"image-classification","task_name":"Image Classification"},{"task_slug":"object-detection","task_name":"Object Detection"},{"task_slug":"image-classification","task_name":"image-classification"},{"task_slug":"object-detection-1","task_name":"object-detection"}],"methods":[{"method_slug":"1x1-convolution","method_name":"1x1 Convolution"},{"method_slug":"average-pooling","method_name":"Average Pooling"},{"method_slug":"batch-normalization","method_name":"Batch Normalization"},{"method_slug":"bottleneck-residual-block","method_name":"Bottleneck Residual Block"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"global-average-pooling","method_name":"Global Average Pooling"},{"method_slug":"kaiming-initialization","method_name":"Kaiming Initialization"},{"method_slug":"max-pooling","method_name":"Max Pooling"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"residual-block","method_name":"Residual Block"},{"method_slug":"residual-connection","method_name":"Residual Connection"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2105.07085","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2105.07085"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/taoyang1122/MutualNet","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":3,"ran_honours":1,"unverified":3},"by_repo_kind":{"official":{"samples":7,"ran":4,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"32f1f27f7d19f6ad","entry":"conv_module_name_filter","repo":"taoyang1122/MutualNet","repo_kind":"official","path":"utils/model_profiling.py","file_url":"https://github.com/taoyang1122/MutualNet/blob/HEAD/utils/model_profiling.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"32f1f27f7d19f6ad"}},{"code_sha256_prefix":"e2db4aa1fd031021","entry":"get_params","repo":"taoyang1122/MutualNet","repo_kind":"official","path":"utils/model_profiling.py","file_url":"https://github.com/taoyang1122/MutualNet/blob/HEAD/utils/model_profiling.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e2db4aa1fd031021"}},{"code_sha256_prefix":"3356d3566f053dcc","entry":"make_divisible","repo":"taoyang1122/MutualNet","repo_kind":"official","path":"models/slimmable_ops.py","file_url":"https://github.com/taoyang1122/MutualNet/blob/HEAD/models/slimmable_ops.py","link_basis":"plan_row","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3356d3566f053dcc"}},{"code_sha256_prefix":"6149e2d484175e99","entry":"run_forward","repo":"taoyang1122/MutualNet","repo_kind":"official","path":"utils/model_profiling.py","file_url":"https://github.com/taoyang1122/MutualNet/blob/HEAD/utils/model_profiling.py","link_basis":"plan_row","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6149e2d484175e99"}},{"code_sha256_prefix":"9da92d862a6c3325","entry":"ComputeBN","repo":"taoyang1122/MutualNet","repo_kind":"official","path":"ComputePostBN.py","file_url":"https://github.com/taoyang1122/MutualNet/blob/HEAD/ComputePostBN.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9da92d862a6c3325"}},{"code_sha256_prefix":"2e315531666ca1ad","entry":"flush_scalar_meters","repo":"taoyang1122/MutualNet","repo_kind":"official","path":"utils/meters.py","file_url":"https://github.com/taoyang1122/MutualNet/blob/HEAD/utils/meters.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2e315531666ca1ad"}},{"code_sha256_prefix":"84a10f5778846b16","entry":"get_logger","repo":"taoyang1122/MutualNet","repo_kind":"official","path":"utils/setlogger.py","file_url":"https://github.com/taoyang1122/MutualNet/blob/HEAD/utils/setlogger.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"84a10f5778846b16"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}