{"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/a-multigrid-method-for-efficiently-training","title":"A Multigrid Method for Efficiently Training Video Models","arxiv_id":"1912.00998","date":"2019-12-02","proceeding":"CVPR 2020 6","authors":["Chao-yuan Wu","Ross Girshick","Kaiming He","Christoph Feichtenhofer","Philipp Krähenbühl"],"abstract":"Training competitive deep video models is an order of magnitude slower than training their counterpart image models. Slow training causes long research cycles, which hinders progress in video understanding research. Following standard practice for training image models, video model training assumes a fixed mini-batch shape: a specific number of clips, frames, and spatial size. However, what is the optimal shape? High resolution models perform well, but train slowly. Low resolution models train faster, but they are inaccurate. Inspired by multigrid methods in numerical optimization, we propose to use variable mini-batch shapes with different spatial-temporal resolutions that are varied according to a schedule. The different shapes arise from resampling the training data on multiple sampling grids. Training is accelerated by scaling up the mini-batch size and learning rate when shrinking the other dimensions. We empirically demonstrate a general and robust grid schedule that yields a significant out-of-the-box training speedup without a loss in accuracy for different models (I3D, non-local, SlowFast), datasets (Kinetics, Something-Something, Charades), and training settings (with and without pre-training, 128 GPUs or 1 GPU). As an illustrative example, the proposed multigrid method trains a ResNet-50 SlowFast network 4.5x faster (wall-clock time, same hardware) while also improving accuracy (+0.8% absolute) on Kinetics-400 compared to the baseline training method. Code is available online.","url_abs":"https://arxiv.org/abs/1912.00998v2","url_pdf":"https://arxiv.org/pdf/1912.00998v2.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":"a-multigrid-method-for-efficiently-training","repo_url":"https://github.com/facebookresearch/SlowFast","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"a-multigrid-method-for-efficiently-training","repo_url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"a-multigrid-method-for-efficiently-training","repo_url":"https://github.com/kkahatapitiya/X3D-Multigrid","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"action-detection","task_name":"Action Detection"},{"task_slug":"action-recognition-in-videos","task_name":"Action Recognition"},{"task_slug":null,"task_name":"GPU"},{"task_slug":"video-classification","task_name":"Video Classification"},{"task_slug":"video-understanding","task_name":"Video Understanding"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/action-recognition-in-videos-on-something","task":"Action Recognition","dataset":"Something-Something V2","model":"Multigrid","rank_in_archive_order":107,"of":123,"metrics":{"Top-1 Accuracy":"61.7"},"uses_additional_data":true},{"leaderboard":"/sota/video-classification-on-charades","task":"Video Classification","dataset":"Charades","model":"Multigrid","rank_in_archive_order":1,"of":1,"metrics":{"mAP":"38.2"},"uses_additional_data":false},{"leaderboard":"/sota/video-classification-on-kinetics","task":"Video Classification","dataset":"Kinetics","model":"Multigrid","rank_in_archive_order":1,"of":1,"metrics":{"Top-1":"77.6"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1912.00998","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1912.00998"}},"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/facebookresearch/SlowFast","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/kkahatapitiya/X3D-Multigrid","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_draft_wrong":1,"ran_honours":1,"unverified":8},"by_repo_kind":{"listed":{"samples":7,"ran":0,"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":3,"samples":[{"code_sha256_prefix":"0a3fae1570b6c8c7","entry":"conv1x1x1","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"0a3fae1570b6c8c7"}},{"code_sha256_prefix":"acfa08610335818d","entry":"get_inplanes","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"acfa08610335818d"}},{"code_sha256_prefix":"be3c993685952552","entry":"autofill","repo":"alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","repo_kind":"listed","path":"train_kinetics.py","file_url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates/blob/HEAD/train_kinetics.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":"be3c993685952552"}},{"code_sha256_prefix":"8062365931ddd386","entry":"autofill","repo":"alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","repo_kind":"listed","path":"train_diving48.py","file_url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates/blob/HEAD/train_diving48.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":"8062365931ddd386"}},{"code_sha256_prefix":"624693b57e7dcd4a","entry":"conv3x3x3","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"624693b57e7dcd4a"}},{"code_sha256_prefix":"dd0b6b6788c4a14f","entry":"soft_nnc","repo":"alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","repo_kind":"listed","path":"network/MTnet.py","file_url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates/blob/HEAD/network/MTnet.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":"dd0b6b6788c4a14f"}},{"code_sha256_prefix":"0cab0d5b1c28cbc8","entry":"srtg_wide_r3d50_2","repo":"alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","repo_kind":"listed","path":"network/srtg_resnet.py","file_url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates/blob/HEAD/network/srtg_resnet.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":"0cab0d5b1c28cbc8"}},{"code_sha256_prefix":"b9f85596f07ec1b4","entry":"temporal_cossim_pool","repo":"alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","repo_kind":"listed","path":"network/MTnet.py","file_url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates/blob/HEAD/network/MTnet.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":"b9f85596f07ec1b4"}},{"code_sha256_prefix":"38853274c3cd2d74","entry":"wide_r3d101_2","repo":"alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","repo_kind":"listed","path":"network/srtg_resnet.py","file_url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates/blob/HEAD/network/srtg_resnet.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":"38853274c3cd2d74"}},{"code_sha256_prefix":"1fac1586476472cb","entry":"wide_r3d50_2","repo":"alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates","repo_kind":"listed","path":"network/srtg_resnet.py","file_url":"https://github.com/alexandrosstergiou/Squeeze-and-Recursion-Temporal-Gates/blob/HEAD/network/srtg_resnet.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":"1fac1586476472cb"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}