{"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/do-neural-optimal-transport-solvers-work-a","title":"Do Neural Optimal Transport Solvers Work? A Continuous Wasserstein-2 Benchmark","arxiv_id":"2106.01954","date":"2021-06-03","proceeding":"NeurIPS 2021 12","authors":["Alexander Korotin","Lingxiao Li","Aude Genevay","Justin Solomon","Alexander Filippov","Evgeny Burnaev"],"abstract":"Despite the recent popularity of neural network-based solvers for optimal transport (OT), there is no standard quantitative way to evaluate their performance. In this paper, we address this issue for quadratic-cost transport -- specifically, computation of the Wasserstein-2 distance, a commonly-used formulation of optimal transport in machine learning. To overcome the challenge of computing ground truth transport maps between continuous measures needed to assess these solvers, we use input-convex neural networks (ICNN) to construct pairs of measures whose ground truth OT maps can be obtained analytically. This strategy yields pairs of continuous benchmark measures in high-dimensional spaces such as spaces of images. We thoroughly evaluate existing optimal transport solvers using these benchmark measures. Even though these solvers perform well in downstream tasks, many do not faithfully recover optimal transport maps. To investigate the cause of this discrepancy, we further test the solvers in a setting of image generation. Our study reveals crucial limitations of existing solvers and shows that increased OT accuracy does not necessarily correlate to better results downstream.","url_abs":"https://arxiv.org/abs/2106.01954v2","url_pdf":"https://arxiv.org/pdf/2106.01954v2.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":"do-neural-optimal-transport-solvers-work-a","repo_url":"https://github.com/iamalexkorotin/Wasserstein2Benchmark","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"do-neural-optimal-transport-solvers-work-a","repo_url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"do-neural-optimal-transport-solvers-work-a","repo_url":"https://github.com/facebookresearch/w2ot","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"jax","reach":null},{"paper_slug":"do-neural-optimal-transport-solvers-work-a","repo_url":"https://github.com/iamalexkorotin/KernelNeuralOptimalTransport","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"do-neural-optimal-transport-solvers-work-a","repo_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"do-neural-optimal-transport-solvers-work-a","repo_url":"https://github.com/iamalexkorotin/wassersteiniterativenetworks","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"image-generation","task_name":"Image Generation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2106.01954","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2106.01954"}},"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/w2ot","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/iamalexkorotin/KernelNeuralOptimalTransport","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/iamalexkorotin/Wasserstein2Benchmark","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/iamalexkorotin/wassersteiniterativenetworks","reach":null}],"summary":{"ran_fixture":2,"ran_honours":2,"unverified":15},"by_repo_kind":{"official":{"samples":9,"ran":3,"repositories":2},"listed":{"samples":9,"ran":1,"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":"07c1c7fb63590df6","entry":"ewma","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/tools.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/tools.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"07c1c7fb63590df6"}},{"code_sha256_prefix":"b431a14584153806","entry":"get_linear_transport_cost","repo":"iamalexkorotin/Wasserstein2Benchmark","repo_kind":"official","path":"src/map_benchmark.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Benchmark/blob/HEAD/src/map_benchmark.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b431a14584153806"}},{"code_sha256_prefix":"77a46a75384b972e","entry":"get_linear_transport_map","repo":"iamalexkorotin/Wasserstein2Benchmark","repo_kind":"official","path":"src/map_benchmark.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Benchmark/blob/HEAD/src/map_benchmark.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"77a46a75384b972e"}},{"code_sha256_prefix":"aa4cae054b657ba2","entry":"imread","repo":"iamalexkorotin/Wasserstein2GenerativeNetworks","repo_kind":"official","path":"src/fid_score.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks/blob/HEAD/src/fid_score.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"aa4cae054b657ba2"}},{"code_sha256_prefix":"8c031ff08115e9a3","entry":"compute_l1_norm","repo":"iamalexkorotin/Wasserstein2GenerativeNetworks","repo_kind":"official","path":"src/tools.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks/blob/HEAD/src/tools.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":"8c031ff08115e9a3"}},{"code_sha256_prefix":"910de59edc0ed1b0","entry":"fig2data","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/tools.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/tools.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":"910de59edc0ed1b0"}},{"code_sha256_prefix":"5d9a01fa212bd744","entry":"fig2img","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/tools.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/tools.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":"5d9a01fa212bd744"}},{"code_sha256_prefix":"52f0b0681052dbb6","entry":"get_activations","repo":"iamalexkorotin/Wasserstein2GenerativeNetworks","repo_kind":"official","path":"src/fid_score.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks/blob/HEAD/src/fid_score.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":"52f0b0681052dbb6"}},{"code_sha256_prefix":"43cd9ab2a1a6fd6d","entry":"get_activations_for_dataloader","repo":"iamalexkorotin/Wasserstein2GenerativeNetworks","repo_kind":"official","path":"src/fid_score.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks/blob/HEAD/src/fid_score.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":"43cd9ab2a1a6fd6d"}},{"code_sha256_prefix":"ed9cd1d0db6863a4","entry":"get_barycenter_cov","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/benchmarks.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/benchmarks.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":"ed9cd1d0db6863a4"}},{"code_sha256_prefix":"101f00b70e1555e6","entry":"get_linear_transport","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/benchmarks.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/benchmarks.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":"101f00b70e1555e6"}},{"code_sha256_prefix":"0dbfd332ac783bb6","entry":"plot_combined_generated","repo":"iamalexkorotin/Wasserstein2GenerativeNetworks","repo_kind":"official","path":"src/plotters.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks/blob/HEAD/src/plotters.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":"0dbfd332ac783bb6"}},{"code_sha256_prefix":"7fb9bfa9b31ec695","entry":"plot_conj","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":"7fb9bfa9b31ec695"}},{"code_sha256_prefix":"28966a12560fcf99","entry":"plot_latent_pca","repo":"iamalexkorotin/Wasserstein2GenerativeNetworks","repo_kind":"official","path":"src/plotters.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks/blob/HEAD/src/plotters.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":"28966a12560fcf99"}},{"code_sha256_prefix":"32c405ba8da2078b","entry":"plot_training_phase","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/plotters.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/plotters.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":"32c405ba8da2078b"}},{"code_sha256_prefix":"d19df8e62477a487","entry":"plot_training_phase_palettes","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/plotters.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/plotters.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":"d19df8e62477a487"}},{"code_sha256_prefix":"94417c450f1ed113","entry":"push_img","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/plotters.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/plotters.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":"94417c450f1ed113"}},{"code_sha256_prefix":"c424fce4b2b9d60d","entry":"read_images_to_ram","repo":"iamalexkorotin/Wasserstein2GenerativeNetworks","repo_kind":"official","path":"src/tools.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2GenerativeNetworks/blob/HEAD/src/tools.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":"c424fce4b2b9d60d"}},{"code_sha256_prefix":"c1eb471d75746958","entry":"symmetrize","repo":"iamalexkorotin/Wasserstein2Barycenters","repo_kind":"listed","path":"src/benchmarks.py","file_url":"https://github.com/iamalexkorotin/Wasserstein2Barycenters/blob/HEAD/src/benchmarks.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":"c1eb471d75746958"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}