{"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/feature-lenses-plug-and-play-neural-modules","title":"Feature Lenses: Plug-and-play Neural Modules for Transformation-Invariant Visual Representations","arxiv_id":"2004.05554","date":"2020-04-12","proceeding":null,"authors":["Shaohua Li","Xiuchao Sui","Jie Fu","Yong liu","Rick Siow Mong Goh"],"abstract":"Convolutional Neural Networks (CNNs) are known to be brittle under various image transformations, including rotations, scalings, and changes of lighting conditions. We observe that the features of a transformed image are drastically different from the ones of the original image. To make CNNs more invariant to transformations, we propose \"Feature Lenses\", a set of ad-hoc modules that can be easily plugged into a trained model (referred to as the \"host model\"). Each individual lens reconstructs the original features given the features of a transformed image under a particular transformation. These lenses jointly counteract feature distortions caused by various transformations, thus making the host model more robust without retraining. By only updating lenses, the host model is freed from iterative updating when facing new transformations absent in the training data; as feature semantics are preserved, downstream applications, such as classifiers and detectors, automatically gain robustness without retraining. Lenses are trained in a self-supervised fashion with no annotations, by minimizing a novel \"Top-K Activation Contrast Loss\" between lens-transformed features and original features. Evaluated on ImageNet, MNIST-rot, and CIFAR-10, Feature Lenses show clear advantages over baseline methods.","url_abs":"https://arxiv.org/abs/2004.05554v1","url_pdf":"https://arxiv.org/pdf/2004.05554v1.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":"feature-lenses-plug-and-play-neural-modules","repo_url":"https://github.com/askerlee/featlens","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2004.05554","atlas_url":"https://app.syntology.ai/?focus=2004.05554","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2004.05554"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/askerlee/featlens","reach":null}],"summary":{"ran_draft_wrong":1,"ran_honours":1,"ran_fixture":1},"by_repo_kind":{"official":{"samples":3,"ran":3,"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":"0509993b7031ab18","entry":"calc_tensor_stats","repo":"askerlee/featlens","repo_kind":"official","path":"featlens.py","file_url":"https://github.com/askerlee/featlens/blob/HEAD/featlens.py","link_basis":"first_harvest_node","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":"0509993b7031ab18"}},{"code_sha256_prefix":"160cf7f33d5b0bb5","entry":"get_pos_neg_stats","repo":"askerlee/featlens","repo_kind":"official","path":"featlens.py","file_url":"https://github.com/askerlee/featlens/blob/HEAD/featlens.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"160cf7f33d5b0bb5"}},{"code_sha256_prefix":"7f99208ed1125ffb","entry":"pearson","repo":"askerlee/featlens","repo_kind":"official","path":"featlens.py","file_url":"https://github.com/askerlee/featlens/blob/HEAD/featlens.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7f99208ed1125ffb"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}