{"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/deep-recurrent-neural-network-with-multi","title":"Deep Recurrent Neural Network with Multi-scale Bi-directional Propagation for Video Deblurring","arxiv_id":"2112.05150","date":"2021-12-09","proceeding":null,"authors":["Chao Zhu","Hang Dong","Jinshan Pan","Boyang Liang","Yuhao Huang","Lean Fu","Fei Wang"],"abstract":"The success of the state-of-the-art video deblurring methods stems mainly from implicit or explicit estimation of alignment among the adjacent frames for latent video restoration. However, due to the influence of the blur effect, estimating the alignment information from the blurry adjacent frames is not a trivial task. Inaccurate estimations will interfere the following frame restoration. Instead of estimating alignment information, we propose a simple and effective deep Recurrent Neural Network with Multi-scale Bi-directional Propagation (RNN-MBP) to effectively propagate and gather the information from unaligned neighboring frames for better video deblurring. Specifically, we build a Multi-scale Bi-directional Propagation~(MBP) module with two U-Net RNN cells which can directly exploit the inter-frame information from unaligned neighboring hidden states by integrating them in different scales. Moreover, to better evaluate the proposed algorithm and existing state-of-the-art methods on real-world blurry scenes, we also create a Real-World Blurry Video Dataset (RBVD) by a well-designed Digital Video Acquisition System (DVAS) and use it as the training and evaluation dataset. Extensive experimental results demonstrate that the proposed RBVD dataset effectively improves the performance of existing algorithms on real-world blurry videos, and the proposed algorithm performs favorably against the state-of-the-art methods on three typical benchmarks. The code is available at https://github.com/XJTU-CVLAB-LOWLEVEL/RNN-MBP.","url_abs":"https://arxiv.org/abs/2112.05150v1","url_pdf":"https://arxiv.org/pdf/2112.05150v1.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":"deep-recurrent-neural-network-with-multi","repo_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"deblurring","task_name":"Deblurring"},{"task_slug":"video-deblurring","task_name":"Video Deblurring"},{"task_slug":"video-restoration","task_name":"Video Restoration"}],"methods":[{"method_slug":"concatenated-skip-connection","method_name":"Concatenated Skip Connection"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"max-pooling","method_name":"Max Pooling"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"u-net","method_name":"U-Net"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/deblurring-on-gopro","task":"Deblurring","dataset":"GoPro","model":"RNN-MBP","rank_in_archive_order":21,"of":56,"metrics":{"PSNR":"33.32","SSIM":"0.9627"},"uses_additional_data":false}],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2112.05150","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2112.05150"}},"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/xjtu-cvlab-lowlevel/rnn-mbp","reach":{"status":"ok"}}],"summary":{"ran_honours":1,"ran":7,"ran_draft_wrong":4,"unverified":2},"by_repo_kind":{"official":{"samples":14,"ran":12,"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":14,"samples":[{"code_sha256_prefix":"afd3c5ab4cb8face","entry":"count_param","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"train/dp.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/train/dp.py","link_basis":"plan_row","language":"python","status":"ran_honours","verification_level":2,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"afd3c5ab4cb8face"}},{"code_sha256_prefix":"8509275d3bfff1d0","entry":"Backward","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/flow_pwc.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/flow_pwc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8509275d3bfff1d0"}},{"code_sha256_prefix":"308d7e741a6c1d7e","entry":"L1","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"train/loss.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/train/loss.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"308d7e741a6c1d7e"}},{"code_sha256_prefix":"4e215f323ed97be2","entry":"MSE","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"train/loss.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/train/loss.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4e215f323ed97be2"}},{"code_sha256_prefix":"94554cf61f51f418","entry":"calc_grad_sobel","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/utils.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"94554cf61f51f418"}},{"code_sha256_prefix":"8ed7018ce6adfa47","entry":"calc_meanFilter","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/utils.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8ed7018ce6adfa47"}},{"code_sha256_prefix":"9c36c9ce598689b6","entry":"calc_psnr","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/utils.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9c36c9ce598689b6"}},{"code_sha256_prefix":"9bed061f167dd318","entry":"conv1x1","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/arches.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/arches.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9bed061f167dd318"}},{"code_sha256_prefix":"f3d374db4177f20c","entry":"conv3x3","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/arches.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/arches.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f3d374db4177f20c"}},{"code_sha256_prefix":"05b9fb4be8292106","entry":"conv5x5","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/arches.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/arches.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"05b9fb4be8292106"}},{"code_sha256_prefix":"ea472692c3b00532","entry":"feed","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/RNN-MBP.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/RNN-MBP.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ea472692c3b00532"}},{"code_sha256_prefix":"7abfa32a2f1d7424","entry":"logsumexp_2d","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/attention.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/attention.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7abfa32a2f1d7424"}},{"code_sha256_prefix":"d5547b4f6d4c8ae9","entry":"Perceptual","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"train/loss.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/train/loss.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d5547b4f6d4c8ae9"}},{"code_sha256_prefix":"262657b0ce1b117c","entry":"cupy_kernel","repo":"xjtu-cvlab-lowlevel/rnn-mbp","repo_kind":"official","path":"model/correlation.py","file_url":"https://github.com/xjtu-cvlab-lowlevel/rnn-mbp/blob/HEAD/model/correlation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"262657b0ce1b117c"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}