{"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/orthogonal-projection-loss","title":"Orthogonal Projection Loss","arxiv_id":"2103.14021","date":"2021-03-25","proceeding":"ICCV 2021 10","authors":["Kanchana Ranasinghe","Muzammal Naseer","Munawar Hayat","Salman Khan","Fahad Shahbaz Khan"],"abstract":"Deep neural networks have achieved remarkable performance on a range of classification tasks, with softmax cross-entropy (CE) loss emerging as the de-facto objective function. The CE loss encourages features of a class to have a higher projection score on the true class-vector compared to the negative classes. However, this is a relative constraint and does not explicitly force different class features to be well-separated. Motivated by the observation that ground-truth class representations in CE loss are orthogonal (one-hot encoded vectors), we develop a novel loss function termed `Orthogonal Projection Loss' (OPL) which imposes orthogonality in the feature space. OPL augments the properties of CE loss and directly enforces inter-class separation alongside intra-class clustering in the feature space through orthogonality constraints on the mini-batch level. As compared to other alternatives of CE, OPL offers unique advantages e.g., no additional learnable parameters, does not require careful negative mining and is not sensitive to the batch size. Given the plug-and-play nature of OPL, we evaluate it on a diverse range of tasks including image recognition (CIFAR-100), large-scale classification (ImageNet), domain generalization (PACS) and few-shot learning (miniImageNet, CIFAR-FS, tiered-ImageNet and Meta-dataset) and demonstrate its effectiveness across the board. Furthermore, OPL offers better robustness against practical nuisances such as adversarial attacks and label noise. Code is available at: https://github.com/kahnchana/opl.","url_abs":"https://arxiv.org/abs/2103.14021v1","url_pdf":"https://arxiv.org/pdf/2103.14021v1.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":"orthogonal-projection-loss","repo_url":"https://github.com/kahnchana/opl","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"domain-generalization","task_name":"Domain Generalization"},{"task_slug":"few-shot-learning","task_name":"Few-Shot Learning"}],"methods":[{"method_slug":"softmax","method_name":"Softmax"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2103.14021","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2103.14021"}},"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/kahnchana/opl","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_draft_wrong":1,"ran":1,"unverified":12},"by_repo_kind":{"official":{"samples":14,"ran":2,"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":"8d7ec010c29e813b","entry":"format_time","repo":"kahnchana/opl","repo_kind":"official","path":"label_noise/truncated_loss/utils.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/label_noise/truncated_loss/utils.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8d7ec010c29e813b"}},{"code_sha256_prefix":"dd12981b28dec323","entry":"round_channels","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/models/common.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/models/common.py","link_basis":"plan_row","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":"dd12981b28dec323"}},{"code_sha256_prefix":"b58e540015b99393","entry":"conv1x1","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/models/common.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/models/common.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":"b58e540015b99393"}},{"code_sha256_prefix":"753c62e00dde9126","entry":"covariance_loss","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/losses.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/losses.py","link_basis":"plan_row","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":"753c62e00dde9126"}},{"code_sha256_prefix":"0df92bd15ff63da7","entry":"get_activation_layer","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/models/common.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/models/common.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":"0df92bd15ff63da7"}},{"code_sha256_prefix":"8b6b7011fdc6d6c4","entry":"get_network","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/utils.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/utils.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":"8b6b7011fdc6d6c4"}},{"code_sha256_prefix":"15f95876a5d31c2a","entry":"get_resnet","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/models/resnet.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/models/resnet.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":"15f95876a5d31c2a"}},{"code_sha256_prefix":"874f5e34aef613bf","entry":"get_resnet_cifar","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/models/resnet_cifar.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/models/resnet_cifar.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":"874f5e34aef613bf"}},{"code_sha256_prefix":"98bd1c9bc8319ae9","entry":"get_test_dataloader","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/utils.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/utils.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":"98bd1c9bc8319ae9"}},{"code_sha256_prefix":"00216823ab0d5455","entry":"get_training_dataloader","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/utils.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/utils.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":"00216823ab0d5455"}},{"code_sha256_prefix":"7717ac5d21296e1f","entry":"resnet18","repo":"kahnchana/opl","repo_kind":"official","path":"classification/imagenet/custom_models.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/imagenet/custom_models.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":"7717ac5d21296e1f"}},{"code_sha256_prefix":"f157ed0645abe79a","entry":"resnet20_cifar10","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/models/resnet_cifar.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/models/resnet_cifar.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":"f157ed0645abe79a"}},{"code_sha256_prefix":"0b26b805c45c8d6d","entry":"resnet20_cifar100","repo":"kahnchana/opl","repo_kind":"official","path":"classification/cifar/models/resnet_cifar.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/cifar/models/resnet_cifar.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":"0b26b805c45c8d6d"}},{"code_sha256_prefix":"fce444af256e4d53","entry":"resnet50","repo":"kahnchana/opl","repo_kind":"official","path":"classification/imagenet/custom_models.py","file_url":"https://github.com/kahnchana/opl/blob/HEAD/classification/imagenet/custom_models.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":"fce444af256e4d53"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}