[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-MPolaris--onnx2tflite":3,"tool-MPolaris--onnx2tflite":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 真正成长为懂上",150037,2,"2026-04-10T23:33:47",[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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[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":72,"owner_avatar_url":73,"owner_bio":74,"owner_company":75,"owner_location":76,"owner_email":75,"owner_twitter":75,"owner_website":75,"owner_url":77,"languages":78,"stars":83,"forks":84,"last_commit_at":85,"license":86,"difficulty_score":32,"env_os":87,"env_gpu":87,"env_ram":87,"env_deps":88,"category_tags":96,"github_topics":97,"view_count":32,"oss_zip_url":75,"oss_zip_packed_at":75,"status":17,"created_at":103,"updated_at":104,"faqs":105,"releases":134},6532,"MPolaris\u002Fonnx2tflite","onnx2tflite","Tool for onnx->keras or onnx->tflite. Hope this tool can help you.","onnx2tflite 是一款专注于模型格式转换的开源工具，旨在打通从 ONNX 到 Keras 或 TensorFlow Lite（TFLite）的部署路径。它主要解决了深度学习模型在不同框架间迁移困难的问题，特别是帮助开发者将 PyTorch 等框架训练的模型，通过标准的 ONNX 中间格式，高效地转换为适合移动端和嵌入式设备运行的 TFLite 模型。\n\n这款工具非常适合需要在边缘设备上部署模型的 AI 工程师、研究人员以及算法开发者使用。其核心亮点在于极高的转换一致性，输出结果与原始 ONNX 模型的平均误差小于 1e-5，确保了模型精度的可靠传承。同时，onnx2tflite 在转换速度上比同类工具提升约 30%，并具备自动通道对齐功能，能无缝处理 PyTorch (NCHW) 与 TensorFlow (NHWC) 之间的数据格式差异。此外，它还提供了灵活的量化支持，涵盖 FP16 和 INT8 等多种精度模式，允许用户通过简单的命令行参数或 Python 代码即可完成模型裁剪、重定义输入输出节点及权重量化，极大地简化了模型落地流程。","#  ONNX->Keras and ONNX->TFLite tools\n## Welcome\nIf you have some good ideas, welcome to discuss or give project PRs.\n\n## Install\n```cmd\ngit clone https:\u002F\u002Fgithub.com\u002FMPolaris\u002Fonnx2tflite.git\ncd onnx2tflite\npython setup.py install\n```\n```python\nfrom onnx2tflite import onnx_converter\nres = onnx_converter(\n        onnx_model_path = \".\u002Fmodel.onnx\",\n        need_simplify = True,\n        output_path = \".\u002Fmodels\u002F\",\n        target_formats = ['tflite'],\n    )\n```\n---\n```cmd\n# base\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\"\n\n# give save path\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\"\n\n# save tflite model\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\" --formats \"tflite\"\n\n# save keras and tflite model\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\" --formats \"tflite\" \"keras\"\n\n# cutoff model, redefine inputs and outputs, support middle layers\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\" --formats \"tflite\" --input-node-names \"layer_inputname\" --output-node-names \"layer_outname1\" \"layer_outname2\"\n\n# quantify model weight, only weight\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --formats \"tflite\" --weigthquant\n\n# quantify model weight, include input and output\n## fp16\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --formats \"tflite\" --fp16\n## recommend\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --formats \"tflite\" --int8 --imgroot \".\u002Fdataset_path\" --int8mean 0 0 0 --int8std 255 255 255\n## generate random data, instead of read from image file\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --formats \"tflite\" --int8\n```\n---\n## Features\n- High Consistency. Compare to ONNX outputs, average error less than 1e-5 per elements.\n- More Faster. Output tensorflow-lite model 30% faster than [onnx_tf](https:\u002F\u002Fgithub.com\u002Fonnx\u002Fonnx-tensorflow).\n- Auto Channel Align. Auto convert pytorch format(NCWH) to tensorflow format(NWHC).\n- Deployment Support. Support output quantitative model, include fp16 quantization and uint8 quantization.\n- Code Friendly. I've been trying to keep the code structure simple and clear.\n---\n\n## Pytorch -> ONNX -> Tensorflow-Keras -> Tensorflow-Lite\n\n- ### From torchvision to tensorflow-lite\n```python\nimport torch\nimport torchvision\n_input = torch.randn(1, 3, 224, 224)\nmodel = torchvision.models.mobilenet_v2(True)\n# use default settings is ok\ntorch.onnx.export(model, _input, '.\u002FmobilenetV2.onnx', opset_version=11)# or opset_version=13\n\nfrom converter import onnx_converter\nonnx_converter(\n    onnx_model_path = \".\u002FmobilenetV2.onnx\",\n    need_simplify = True,\n    output_path = \".\u002F\",\n    target_formats = ['tflite'], # or ['keras'], ['keras', 'tflite']\n    weight_quant = False,\n    fp16_model=False,\n    int8_model = False,\n    int8_mean = None,\n    int8_std = None,\n    image_root = None\n)\n```\n- ### From custom pytorch model to tensorflow-lite-int8\n```python\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass MyModel(nn.Module):\n    def __init__(self):\n        self.conv = nn.Sequential(\n            nn.Conv2d(3, 64, kernel_size=3, padding=1),\n            nn.BatchNorm2d(64),\n            nn.ReLU(inplace=True),\n        )\n    \n    def forward(self, x):\n        return self.conv(x)\n\nmodel = MyModel()\nmodel.load_state_dict(torch.load(\"model_checkpoint.pth\", map_location=\"cpu\"))\n\n_input = torch.randn(1, 3, 224, 224)\ntorch.onnx.export(model, _input, '.\u002Fmymodel.onnx', opset_version=11)# or opset_version=13\n\nfrom converter import onnx_converter\nonnx_converter(\n    onnx_model_path = \".\u002Fmymodel.onnx\",\n    need_simplify = True,\n    output_path = \".\u002F\",\n    target_formats = ['tflite'], #or ['keras'], ['keras', 'tflite']\n    weight_quant = False,\n    int8_model = True, # do quantification\n    int8_mean = [123.675, 116.28, 103.53], # give mean of image preprocessing \n    int8_std = [58.395, 57.12, 57.375], # give std of image preprocessing \n    image_root = \".\u002Fdataset\u002Ftrain\" # give image folder of train\n)\n```\n---\n## Validated models\n- [SSD](https:\u002F\u002Fgithub.com\u002Fqfgaohao\u002Fpytorch-ssd)\n- [HRNet](HRNet-Facial-Landmark-Detection)\n- [YOLOX](https:\u002F\u002Fgithub.com\u002FMegvii-BaseDetection\u002FYOLOX)\n- [YOLOV3](https:\u002F\u002Fgithub.com\u002Fultralytics\u002Fyolov3)\n- [YOLOV4](https:\u002F\u002Fgithub.com\u002FTianxiaomo\u002Fpytorch-YOLOv4)\n- [YOLOV5](https:\u002F\u002Fgithub.com\u002Fultralytics\u002Fyolov5)\n- [YOLOV6](https:\u002F\u002Fgithub.com\u002Fmeituan\u002FYOLOv6)\n- [YOLOV7](https:\u002F\u002Fgithub.com\u002FWongKinYiu\u002Fyolov7)\n- [YOLOV10](https:\u002F\u002Fgithub.com\u002FTHU-MIG\u002Fyolov10)\n- [MoveNet](https:\u002F\u002Fgithub.com\u002Ffire717\u002Fmovenet.pytorch)\n- [UNet\\FPN](https:\u002F\u002Fgithub.com\u002Fbigmb\u002FUnet-Segmentation-Pytorch-Nest-of-Unets)\n- ViT(torchvision)\n- [SwinTransformerV1](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FSwin-Transformer)\n- MLP(custom)\n- DCGAN(custom)\n- [AutoEncoder\u002FVAE](https:\u002F\u002Fgithub.com\u002FAntixK\u002FPyTorch-VAE)\n- all torchvision classification models\n- some segmation models in torchvision\n- 1D or 2D CNN without special operators(custom)\n---\n## Add operator by yourself\nWhen you counter unspported operator, you can choose to add it by yourself or make an issue.\u003Cbr\u002F>\nIt's very simple to implement a new operator parser by following these steps below.\u003Cbr\u002F>\nStep 0: Select a corresponding layer code file in [layers folder](.\u002Fonnx2tflite\u002Flayers\u002F), such as activations_layers.py for 'HardSigmoid'.\u003Cbr\u002F>\nStep 1: Open it, and edit it:\n```python\n# all operators regist through OPERATOR register.\n# regist operator's name is onnx operator name. \n@OPERATOR.register_operator(\"HardSigmoid\")\nclass TFHardSigmoid():\n    def __init__(self, tensor_grap, node_weights, node_inputs, node_attribute, node_outputs, layout_dict, *args, **kwargs) -> None:\n        '''\n        :param tensor_grap: dict, key is node name, value is tensorflow-keras node output tensor.\n        :param node_weights: dict, key is node name, value is static data, such as weight\u002Fbias\u002Fconstant, weight should be transfom by dimension_utils.tensor_NCD_to_NDC_format at most time.\n        :param node_inputs: List[str], stored node input names, indicates which nodes the input comes from, tensor_grap and node_weights are possible.\n        :param node_attribute: dict, key is attribute name, such as 'axis' or 'perm'. value type is indeterminate, such as List[int] or int or float. notice that type of 'axis' value should be adjusted form NCHW to NHWC by dimension_utils.channel_to_last_dimension or dimension_utils.shape_NCD_to_NDC_format.\n        :param node_inputs: List[str], stored node output names.\n        :param layout_dict: List[Layout], stored all before node's layout.\n        '''\n        super().__init__()\n        self.alpha = node_attribute.get(\"alpha\", 0.2)\n        self.beta = node_attribute.get(\"beta\", 0.5)\n\n    def __call__(self, inputs):\n        return tf.clip_by_value(self.alpha*inputs+self.beta, 0, 1)\n```\nStep 2: Make it work without error.\u003Cbr\u002F>\nStep 3: Convert model to tflite without any quantification.\u003Cbr\u002F>\n\n---\n\n# License\nThis software is covered by Apache-2.0 license.\n","# ONNX转Keras和ONNX转TFLite工具\n## 欢迎\n如果您有任何好的想法，欢迎讨论或提交项目PR。\n\n## 安装\n```cmd\ngit clone https:\u002F\u002Fgithub.com\u002FMPolaris\u002Fonnx2tflite.git\ncd onnx2tflite\npython setup.py install\n```\n```python\nfrom onnx2tflite import onnx_converter\nres = onnx_converter(\n        onnx_model_path = \".\u002Fmodel.onnx\",\n        need_simplify = True,\n        output_path = \".\u002Fmodels\u002F\",\n        target_formats = ['tflite'],\n    )\n```\n---\n```cmd\n# 基础用法\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\"\n\n# 指定保存路径\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\"\n\n# 仅保存TFLite模型\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\" --formats \"tflite\"\n\n# 同时保存Keras和TFLite模型\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\" --formats \"tflite\" \"keras\"\n\n# 截断模型、重新定义输入输出，并支持中间层\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\" --formats \"tflite\" --input-node-names \"layer_inputname\" --output-node-names \"layer_outname1\" \"layer_outname2\"\n\n# 对模型权重进行量化，仅量化权重\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --formats \"tflite\" --weigthquant\n\n# 对模型权重进行量化，同时包括输入和输出\n## FP16量化\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --formats \"tflite\" --fp16\n## 推荐方案\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --formats \"tflite\" --int8 --imgroot \".\u002Fdataset_path\" --int8mean 0 0 0 --int8std 255 255 255\n## 生成随机数据，而非从图像文件中读取\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --formats \"tflite\" --int8\n```\n---\n## 特性\n- 高一致性。与ONNX输出相比，每个元素的平均误差小于1e-5。\n- 更快的速度。生成TensorFlow Lite模型的速度比[onnx_tf](https:\u002F\u002Fgithub.com\u002Fonnx\u002Fonnx-tensorflow)快30%。\n- 自动通道对齐。自动将PyTorch格式(NCWH)转换为TensorFlow格式(NWHC)。\n- 部署支持。支持输出量化模型，包括FP16量化和UINT8量化。\n- 代码友好。我一直致力于保持代码结构简单明了。\n---\n\n## PyTorch -> ONNX -> TensorFlow-Keras -> TensorFlow-Lite\n\n- ### 从torchvision到tensorflow-lite\n```python\nimport torch\nimport torchvision\n_input = torch.randn(1, 3, 224, 224)\nmodel = torchvision.models.mobilenet_v2(True)\n# 使用默认设置即可\ntorch.onnx.export(model, _input, '.\u002FmobilenetV2.onnx', opset_version=11)# 或 opset_version=13\n\nfrom converter import onnx_converter\nonnx_converter(\n    onnx_model_path = \".\u002FmobilenetV2.onnx\",\n    need_simplify = True,\n    output_path = \".\u002F\",\n    target_formats = ['tflite'], # 或 ['keras'], ['keras', 'tflite']\n    weight_quant = False,\n    fp16_model=False,\n    int8_model = False,\n    int8_mean = None,\n    int8_std = None,\n    image_root = None\n)\n```\n- ### 从自定义PyTorch模型到tensorflow-lite-int8\n```python\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass MyModel(nn.Module):\n    def __init__(self):\n        self.conv = nn.Sequential(\n            nn.Conv2d(3, 64, kernel_size=3, padding=1),\n            nn.BatchNorm2d(64),\n            nn.ReLU(inplace=True),\n        )\n    \n    def forward(self, x):\n        return self.conv(x)\n\nmodel = MyModel()\nmodel.load_state_dict(torch.load(\"model_checkpoint.pth\", map_location=\"cpu\"))\n\n_input = torch.randn(1, 3, 224, 224)\ntorch.onnx.export(model, _input, '.\u002Fmymodel.onnx', opset_version=11)# 或 opset_version=13\n\nfrom converter import onnx_converter\nonnx_converter(\n    onnx_model_path = \".\u002Fmymodel.onnx\",\n    need_simplify = True,\n    output_path = \".\u002F\",\n    target_formats = ['tflite'], #或 ['keras'], ['keras', 'tflite']\n    weight_quant = False,\n    int8_model = True, # 进行量化\n    int8_mean = [123.675, 116.28, 103.53], # 给出图像预处理的均值\n    int8_std = [58.395, 57.12, 57.375], # 给出图像预处理的标准差\n    image_root = \".\u002Fdataset\u002Ftrain\" # 给出训练集的图像文件夹\n)\n```\n---\n## 已验证的模型\n- [SSD](https:\u002F\u002Fgithub.com\u002Fqfgaohao\u002Fpytorch-ssd)\n- [HRNet](HRNet-Facial-Landmark-Detection)\n- [YOLOX](https:\u002F\u002Fgithub.com\u002FMegvii-BaseDetection\u002FYOLOX)\n- [YOLOV3](https:\u002F\u002Fgithub.com\u002Fultralytics\u002Fyolov3)\n- [YOLOV4](https:\u002F\u002Fgithub.com\u002FTianxiaomo\u002Fpytorch-YOLOv4)\n- [YOLOV5](https:\u002F\u002Fgithub.com\u002Fultralytics\u002Fyolov5)\n- [YOLOV6](https:\u002F\u002Fgithub.com\u002Fmeituan\u002FYOLOv6)\n- [YOLOV7](https:\u002F\u002Fgithub.com\u002FWongKinYiu\u002Fyolov7)\n- [YOLOV10](https:\u002F\u002Fgithub.com\u002FTHU-MIG\u002Fyolov10)\n- [MoveNet](https:\u002F\u002Fgithub.com\u002Ffire717\u002Fmovenet.pytorch)\n- [UNet\\FPN](https:\u002F\u002Fgithub.com\u002Fbigmb\u002FUnet-Segmentation-Pytorch-Nest-of-Unets)\n- ViT(torchvision)\n- [SwinTransformerV1](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FSwin-Transformer)\n- MLP(自定义)\n- DCGAN(自定义)\n- [AutoEncoder\u002FVAE](https:\u002F\u002Fgithub.com\u002FAntixK\u002FPyTorch-VAE)\n- 所有torchvision分类模型\n- torchvision中的一些分割模型\n- 无特殊算子的1D或2D CNN(自定义)\n---\n## 自行添加算子\n当遇到不支持的算子时，您可以选择自行添加该算子，或提交问题。\u003Cbr\u002F>\n按照以下步骤实现新的算子解析器非常简单。\u003Cbr\u002F>\n步骤0：在[layers文件夹](.\u002Fonnx2tflite\u002Flayers\u002F)中选择对应的层代码文件，例如‘HardSigmoid’对应activations_layers.py。\u003Cbr\u002F>\n步骤1：打开并编辑该文件：\n```python\n# 所有算子都通过OPERATOR注册。\n# 注册的算子名称即为ONNX算子名称。\n@OPERATOR.register_operator(\"HardSigmoid\")\nclass TFHardSigmoid():\n    def __init__(self, tensor_grap, node_weights, node_inputs, node_attribute, node_outputs, layout_dict, *args, **kwargs) -> None:\n        '''\n        :param tensor_grap: 字典，键为节点名称，值为TensorFlow-Keras节点的输出张量。\n        :param node_weights: 字典，键为节点名称，值为静态数据，如权重\u002F偏置\u002F常数；权重通常需要通过dimension_utils.tensor_NCD_to_NDC_format函数进行转换。\n        :param node_inputs: 字符串列表，记录输入节点的名称，表明输入来自哪些节点，可能是tensor_grap或node_weights中的内容。\n        :param node_attribute: 字典，键为属性名称，如'axis'或'perm'，值类型不确定，可能是List[int]、int或float。注意，'axis'的值应通过dimension_utils.channel_to_last_dimension或dimension_utils.shape_NCD_to_NDC_format函数从NCHW格式调整为NHWC格式。\n        :param node_inputs: 字符串列表，记录输出节点的名称。\n        :param layout_dict: 列表，记录所有前置节点的布局。\n        '''\n        super().__init__()\n        self.alpha = node_attribute.get(\"alpha\", 0.2)\n        self.beta = node_attribute.get(\"beta\", 0.5)\n\n    def __call__(self, inputs):\n        return tf.clip_by_value(self.alpha*inputs+self.beta, 0, 1)\n```\n步骤2：确保代码运行无误。\u003Cbr\u002F>\n步骤3：将模型转换为TFLite，无需任何量化。\u003Cbr\u002F>\n\n---\n\n# 许可证\n本软件受Apache-2.0许可证保护。","# onnx2tflite 快速上手指南\n\n`onnx2tflite` 是一款高效工具，用于将 ONNX 模型转换为 TensorFlow Keras 或 TensorFlow Lite (TFLite) 格式。它支持自动通道对齐（NCHW 转 NHWC）、高精度转换（误差 \u003C 1e-5）以及多种量化方案（FP16\u002FINT8），特别适合将 PyTorch 模型部署到移动端。\n\n## 环境准备\n\n*   **操作系统**: Linux, macOS, Windows\n*   **Python 版本**: 建议 Python 3.6+\n*   **前置依赖**:\n    *   `tensorflow` (建议 2.x 版本)\n    *   `onnx`\n    *   `onnx-simplifier` (可选，用于模型简化)\n    *   `torch` \u002F `torchvision` (如果需要从 PyTorch 导出 ONNX)\n\n> **提示**：国内开发者安装依赖时，推荐使用清华或阿里镜像源加速：\n> ```cmd\n> pip install tensorflow onnx onnx-simplifier -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n## 安装步骤\n\n通过源码克隆并安装：\n\n```cmd\ngit clone https:\u002F\u002Fgithub.com\u002FMPolaris\u002Fonnx2tflite.git\ncd onnx2tflite\npython setup.py install\n```\n\n## 基本使用\n\n### 1. Python API 调用（推荐）\n\n这是最简洁的使用方式，适合集成到自动化脚本中。以下示例将 `model.onnx` 转换为 TFLite 格式，并自动进行模型简化。\n\n```python\nfrom onnx2tflite import onnx_converter\n\nres = onnx_converter(\n        onnx_model_path = \".\u002Fmodel.onnx\",\n        need_simplify = True,\n        output_path = \".\u002Fmodels\u002F\",\n        target_formats = ['tflite'],\n    )\n```\n\n### 2. 命令行工具 (CLI)\n\n如果你更喜欢命令行操作，可以使用以下基础命令：\n\n**基础转换：**\n```cmd\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\"\n```\n\n**指定输出路径和格式：**\n```cmd\npython -m onnx2tflite --weights \".\u002Fyour_model.onnx\" --outpath \".\u002Fsave_path\" --formats \"tflite\"\n```\n\n### 3. 典型工作流：PyTorch -> ONNX -> TFLite\n\n对于 PyTorch 用户，完整的转换流程如下：\n\n1.  **导出 ONNX**:\n    ```python\n    import torch\n    import torchvision\n    \n    # 加载模型\n    model = torchvision.models.mobilenet_v2(True)\n    _input = torch.randn(1, 3, 224, 224)\n    \n    # 导出为 ONNX (opset_version 建议 11 或 13)\n    torch.onnx.export(model, _input, '.\u002FmobilenetV2.onnx', opset_version=11)\n    ```\n\n2.  **转换为 TFLite**:\n    ```python\n    from onnx2tflite import onnx_converter\n    \n    onnx_converter(\n        onnx_model_path = \".\u002FmobilenetV2.onnx\",\n        need_simplify = True,\n        output_path = \".\u002F\",\n        target_formats = ['tflite'],\n        weight_quant = False,   # 是否仅权重量化\n        fp16_model=False,       # 是否 FP16 量化\n        int8_model = False,     # 是否 INT8 量化\n    )\n    ```\n\n> **进阶提示**：若需进行 INT8 量化以提升推理速度，需在 `onnx_converter` 中设置 `int8_model=True`，并提供训练集路径 (`image_root`) 及预处理均值\u002F标准差 (`int8_mean`, `int8_std`)。","某嵌入式团队正致力于将基于 PyTorch 研发的缺陷检测模型部署到资源受限的 Android 工业平板上。\n\n### 没有 onnx2tflite 时\n- **格式转换断层**：团队需手动编写脚本将 PyTorch 模型转为 ONNX，再借助其他工具转 TensorFlow，最后才能生成 TFLite，链路冗长且极易出错。\n- **精度严重损失**：在多层框架转换中，由于通道顺序（NCHW 与 NHWC）不自动对齐，导致推理结果偏差大，需花费数天逐层排查数值误差。\n- **量化门槛极高**：为了让模型在低端设备流畅运行，需进行 INT8 量化，但手动配置校准数据集、计算均值方差极其复杂，往往因调试失败而放弃优化。\n- **推理性能不足**：生成的模型未经过针对性优化，在移动端推理速度比预期慢 40%，无法满足产线实时检测需求。\n\n### 使用 onnx2tflite 后\n- **一键直通部署**：直接读取 ONNX 模型，通过一行代码即可输出高精度 TFLite 模型，自动完成从 PyTorch 到 TensorFlow 的格式跨越。\n- **精度完美保持**：工具自动处理通道对齐，官方验证平均元素误差小于 1e-5，确保移动端推理结果与训练端完全一致。\n- **量化简单高效**：只需指定数据集路径和预处理参数（如均值、标准差），onnx2tflite 即可自动生成 INT8 量化模型，大幅降低模型体积。\n- **性能显著提升**：生成的量化模型在目标设备上推理速度提升 30% 以上，成功满足产线毫秒级响应要求。\n\nonnx2tflite 通过打通跨框架转换的“最后一公里”，让算法工程师能专注于模型创新而非繁琐的工程适配。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMPolaris_onnx2tflite_6119befd.png","MPolaris","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FMPolaris_52732660.jpg","I am an normal algorithm engineer.",null,"China","https:\u002F\u002Fgithub.com\u002FMPolaris",[79],{"name":80,"color":81,"percentage":82},"Python","#3572A5",100,578,55,"2026-03-24T11:10:27","Apache-2.0","未说明",{"notes":89,"python":87,"dependencies":90},"该工具主要用于将 ONNX 模型转换为 Keras 或 TFLite 格式。支持 INT8、FP16 量化（需指定数据集路径或生成随机数据）。代码结构清晰，支持用户自定义添加不支持的算子。安装方式为克隆仓库后运行 `python setup.py install`。",[91,92,93,94,95],"onnx","tensorflow","torch","torchvision","keras",[14],[98,64,99,100,91,101,102],"onnx2keras","onnx2tensorflow","deployment","pytorch2tensorflow","quantization","2026-03-27T02:49:30.150509","2026-04-11T15:14:46.123017",[106,111,116,121,126,130],{"id":107,"question_zh":108,"answer_zh":109,"source_url":110},29536,"为什么分组卷积（Group Convolution）的实现采用了先拆分再拼接的方式，而不是直接使用原生算子？","这种实现方式主要是为了兼容旧版本的 TensorFlow Lite。在较新的 TFLite 版本中已经原生支持该操作，但在旧版本中不支持。维护者建议默认使用拆分版本以保证兼容性，同时指出如果环境较新（如 TFLite nightly 版本），可以直接使用原生支持。具体支持版本需参考 TensorFlow 官方更新日志。","https:\u002F\u002Fgithub.com\u002FMPolaris\u002Fonnx2tflite\u002Fissues\u002F19",{"id":112,"question_zh":113,"answer_zh":114,"source_url":115},29537,"转换过程中遇到 ReduceSum 或 ConvTranspose（转置卷积）算子报错怎么办？","对于 ReduceSum 缺失，可以在 `mathematics_layers.py` 文件中自定义添加该算子实现。对于 ConvTranspose 报错，通常是因为 ONNX 和 TFLite 实现差异导致的维度不匹配。解决方法是调试 `conv_layers.py` 中的 ConvTranspose 代码，重点检查 `self.pad` 部分。目前的 Crop 方式可能不适用，需要手动调整以确保输出维度正确，必要时可截断相关的 Add 算子进行验证。","https:\u002F\u002Fgithub.com\u002FMPolaris\u002Fonnx2tflite\u002Fissues\u002F29",{"id":117,"question_zh":118,"answer_zh":119,"source_url":120},29538,"模型转换成功但运行时报错 'num_input_elements != num_output_elements' 且指向 Reshape 或 Pad 节点，如何解决？","该错误通常由传递给 `tf.pad` 的参数类型不正确引起。确保传递给 pad 操作的数组元素均为普通的整数（normal integer），而不是 TensorFlow 的 EagerTensor 对象。修改代码将参数转换为普通整数列表后，重新转换并运行模型即可解决此问题。","https:\u002F\u002Fgithub.com\u002FMPolaris\u002Fonnx2tflite\u002Fissues\u002F97",{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},29539,"转换后的模型输出维度不正确（例如从 128 变为 1000）导致识别功能失效，原因是什么？","这通常是因为用户误用了错误的输入模型文件。常见情况是用户自己导出的测试模型（如 MobileNet）被命名成了目标模型文件名（如 face_recognition_sface_2021dec.onnx），导致转换了错误的网络结构。解决方法是删除本地同名文件，重新从官方源（如 OpenCV Zoo）下载正确的原始 ONNX 模型，然后再次执行转换脚本。","https:\u002F\u002Fgithub.com\u002FMPolaris\u002Fonnx2tflite\u002Fissues\u002F18",{"id":127,"question_zh":128,"answer_zh":129,"source_url":125},29540,"转换后的 TFLite 模型文件大小与原始 ONNX 模型几乎一样，没有看到体积优化，是否正常？","这是正常现象。标准的 ONNX 转 TFLite 过程主要关注算子映射和格式转换，默认不包含去冗余或深度压缩操作。如果需要显著减小模型体积，需要在转换参数中启用量化选项（如设置 `weight_quant=True` 或 `int8_model=True`），或者在转换前使用工具（如 onnx-simplifier）对 ONNX 模型进行去冗余处理。",{"id":131,"question_zh":132,"answer_zh":133,"source_url":125},29541,"如果遇到精度下降或该工具无法支持的算子，有什么替代方案或建议？","如果遇到精度问题或算子不支持（特别是 RNN 类），可以尝试使用功能更丰富的替代工具 `onnx2tf` (https:\u002F\u002Fgithub.com\u002FPINTO0309\u002Fonnx2tf)。该工具支持几乎所有算子及多种量化模式（INT8, INT16 等）。精度下降通常是因为缺少特定的转换参数配置，建议参考 `onnx2tf` 的相关 Issue（如 #8）来调整参数以获得最佳精度。",[]]