[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-WarBean--tps_stn_pytorch":3,"tool-WarBean--tps_stn_pytorch":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",160784,2,"2026-04-19T11:32:54",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":75,"owner_location":76,"owner_email":77,"owner_twitter":75,"owner_website":75,"owner_url":78,"languages":79,"stars":84,"forks":85,"last_commit_at":86,"license":75,"difficulty_score":32,"env_os":87,"env_gpu":88,"env_ram":88,"env_deps":89,"category_tags":99,"github_topics":100,"view_count":32,"oss_zip_url":75,"oss_zip_packed_at":75,"status":17,"created_at":104,"updated_at":105,"faqs":106,"releases":136},9617,"WarBean\u002Ftps_stn_pytorch","tps_stn_pytorch","PyTorch implementation of Spatial Transformer Network (STN) with Thin Plate Spline (TPS)","tps_stn_pytorch 是一个基于 PyTorch 实现的开源项目，专注于将空间变换网络（STN）与薄板样条（TPS）技术相结合。它主要解决图像识别中因视角倾斜、扭曲或形变导致准确率下降的难题。通过自动对输入图像进行智能校正和“拉直”，该工具能让后续的识别模型（如分类器或 OCR 系统）更轻松地处理数据，且整个过程无需额外的人工标注监督，支持端到端的训练。\n\n其核心技术亮点在于引入了 TPS 变换，相比传统的仿射变换，它能利用控制点网格对图像进行任意方式的非线性 warp（弯曲变形），特别适合处理如弯曲文本行等复杂场景。项目中提供了完整的 MNIST 旋转矫正演示及可视化脚本，用户可灵活调整模型类型、旋转角度及网格密度来观察效果。\n\n这款工具非常适合深度学习研究人员、计算机视觉开发者以及需要构建高鲁棒性识别系统的工程师使用。如果你正在探索如何让 AI 模型在图像发生严重形变时依然保持高精度，或者希望深入研究 STN 架构在 OCR 等领域的应用，tps_stn_pytorch 提供了一个清晰、可复现且易于集成的代码基准。","# tps_stn_pytorch\nPyTorch implementation of Spatial Transformer Network (STN) with Thin Plate Spline (TPS).\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_6ab331f10d2f.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_cf0c1369a885.gif\" height = \"200\"\u002F>\n\n## Introduction\n\nSTN is a powerful neural network architecture proposed by DeepMind in [[1]](#ref-1).  STN achieves real spatial invariance by automatically rectify input images before they are feeded into a normal classification network. The most amazing part of STN is that it is end-to-end differential and can be directly plugged into existing network architectures (AlexNet, Resnet, etc), **without any extra supervision.**\n\nOriginal STN paper [[1]](#ref-1) experiments on three specific transformation forms: Affine Transformation, Projective Transformation and **Thin Plate Spline Transformation (TPS)**.  Among them I think TPS is the most powerful translation because it can warp a image in arbitrary way. As shown below, I can warp my Avatar\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_46afaf60f1e6.jpg\" height = \"200\"\u002F>\n\ninto\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_103a6023cd25.jpg\" height = \"200\"\u002F>\n\nTPS-STN has been used in OCR application [[2]](#ref-2). In this paper TPS-STN is to automatically rectify distorted text images, before they are feeded into a normal OCR text recognition model:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_af21466325aa.jpg\" height = \"130\"\u002F>\n\n## Dependencies\n\n- Python3\n- PyTorch\n- Torchvision\n- Numpy\n- Matplotlib\n- Pillow \u002F PIL\n- imageio\n\nI use `imageio` to create GIF visualization. Simply install it by `pip install imageio`.\n\n## Run\n\n\tpython mnist_train.py --model unbounded_stn --angle 90 --grid_size 4\n\tpython mnist_visualize.py --model unbounded_stn --angle 90 --grid_size 4\n\tpython mnist_make_gif.py --model unbounded_stn --angle 90 --grid_size 4\n\nThen PNG and GIF resutls will be saved in `.\u002Fimage\u002Funbounded_stn_angle60_grid4\u002F` and `.\u002Fgif\u002Funbounded_stn_angle60_grid4\u002F`.\n\nYou can try other combinations of model architecture, mnist random rotation angle and TPS grid size. Details below.\n\n## Arguments\n\nThere are three controllable arguments: `--model`, `--angle`, `--grid_size`.\n\n`--model`: str, required\n- With `no_stn`, STN module is discarded and only a single CNN classifier remains.\n- With `bounded_stn`, the output of localization network is squeezed to [-1, 1] by `F.tanh`, as was done in [[2]](#ref-1)\n- With `unbounded_stn`, the output of locolizaition network is not squeezed\n\n`--angle`: int, default = 60\n- Samples in MNIST dataset will be rotated by random angles within `[-angle, angle]`\n\n`--grid_size`: int, default = 4\n- Use `(grid_size x grid_size)` control points to define Thin Plate Spline transformation\n\n## Test Accuracy Curves\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_eb58436b94d3.png\" height = \"900\"\u002F>\n\n## Visualize TPS-STN\n\nResults with `angle = 90` are generally bad:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_4b4b8fa84518.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_21c975dd709a.gif\" height = \"200\"\u002F>\n\nResults with `bounded_stn` are bad if `grid_size \u003C= 3`:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_3e8942f99ad3.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_a60eb71977f3.gif\" height = \"200\"\u002F>\n\nBut ok if `grid_size >= 4`:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_9e39e611ee9a.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_8c82f8d5e2de.gif\" height = \"200\"\u002F>\n\nResults with `unbounded_stn` are ok:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_b39e811192d9.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_583a9c3b7e92.gif\" height = \"200\"\u002F>\n\nOf course there are always bad cases in each combination. You can download all my GIFs from [Baidu Netdisk](https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1c2KXPw0) (file size 2G).\n\n\n\n## Reference\n\n[1] [Spatial Transformer Networks](https:\u002F\u002Farxiv.org\u002Fabs\u002F1509.05329)\u003Cspan id=\"ref-1\"\u002F>\n\n[2] [Robust Scene Text Recognition with Automatic Rectiﬁcation](https:\u002F\u002Farxiv.org\u002Fabs\u002F1603.03915)\u003Cspan id=\"ref-2\"\u002F>\n\n[3] [数值方法——薄板样条插值（Thin-Plate Spline）](http:\u002F\u002Fblog.csdn.net\u002FVictoriaW\u002Farticle\u002Fdetails\u002F70161180)\u003Cspan id=\"ref-3\"\u002F>\n","# tps_stn_pytorch\n基于薄板样条（TPS）的空间变换网络（STN）的 PyTorch 实现。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_6ab331f10d2f.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_cf0c1369a885.gif\" height = \"200\"\u002F>\n\n## 简介\n\n空间变换网络（STN）是由 DeepMind 提出的一种强大的神经网络架构 [[1]](#ref-1)。STN 通过在输入图像被送入常规分类网络之前自动对其进行校正，从而实现真正的空间不变性。STN 最令人惊叹之处在于它是端到端可微分的，并且可以直接插入现有的网络架构中（如 AlexNet、ResNet 等），**无需任何额外的监督信号。**\n\n原始 STN 论文 [[1]](#ref-1) 对三种特定的变换形式进行了实验：仿射变换、透视变换和 **薄板样条变换（TPS）**。其中我认为 TPS 是最强大的变换方式，因为它可以以任意方式扭曲图像。如下所示，我可以将我的头像进行扭曲：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_46afaf60f1e6.jpg\" height = \"200\"\u002F>\n\n变为\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_103a6023cd25.jpg\" height = \"200\"\u002F>\n\nTPS-STN 已被用于 OCR 应用程序 [[2]](#ref-2)。在这篇论文中，TPS-STN 用于在将扭曲的文本图像送入常规 OCR 文本识别模型之前，自动对其进行校正：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_af21466325aa.jpg\" height = \"130\"\u002F>\n\n## 依赖项\n\n- Python3\n- PyTorch\n- Torchvision\n- Numpy\n- Matplotlib\n- Pillow \u002F PIL\n- imageio\n\n我使用 `imageio` 来创建 GIF 可视化效果。只需运行 `pip install imageio` 即可安装。\n\n## 运行\n\n\tpython mnist_train.py --model unbounded_stn --angle 90 --grid_size 4\n\tpython mnist_visualize.py --model unbounded_stn --angle 90 --grid_size 4\n\tpython mnist_make_gif.py --model unbounded_stn --angle 90 --grid_size 4\n\n随后，PNG 和 GIF 结果将分别保存在 `.\u002Fimage\u002Funbounded_stn_angle60_grid4\u002F` 和 `.\u002Fgif\u002Funbounded_stn_angle60_grid4\u002F` 目录中。\n\n您可以尝试其他模型架构、MNIST 数据集随机旋转角度以及 TPS 网格大小的不同组合。详细信息如下。\n\n## 参数\n\n共有三个可控参数：`--model`、`--angle` 和 `--grid_size`。\n\n`--model`: 字符串，必填\n- 使用 `no_stn` 时，STN 模块将被丢弃，仅保留单一的 CNN 分类器。\n- 使用 `bounded_stn` 时，定位网络的输出会被 `F.tanh` 压缩到 [-1, 1] 范围内，正如 [[2]](#ref-1) 中所做的那样。\n- 使用 `unbounded_stn` 时，定位网络的输出不会被压缩。\n\n`--angle`: 整数，默认为 60\n- MNIST 数据集中的样本将被随机旋转 `[-angle, angle]` 范围内的角度。\n\n`--grid_size`: 整数，默认为 4\n- 使用 `(grid_size x grid_size)` 个控制点来定义薄板样条变换。\n\n## 测试准确率曲线\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_eb58436b94d3.png\" height = \"900\"\u002F>\n\n## 可视化 TPS-STN\n\n当 `angle = 90` 时，结果通常较差：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_4b4b8fa84518.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_21c975dd709a.gif\" height = \"200\"\u002F>\n\n当使用 `bounded_stn` 且 `grid_size \u003C= 3` 时，结果也不理想：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_3e8942f99ad3.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_a60eb71977f3.gif\" height = \"200\"\u002F>\n\n但若 `grid_size >= 4`，则效果较好：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_9e39e611ee9a.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_8c82f8d5e2de.gif\" height = \"200\"\u002F>\n\n而使用 `unbounded_stn` 时，结果则较为理想：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_b39e811192d9.gif\" height = \"200\"\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_readme_583a9c3b7e92.gif\" height = \"200\"\u002F>\n\n当然，在每种组合下都可能存在表现不佳的情况。您可以通过 [百度网盘](https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1c2KXPw0) 下载我所有的 GIF 文件（文件大小为 2GB）。\n\n\n\n## 参考文献\n\n[1] [Spatial Transformer Networks](https:\u002F\u002Farxiv.org\u002Fabs\u002F1509.05329)\u003Cspan id=\"ref-1\"\u002F>\n\n[2] [Robust Scene Text Recognition with Automatic Rectiﬁcation](https:\u002F\u002Farxiv.org\u002Fabs\u002F1603.03915)\u003Cspan id=\"ref-2\"\u002F>\n\n[3] [数值方法——薄板样条插值（Thin-Plate Spline）](http:\u002F\u002Fblog.csdn.net\u002FVictoriaW\u002Farticle\u002Fdetails\u002F70161180)\u003Cspan id=\"ref-3\"\u002F>","# tps_stn_pytorch 快速上手指南\n\n`tps_stn_pytorch` 是一个基于 PyTorch 实现的带有薄板样条（Thin Plate Spline, TPS）的空间变换网络（STN）。该工具能够自动校正输入图像的几何形变，无需额外监督信号即可端到端地嵌入现有网络架构（如 ResNet、AlexNet），特别适用于 OCR 文本校正等场景。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Linux \u002F macOS \u002F Windows\n*   **Python 版本**：Python 3.x\n*   **核心依赖**：\n    *   PyTorch\n    *   Torchvision\n    *   Numpy\n    *   Matplotlib\n    *   Pillow (PIL)\n    *   imageio (用于生成 GIF 可视化)\n\n> **国内加速建议**：\n> 安装 PyTorch 时，推荐使用清华或中科大镜像源以提升下载速度。例如：\n> `pip install torch torchvision -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`\n\n## 安装步骤\n\n1.  **克隆项目代码**\n    ```bash\n    git clone https:\u002F\u002Fgithub.com\u002Fwarbean\u002Ftps_stn_pytorch.git\n    cd tps_stn_pytorch\n    ```\n\n2.  **安装 Python 依赖包**\n    建议使用国内镜像源安装剩余依赖：\n    ```bash\n    pip install numpy matplotlib pillow imageio -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n    ```\n    *(注：PyTorch 和 Torchvision 需根据您的 CUDA 版本单独安装，若未安装请先执行上述加速安装命令)*\n\n## 基本使用\n\n本项目提供了针对 MNIST 数据集的完整训练、可视化和 GIF 生成脚本。以下是最简单的运行示例，演示如何训练一个无边界 TPS-STN 模型，并处理旋转角度为 90 度、网格大小为 4 的图像。\n\n### 1. 训练模型\n运行训练脚本，模型将自动学习如何校正随机旋转的 MNIST 数字图像。\n```bash\npython mnist_train.py --model unbounded_stn --angle 90 --grid_size 4\n```\n\n### 2. 可视化结果\n训练完成后，生成静态 PNG 图像以观察校正效果。\n```bash\npython mnist_visualize.py --model unbounded_stn --angle 90 --grid_size 4\n```\n\n### 3. 生成动态演示 (GIF)\n生成展示变换过程的 GIF 动图。\n```bash\npython mnist_make_gif.py --model unbounded_stn --angle 90 --grid_size 4\n```\n\n**输出说明**：\n执行上述命令后，生成的图片将保存在以下目录：\n*   静态图片：`.\u002Fimage\u002Funbounded_stn_angle60_grid4\u002F`\n*   动态 GIF：`.\u002Fgif\u002Funbounded_stn_angle60_grid4\u002F`\n*(注：目录名称中的角度值可能根据实际运行参数略有不同)*\n\n### 参数说明\n您可以根据需求调整以下三个核心参数：\n*   `--model`: 选择模型类型\n    *   `no_stn`: 不使用 STN，仅保留普通 CNN 分类器（基线对比）。\n    *   `bounded_stn`: 定位网络输出通过 `tanh` 限制在 [-1, 1] 区间。\n    *   `unbounded_stn`: 定位网络输出不进行限制（推荐尝试）。\n*   `--angle`: 设置 MNIST 样本的随机旋转角度范围 `[-angle, angle]`，默认为 60。\n*   `--grid_size`: 定义 TPS 变换的控制点网格大小 `(grid_size x grid_size)`，默认为 4。建议 `grid_size >= 4` 以获得较好的校正效果。","某智慧物流团队正在开发一套自动快递单识别系统，需处理运输过程中因折叠、挤压导致严重扭曲变形的运单图像。\n\n### 没有 tps_stn_pytorch 时\n- **识别率低下**：传统 CNN 模型无法理解非线性形变，面对弯曲或局部拉伸的文字图像，OCR 识别准确率骤降至 60% 以下。\n- **数据清洗成本高**：为了训练鲁棒模型，团队必须人工收集并标注海量不同扭曲程度的样本，耗时耗力且难以覆盖所有变形情况。\n- **预处理流程复杂**：需要编写复杂的传统图像处理算法（如手动检测角点、透视变换）来尝试校正图像，但这些方法对不规则扭曲往往失效。\n- **模型泛化能力差**：一旦遇到训练集中未出现的新型扭曲模式，整个识别流水线就会崩溃，需重新调整参数甚至重构代码。\n\n### 使用 tps_stn_pytorch 后\n- **自动几何校正**：利用 TPS 薄板样条变换，tps_stn_pytorch 能端到端地自动学习并将任意扭曲的运单图像“拉直”还原，无需人工干预。\n- **零额外监督成本**：该模块可直接嵌入现有 ResNet 等架构中，通过反向传播自动优化，无需额外的形变标注数据即可提升模型鲁棒性。\n- **简化开发链路**：省去了繁琐的传统图像校正预处理步骤，开发者只需关注核心识别逻辑，大幅缩短了从原型到部署的周期。\n- **适应极端形变**：即使面对折叠造成的剧烈非线性形变，控制点网格也能灵活调整，确保输入给 OCR 引擎的始终是规整图像，识别率稳定在 95% 以上。\n\ntps_stn_pytorch 的核心价值在于让深度学习模型具备了“自我矫正”视觉畸变的能力，以纯数据驱动的方式解决了传统算法难以处理的复杂空间变换难题。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FWarBean_tps_stn_pytorch_6ab331f1.gif","WarBean","郑华滨","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FWarBean_fa713341.jpg",null,"Shenzhen, China","warbean@qq.com","https:\u002F\u002Fgithub.com\u002FWarBean",[80],{"name":81,"color":82,"percentage":83},"Python","#3572A5",100,958,157,"2026-04-16T13:47:12","","未说明",{"notes":90,"python":91,"dependencies":92},"该工具是带有薄板样条（TPS）的空间变换网络（STN）的 PyTorch 实现。README 中未明确指定操作系统、GPU 型号、显存大小、CUDA 版本或具体内存需求。主要依赖通过 pip 安装，其中 imageio 用于生成 GIF 可视化结果。示例脚本基于 MNIST 数据集进行训练和可视化。","Python3",[93,94,95,96,97,98],"PyTorch","Torchvision","Numpy","Matplotlib","Pillow \u002F PIL","imageio",[35,14],[101,102,103],"spatial-transformer-network","thin-plate-splines","pytorch","2026-03-27T02:49:30.150509","2026-04-20T04:06:00.281200",[107,112,117,121,126,131],{"id":108,"question_zh":109,"answer_zh":110,"source_url":111},43171,"如何获取矫正后的图像输出？","矫正后的图像存储在变量 `transformed_x` 中。您可以参考代码第 102 行（https:\u002F\u002Fgithub.com\u002FWarBean\u002Ftps_stn_pytorch\u002Fblob\u002Fmaster\u002Fmnist_model.py#L102），修改代码将该变量提取出来作为输出。","https:\u002F\u002Fgithub.com\u002FWarBean\u002Ftps_stn_pytorch\u002Fissues\u002F2",{"id":113,"question_zh":114,"answer_zh":115,"source_url":116},43172,"训练该模型是否需要准备纠正后的 Ground Truth 图片作为监督信号？","不需要。该项目采用的是无监督学习方式，无需任何额外的监督信号（without any extra supervision）。请参阅 README 文件中的加粗说明部分。","https:\u002F\u002Fgithub.com\u002FWarBean\u002Ftps_stn_pytorch\u002Fissues\u002F3",{"id":118,"question_zh":119,"answer_zh":120,"source_url":111},43173,"运行示例代码需要自己准备数据集吗？如何使用自定义数据集？","运行作者提供的代码不需要额外准备数据，因为 PyTorch API 已内置了数据加载功能（如 MNIST）。如果您想使用自己的数据集，需要实现自定义的 DataLoader。具体实现方法可参考 PyTorch 官方教程：http:\u002F\u002Fpytorch.org\u002Ftutorials\u002Fbeginner\u002Fdata_loading_tutorial.html。",{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},43174,"source_control_points 参数代表什么含义？","在当前的 Issue 讨论中，维护者尚未对该参数的具体定义做出详细解释。通常在使用 TPS（薄板样条）变换时，它指的是源图像上用于定义变换网格的控制点坐标集合，建议结合代码中 `tps_stn.py` 或相关数学原理文档进一步理解其作用。","https:\u002F\u002Fgithub.com\u002FWarBean\u002Ftps_stn_pytorch\u002Fissues\u002F4",{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},43175,"如何将图像变换为目标形状（例如将衣物变换为掩码形状）？","虽然该 Issue 提出了将目标衣物变换为衣物掩码形状的具体应用场景，但维护者暂未在评论中提供直接的代码修改方案。通常这需要您构建一个包含源图像和目标控制点的自定义推理流程，利用库中的 TPS 变换模块，将源控制点映射到目标掩码定义的控制点上以实现形变。","https:\u002F\u002Fgithub.com\u002FWarBean\u002Ftps_stn_pytorch\u002Fissues\u002F5",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},43176,"为什么该项目的 TPS 结果与其他实现（如 tf_ThinPlateSpline）存在明显差异？","该 Issue 指出了不同实现间结果存在显著差异的问题，但截至目前维护者尚未在评论区给出具体原因分析或对比结论。这可能源于控制点选择策略、网格采样方式或边界处理条件的不同，建议检查两端代码中控制点初始化和 `grid_sample` 参数的设置是否一致。","https:\u002F\u002Fgithub.com\u002FWarBean\u002Ftps_stn_pytorch\u002Fissues\u002F15",[]]