{"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/rnnpool-efficient-non-linear-pooling-for-ram","title":"RNNPool: Efficient Non-linear Pooling for RAM Constrained Inference","arxiv_id":"2002.11921","date":"2020-02-27","proceeding":"NeurIPS 2020 12","authors":["Oindrila Saha","Aditya Kusupati","Harsha Vardhan Simhadri","Manik Varma","Prateek Jain"],"abstract":"Standard Convolutional Neural Networks (CNNs) designed for computer vision tasks tend to have large intermediate activation maps. These require large working memory and are thus unsuitable for deployment on resource-constrained devices typically used for inference on the edge. Aggressively downsampling the images via pooling or strided convolutions can address the problem but leads to a significant decrease in accuracy due to gross aggregation of the feature map by standard pooling operators. In this paper, we introduce RNNPool, a novel pooling operator based on Recurrent Neural Networks (RNNs), that efficiently aggregates features over large patches of an image and rapidly downsamples activation maps. Empirical evaluation indicates that an RNNPool layer can effectively replace multiple blocks in a variety of architectures such as MobileNets, DenseNet when applied to standard vision tasks like image classification and face detection. That is, RNNPool can significantly decrease computational complexity and peak memory usage for inference while retaining comparable accuracy. We use RNNPool with the standard S3FD architecture to construct a face detection method that achieves state-of-the-art MAP for tiny ARM Cortex-M4 class microcontrollers with under 256 KB of RAM. Code is released at https://github.com/Microsoft/EdgeML.","url_abs":"https://arxiv.org/abs/2002.11921v2","url_pdf":"https://arxiv.org/pdf/2002.11921v2.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":"rnnpool-efficient-non-linear-pooling-for-ram","repo_url":"https://github.com/Microsoft/EdgeML","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"tf","reach":null},{"paper_slug":"rnnpool-efficient-non-linear-pooling-for-ram","repo_url":"https://github.com/sayakpaul/Revisiting-Pooling-in-CNNs","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"unanswered"}},{"paper_slug":"rnnpool-efficient-non-linear-pooling-for-ram","repo_url":"https://github.com/MindSpore-scientific-2/code-2/tree/main/ZoneoutRNN","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"mindspore","reach":null},{"paper_slug":"rnnpool-efficient-non-linear-pooling-for-ram","repo_url":"https://github.com/MindSpore-scientific-2/code-5/tree/main/Last-Query-Transformer-RNN","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"mindspore","reach":null}],"tasks":[{"task_slug":"face-detection","task_name":"Face Detection"},{"task_slug":"image-classification","task_name":"Image Classification"},{"task_slug":"image-classification","task_name":"image-classification"}],"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":"concatenated-skip-connection","method_name":"Concatenated Skip Connection"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"dense-block","method_name":"Dense Block"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"dropout","method_name":"Dropout"},{"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":"softmax","method_name":"Softmax"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/face-detection-on-wider-face-hard","task":"Face Detection","dataset":"WIDER Face (Hard)","model":"RNNPool-Face-C","rank_in_archive_order":31,"of":40,"metrics":{"AP":"0.70"},"uses_additional_data":false},{"leaderboard":"/sota/face-detection-on-wider-face-medium","task":"Face Detection","dataset":"WIDER Face (Medium)","model":"RNNPool-Face-C","rank_in_archive_order":26,"of":37,"metrics":{"AP":"0.89"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2002.11921","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2002.11921"}},"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":"deterministic:regex_extraction","url":"https://github.com/Microsoft/EdgeML","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/MindSpore-scientific-2/code-2/tree/main/ZoneoutRNN","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/MindSpore-scientific-2/code-5/tree/main/Last-Query-Transformer-RNN","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/sayakpaul/Revisiting-Pooling-in-CNNs","reach":{"status":"unanswered"}}],"summary":{"unverified":1},"by_repo_kind":{"official":{"samples":1,"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":1,"samples":[{"code_sha256_prefix":"e50526a3368b2001","entry":"RNNPool","repo":"Microsoft/EdgeML","repo_kind":"official","path":"pytorch/edgeml_pytorch/graph/rnnpool.py","file_url":"https://github.com/Microsoft/EdgeML/blob/HEAD/pytorch/edgeml_pytorch/graph/rnnpool.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e50526a3368b2001"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}