{"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/spts-v2-single-point-scene-text-spotting","title":"SPTS v2: Single-Point Scene Text Spotting","arxiv_id":"2301.01635","date":"2023-01-04","proceeding":null,"authors":["Yuliang Liu","Jiaxin Zhang","Dezhi Peng","Mingxin Huang","Xinyu Wang","Jingqun Tang","Can Huang","Dahua Lin","Chunhua Shen","Xiang Bai","Lianwen Jin"],"abstract":"End-to-end scene text spotting has made significant progress due to its intrinsic synergy between text detection and recognition. Previous methods commonly regard manual annotations such as horizontal rectangles, rotated rectangles, quadrangles, and polygons as a prerequisite, which are much more expensive than using single-point. Our new framework, SPTS v2, allows us to train high-performing text-spotting models using a single-point annotation. SPTS v2 reserves the advantage of the auto-regressive Transformer with an Instance Assignment Decoder (IAD) through sequentially predicting the center points of all text instances inside the same predicting sequence, while with a Parallel Recognition Decoder (PRD) for text recognition in parallel, which significantly reduces the requirement of the length of the sequence. These two decoders share the same parameters and are interactively connected with a simple but effective information transmission process to pass the gradient and information. Comprehensive experiments on various existing benchmark datasets demonstrate the SPTS v2 can outperform previous state-of-the-art single-point text spotters with fewer parameters while achieving 19$\\times$ faster inference speed. Within the context of our SPTS v2 framework, our experiments suggest a potential preference for single-point representation in scene text spotting when compared to other representations. Such an attempt provides a significant opportunity for scene text spotting applications beyond the realms of existing paradigms. Code is available at: https://github.com/Yuliang-Liu/SPTSv2.","url_abs":"https://arxiv.org/abs/2301.01635v4","url_pdf":"https://arxiv.org/pdf/2301.01635v4.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":"spts-v2-single-point-scene-text-spotting","repo_url":"https://github.com/bytedance/sptsv2","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"spts-v2-single-point-scene-text-spotting","repo_url":"https://github.com/yuliang-liu/sptsv2","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok"}},{"paper_slug":"spts-v2-single-point-scene-text-spotting","repo_url":"https://github.com/shannanyinxiang/spts","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"decoder","task_name":"Decoder"},{"task_slug":"text-detection","task_name":"Text Detection"},{"task_slug":"text-spotting","task_name":"Text Spotting"}],"methods":[{"method_slug":"absolute-position-encodings","method_name":"Absolute Position Encodings"},{"method_slug":"adam","method_name":"Adam"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"bpe","method_name":"BPE"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"label-smoothing","method_name":"Label Smoothing"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"position-wise-feed-forward-layer","method_name":"Position-Wise Feed-Forward Layer"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"transformer","method_name":"Transformer"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/text-spotting-on-icdar-2015","task":"Text Spotting","dataset":"ICDAR 2015","model":"SPTS v2","rank_in_archive_order":15,"of":18,"metrics":{"F-measure (%) - Generic Lexicon":"72.6","F-measure (%) - Strong Lexicon":"82.3","F-measure (%) - Weak Lexicon":"77.7"},"uses_additional_data":false}],"syntology":{"syntology_url":"https://syntology.ai/paper/2301.01635","atlas_url":"https://app.syntology.ai/?focus=2301.01635","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2301.01635"}},"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/yuliang-liu/sptsv2","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/shannanyinxiang/spts","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/bytedance/sptsv2","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":10,"ran_violates":1,"ran_draft_wrong":3,"ran_fixture":1,"unverified":1},"by_repo_kind":{"official":{"samples":16,"ran":15,"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":"ebbfd2397d6c7321","entry":"all_gather","repo":"bytedance/sptsv2","repo_kind":"official","path":"util/misc_sptsv2.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/util/misc_sptsv2.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ebbfd2397d6c7321"}},{"code_sha256_prefix":"5d3dcc613a7cfc85","entry":"bezier_to_polygon","repo":"bytedance/sptsv2","repo_kind":"official","path":"datasets/ocr_dataset.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/datasets/ocr_dataset.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5d3dcc613a7cfc85"}},{"code_sha256_prefix":"8eac9e88e2b866d8","entry":"crop","repo":"bytedance/sptsv2","repo_kind":"official","path":"datasets/sptsv2_transforms.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/datasets/sptsv2_transforms.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8eac9e88e2b866d8"}},{"code_sha256_prefix":"94654eada185e63b","entry":"crop_","repo":"bytedance/sptsv2","repo_kind":"official","path":"datasets/sptsv2_transforms.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/datasets/sptsv2_transforms.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"94654eada185e63b"}},{"code_sha256_prefix":"a4a397c75fc42094","entry":"draw_short_line","repo":"bytedance/sptsv2","repo_kind":"official","path":"util/visualize.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/util/visualize.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a4a397c75fc42094"}},{"code_sha256_prefix":"dd6bcdc703fcdaed","entry":"dynamic_point","repo":"bytedance/sptsv2","repo_kind":"official","path":"datasets/ocr_dataset.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/datasets/ocr_dataset.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"dd6bcdc703fcdaed"}},{"code_sha256_prefix":"5c400bdf7fa3204b","entry":"extract_result_from_output_seqs","repo":"bytedance/sptsv2","repo_kind":"official","path":"util/visualize.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/util/visualize.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5c400bdf7fa3204b"}},{"code_sha256_prefix":"894b253f35765276","entry":"generate_square_subsequent_mask","repo":"bytedance/sptsv2","repo_kind":"official","path":"models/encoder_decoder.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/models/encoder_decoder.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"894b253f35765276"}},{"code_sha256_prefix":"9be9e658b5bd688a","entry":"hflip","repo":"bytedance/sptsv2","repo_kind":"official","path":"datasets/sptsv2_transforms.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/datasets/sptsv2_transforms.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9be9e658b5bd688a"}},{"code_sha256_prefix":"5adadb63e05f89b9","entry":"nested_tensor_from_tensor_list","repo":"bytedance/sptsv2","repo_kind":"official","path":"util/misc_sptsv2.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/util/misc_sptsv2.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5adadb63e05f89b9"}},{"code_sha256_prefix":"3176f181873cc5f4","entry":"process_args","repo":"bytedance/sptsv2","repo_kind":"official","path":"util/data.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/util/data.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3176f181873cc5f4"}},{"code_sha256_prefix":"667724bf107c52b8","entry":"read_lexicon","repo":"bytedance/sptsv2","repo_kind":"official","path":"eval_ic15.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/eval_ic15.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"667724bf107c52b8"}},{"code_sha256_prefix":"05992505df9ef0cd","entry":"reduce_dict","repo":"bytedance/sptsv2","repo_kind":"official","path":"util/misc_sptsv2.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/util/misc_sptsv2.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"05992505df9ef0cd"}},{"code_sha256_prefix":"f9fd6241d935f07b","entry":"window_partition","repo":"bytedance/sptsv2","repo_kind":"official","path":"models/encoder_decoder.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/models/encoder_decoder.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f9fd6241d935f07b"}},{"code_sha256_prefix":"fb32094c6dbece71","entry":"window_reverse","repo":"bytedance/sptsv2","repo_kind":"official","path":"models/encoder_decoder.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/models/encoder_decoder.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"fb32094c6dbece71"}},{"code_sha256_prefix":"16e0e017ff8eb9d7","entry":"weighted_edit_distance","repo":"bytedance/sptsv2","repo_kind":"official","path":"eval_ic15.py","file_url":"https://github.com/bytedance/sptsv2/blob/HEAD/eval_ic15.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"16e0e017ff8eb9d7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}