[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-yu4u--noise2noise":3,"tool-yu4u--noise2noise":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 真正成长为懂上",153609,2,"2026-04-13T11:34:59",[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":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":77,"owner_twitter":77,"owner_website":78,"owner_url":79,"languages":80,"stars":85,"forks":86,"last_commit_at":87,"license":88,"difficulty_score":10,"env_os":89,"env_gpu":90,"env_ram":89,"env_deps":91,"category_tags":99,"github_topics":100,"view_count":32,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":105,"updated_at":106,"faqs":107,"releases":143},7135,"yu4u\u002Fnoise2noise","noise2noise","An unofficial and partial Keras implementation of \"Noise2Noise: Learning Image Restoration without Clean Data\"","noise2noise 是一个基于 Keras 框架开发的开源项目，旨在复现“无需干净数据即可学习图像修复”的前沿理念。传统深度学习去噪方法通常依赖成对的“噪声 - 清晰”图像进行训练，但在实际应用中，获取完美的干净参考图往往非常困难。noise2noise 巧妙地解决了这一痛点，它允许开发者直接利用两张不同的噪声图像作为输入和目标进行模型训练，从而在缺乏干净真值数据的情况下，依然能培养出有效的图像去噪或修复模型。\n\n该项目不仅支持经典的高斯噪声处理，还独特地扩展了对随机文本遮挡和脉冲噪声的模拟与训练能力，并提供了 L0 损失函数等进阶选项。在架构上，用户可灵活选择 SRResNet 或 UNet 等主流神经网络模型。由于这是一个非官方的部分实现版本，且涉及具体的代码配置、数据集准备及命令行训练操作，noise2noise 主要适合具备一定编程基础的 AI 研究人员和深度学习开发者使用。对于希望探索自监督学习在计算机视觉中应用，或受限于数据标注成本的技术团队来说，它是一个极具参考价值的实验性工具。","# Noise2Noise\n\nThis is an unofficial and partial Keras implementation of \"Noise2Noise: Learning Image Restoration without Clean Data\" [1].\n\nThere are several things different from the original paper\n(but not a fatal problem to see how the noise2noise training framework works):\n- Training dataset (orignal: ImageNet, this repository: [2])\n- Model (original: RED30 [3], this repository: SRResNet [4] or UNet [5])\n\nUpdates:\n- [Sep. 21, 2018] Random-valued impulse noise model and L0 loss were added\n- [Aug. 25, 2018] UNet model can be used in training\n- [Aug. 25, 2018] Add trained weights\n\n## Dependencies\n- Keras >= 2.1.2, TensorFlow, NumPy, OpenCV\n\n## Train Noise2Noise\n\n### Download Dataset\n\n```bash\nmkdir dataset\ncd dataset\nwget https:\u002F\u002Fcv.snu.ac.kr\u002Fresearch\u002FVDSR\u002Ftrain_data.zip\nwget https:\u002F\u002Fcv.snu.ac.kr\u002Fresearch\u002FVDSR\u002Ftest_data.zip\nunzip train_data.zip\nunzip test_data.zip\ncd ..\n```\n\nAny dataset can be used in training and validation instead of the above dataset.\n\n### Train Model\nPlease see `python3 train.py -h` for optional arguments.\n\n\n#### Train with Gaussian noise\n```bash\n# train model using (noise, noise) pairs (noise2noise)\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --output_path gaussian\n\n# train model using (noise, clean) paris (standard training)\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --target_noise_model clean --output_path clean\n```\n\n\n#### Train with text insertion\n\n```bash\n# train model using (noise, noise) pairs (noise2noise)\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model text,0,50 --target_noise_model text,0,50 --val_noise_model text,25,25 --loss mae --output_path text_noise\n\n# train model using (noise, clean) paris (standard training)\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model text,0,50 --target_noise_model clean --val_noise_model text,25,25 --loss mae --output_path text_clean\n```\n\n#### Train with random-valued impulse noise\n\n```bash\n# train model using (noise, noise) pairs (noise2noise)\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model impulse,0,95 --target_noise_model impulse,0,95 --val_noise_model impulse,70,70 --loss l0 --output_path impulse_noise\n\n# train model using (noise, clean) paris (standard training)\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model impulse,0,95 --target_noise_model clean --val_noise_model impulse,70,70 --loss l0 --output_path impulse_clean\n```\n\n##### Model architectures\nWith `--model unet`, UNet model can be trained instead of SRResNet.\n\n##### Resume training\nWith `--weight path\u002Fto\u002Fweight\u002Ffile`, training can be resumed with trained weights.\n\n\n### Noise Models\nUsing `source_noise_model`, `target_noise_model`, and `val_noise_model` arguments,\narbitrary noise models can be set for source images, target images, and validatoin images respectively.\nDefault values are taken from the experiment in [1].\n\n- Gaussian noise\n  - gaussian,min_stddev,max_stddev (e.g. gaussian,0,50)\n- Clean target\n  - clean\n- Text insertion\n  - text,min_occupancy,max_occupancy (e.g. text,0,50)\n- Random-valued impulse noise\n  - impulse,min_occupancy,max_occupancy (e.g. impulse,0,50)\n\nYou can see how these noise models work by:\n\n```bash\npython3 noise_model.py --noise_model text,0,95\n```\n\n### Results\n#### Plot training history\n\n```bash\npython3 plot_history.py --input1 gaussian --input2 clean\n```\n\n##### Gaussian noise\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_6f25793f46d0.png\" width=\"480px\">\n\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_8f2e08a28b25.png\" width=\"480px\">\n\nFrom the above result, I confirm that we can train denoising model using noisy targets\nbut it is not comparable to the model trained using clean targets.\nIf UNet is used, the result becomes 29.67 (noisy targets) vs. 30.14 (clean targets).\n\n##### Text insertion\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_9190938a290a.png\" width=\"480px\">\n\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_6a70f592bad2.png\" width=\"480px\">\n\n#### Random-valued impulse noise\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_2b0d08db9713.png\" width=\"480px\">\n\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_9f6f40cc5606.png\" width=\"480px\">\n\n\n#### Check denoising result\n\n```bash\npython3 test_model.py --weight_file [trained_model_path] --image_dir dataset\u002FSet14\n```\n\nThe detailed options are:\n\n```bash\noptional arguments:\n  -h, --help            show this help message and exit\n  --image_dir IMAGE_DIR\n                        test image dir (default: None)\n  --model MODEL         model architecture ('srresnet' or 'unet') (default:\n                        srresnet)\n  --weight_file WEIGHT_FILE\n                        trained weight file (default: None)\n  --test_noise_model TEST_NOISE_MODEL\n                        noise model for test images (default: gaussian,25,25)\n  --output_dir OUTPUT_DIR\n                        if set, save resulting images otherwise show result\n                        using imshow (default: None)\n```\nThis script adds noise using `test_noise_model` to each image in `image_dir` and performs denoising.\nIf you want to perform denoising to already noisy images, use `--test_noise_model clean`.\n\n##### Gaussian noise\nDenoising result by clean target model (left to right: original, degraded image, denoised image):\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_f9fb7983f7c4.png\" width=\"800px\">\n\nDenoising result by noise target model:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_abb187e02c4f.png\" width=\"800px\">\n\n##### Text insertion\nDenoising result by clean target model\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_72d476c93be0.png\" width=\"800px\">\n\nDenoising result by noise target model:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_3713f32b2426.png\" width=\"800px\">\n\n##### Random-valued impulse noise\nDenoising result by clean target model\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_bb9c7c340c47.png\" width=\"800px\">\n\nDenoising result by noise target model:\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_3e6984045f4b.png\" width=\"800px\">\n\n\n#### Trained weights\n\n[Gaussian noise, noise target](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.040-87.447-29.13496_gauss_noise.hdf5)\n\n[Gaussian noise, clean target](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.056-66.803-30.57923_gauss_clean.hdf5)\n\n[Text insertion, noise target](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.057-4.796-27.68533_text_noise.hdf5)\n\n[Text insertion, clean target](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.056-4.172-28.07752_text_clean.hdf5)\n\n[Random-valued impulse noise, noise target](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.047-2.317-24.30238_impulse_noise.hdf5)\n\n[Random-valued impulse noise, clean target](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.038-4.547-24.81654_impulse_clean.hdf5)\n\n### TODOs\n\n- [x] Compare (noise, clean) training and (noise, noise) training\n- [x] Add different noise models\n- [x] Write readme\n\n## References\n\n[1] J. Lehtinen, J. Munkberg, J. Hasselgren, S. Laine, T. Karras, M. Aittala, \nT. Aila, \"Noise2Noise: Learning Image Restoration without Clean Data,\" in Proc. of ICML, 2018.\n\n[2] J. Kim, J. K. Lee, and K. M. Lee, \"Accurate Image Super-Resolution Using Very Deep Convolutional Networks,\" in Proc. of CVPR, 2016.\n\n[3] X.-J. Mao, C. Shen, and Y.-B. Yang, \"Image\nRestoration Using Convolutional Auto-Encoders with\nSymmetric Skip Connections,\" in Proc. of NIPS, 2016.\n\n[4] C. Ledig, et al., \"Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network,\" in Proc. of CVPR, 2017.\n\n[5] O. Ronneberger, P. Fischer, and T. Brox, \"U-Net: Convolutional Networks for Biomedical Image Segmentation,\" in MICCAI, 2015.\n","# Noise2Noise\n\n这是一个“Noise2Noise：无需干净数据即可学习图像修复”[1]的非官方且部分实现的Keras版本。\n\n与原始论文相比，有几个不同之处\n（但并不影响理解Noise2Noise训练框架的工作原理）：\n- 训练数据集（原论文：ImageNet，本仓库：[2]）\n- 模型（原论文：RED30 [3]，本仓库：SRResNet [4] 或 UNet [5]）\n\n更新：\n- [2018年9月21日] 添加了随机值脉冲噪声模型和L0损失\n- [2018年8月25日] 可以使用UNet模型进行训练\n- [2018年8月25日] 添加了已训练好的权重\n\n## 依赖项\n- Keras >= 2.1.2, TensorFlow, NumPy, OpenCV\n\n## 训练Noise2Noise\n\n### 下载数据集\n\n```bash\nmkdir dataset\ncd dataset\nwget https:\u002F\u002Fcv.snu.ac.kr\u002Fresearch\u002FVDSR\u002Ftrain_data.zip\nwget https:\u002F\u002Fcv.snu.ac.kr\u002Fresearch\u002FVDSR\u002Ftest_data.zip\nunzip train_data.zip\nunzip test_data.zip\ncd ..\n```\n\n除了上述数据集外，任何数据集都可以用于训练和验证。\n\n### 训练模型\n请参阅 `python3 train.py -h` 以了解可选参数。\n\n\n#### 使用高斯噪声训练\n```bash\n# 使用（噪声，噪声）对进行训练（noise2noise）\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --output_path gaussian\n\n# 使用（噪声，干净）对进行训练（标准训练）\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --target_noise_model clean --output_path clean\n```\n\n\n#### 使用文本插入噪声训练\n\n```bash\n# 使用（噪声，噪声）对进行训练（noise2noise）\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model text,0,50 --target_noise_model text,0,50 --val_noise_model text,25,25 --loss mae --output_path text_noise\n\n# 使用（噪声，干净）对进行训练（标准训练）\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model text,0,50 --target_noise_model clean --val_noise_model text,25,25 --loss mae --output_path text_clean\n```\n\n\n#### 使用随机值脉冲噪声训练\n\n```bash\n# 使用（噪声，噪声）对进行训练（noise2noise）\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model impulse,0,95 --target_noise_model impulse,0,95 --val_noise_model impulse,70,70 --loss l0 --output_path impulse_noise\n\n# 使用（噪声，干净）对进行训练（标准训练）\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model impulse,0,95 --target_noise_model clean --val_noise_model impulse,70,70 --loss l0 --output_path impulse_clean\n```\n\n\n##### 模型架构\n通过 `--model unet` 参数，可以使用UNet模型代替SRResNet进行训练。\n\n##### 继续训练\n通过 `--weight path\u002Fto\u002Fweight\u002Ffile` 参数，可以使用已训练好的权重继续训练。\n\n\n### 噪声模型\n使用 `source_noise_model`、`target_noise_model` 和 `val_noise_model` 参数，\n可以分别为源图像、目标图像和验证图像设置任意噪声模型。\n默认值取自[1]中的实验。\n\n- 高斯噪声\n  - gaussian,min_stddev,max_stddev（例如gaussian,0,50）\n- 干净目标\n  - clean\n- 文本插入\n  - text,min_occupancy,max_occupancy（例如text,0,50）\n- 随机值脉冲噪声\n  - impulse,min_occupancy,max_occupancy（例如impulse,0,50）\n\n可以通过以下命令查看这些噪声模型的效果：\n\n```bash\npython3 noise_model.py --noise_model text,0,95\n```\n\n### 结果\n#### 绘制训练历史\n\n```bash\npython3 plot_history.py --input1 gaussian --input2 clean\n```\n\n##### 高斯噪声\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_6f25793f46d0.png\" width=\"480px\">\n\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_8f2e08a28b25.png\" width=\"480px\">\n\n从上述结果可以看出，我们可以使用带噪声的目标图像来训练去噪模型，\n但其效果无法与使用干净目标图像训练的模型相媲美。\n如果使用UNet模型，结果为29.67（噪声目标） vs. 30.14（干净目标）。\n\n##### 文本插入\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_9190938a290a.png\" width=\"480px\">\n\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_6a70f592bad2.png\" width=\"480px\">\n\n#### 随机值脉冲噪声\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_2b0d08db9713.png\" width=\"480px\">\n\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_9f6f40cc5606.png\" width=\"480px\">\n\n\n#### 检查去噪结果\n\n```bash\npython3 test_model.py --weight_file [trained_model_path] --image_dir dataset\u002FSet14\n```\n\n详细选项如下：\n\n```bash\n可选参数：\n  -h, --help            显示此帮助信息并退出\n  --image_dir IMAGE_DIR\n                        测试图像目录（默认：无）\n  --model MODEL         模型架构（'srresnet' 或 'unet'）（默认：srresnet）\n  --weight_file WEIGHT_FILE\n                        已训练好的权重文件（默认：无）\n  --test_noise_model TEST_NOISE_MODEL\n                        测试图像的噪声模型（默认：gaussian,25,25）\n  --output_dir OUTPUT_DIR\n                        如果设置，则保存结果图像；否则使用imshow显示结果（默认：无）\n```\n该脚本会使用 `test_noise_model` 对 `image_dir` 中的每张图像添加噪声，并执行去噪处理。\n如果要对已经带有噪声的图像进行去噪，请使用 `--test_noise_model clean`。\n\n##### 高斯噪声\n由干净目标模型去噪的结果（从左到右：原图、退化图像、去噪图像）：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_f9fb7983f7c4.png\" width=\"800px\">\n\n由噪声目标模型去噪的结果：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_abb187e02c4f.png\" width=\"800px\">\n\n##### 文本插入\n由干净目标模型去噪的结果\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_72d476c93be0.png\" width=\"800px\">\n\n由噪声目标模型去噪的结果：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_3713f32b2426.png\" width=\"800px\">\n\n##### 随机值脉冲噪声\n由干净目标模型去噪的结果\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_bb9c7c340c47.png\" width=\"800px\">\n\n由噪声目标模型去噪的结果：\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_readme_3e6984045f4b.png\" width=\"800px\">\n\n\n#### 已训练好的权重\n\n[高斯噪声，噪声目标]（https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.040-87.447-29.13496_gauss_noise.hdf5）\n\n[高斯噪声，干净目标]（https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.056-66.803-30.57923_gauss_clean.hdf5）\n\n[文本插入，噪声目标]（https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.057-4.796-27.68533_text_noise.hdf5）\n\n[文本插入，干净目标]（https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.056-4.172-28.07752_text_clean.hdf5）\n\n[随机值脉冲噪声，噪声目标]（https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.047-2.317-24.30238_impulse_noise.hdf5）\n\n[随机值脉冲噪声，干净目标]（https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.038-4.547-24.81654_impulse_clean.hdf5）\n\n### 待办事项\n\n- [x] 比较（噪声，干净）训练和（噪声，噪声）训练\n- [x] 添加不同的噪声模型\n- [x] 编写 README 文件\n\n## 参考文献\n\n[1] J. Lehtinen, J. Munkberg, J. Hasselgren, S. Laine, T. Karras, M. Aittala, \nT. Aila，“Noise2Noise：无需干净数据即可学习图像修复”，载于 ICML 会议论文集，2018 年。\n\n[2] J. Kim, J. K. Lee 和 K. M. Lee，“利用非常深的卷积神经网络实现高精度图像超分辨率”，载于 CVPR 会议论文集，2016 年。\n\n[3] X.-J. Mao, C. Shen 和 Y.-B. Yang，“使用具有对称跳跃连接的卷积自编码器进行图像修复”，载于 NIPS 会议论文集，2016 年。\n\n[4] C. Ledig 等人，“基于生成对抗网络的逼真单张图像超分辨率”，载于 CVPR 会议论文集，2017 年。\n\n[5] O. Ronneberger、P. Fischer 和 T. Brox，“U-Net：用于生物医学图像分割的卷积网络”，载于 MICCAI 会议论文集，2015 年。","# Noise2Noise 快速上手指南\n\nNoise2Noise 是一个基于 Keras 的开源项目，实现了“无需干净数据即可学习图像复原”的算法。本指南将帮助你快速搭建环境并运行训练与测试。\n\n## 1. 环境准备\n\n在开始之前，请确保你的系统满足以下要求：\n\n*   **操作系统**: Linux \u002F macOS \u002F Windows (需配置好 Python 环境)\n*   **Python**: 推荐 Python 3.6+\n*   **核心依赖**:\n    *   Keras >= 2.1.2\n    *   TensorFlow (后端)\n    *   NumPy\n    *   OpenCV (`opencv-python`)\n\n**安装依赖命令：**\n\n```bash\npip install keras tensorflow numpy opencv-python\n```\n\n> **提示**：国内用户建议使用清华或阿里镜像源加速安装：\n> `pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple keras tensorflow numpy opencv-python`\n\n## 2. 安装与数据准备\n\n克隆或下载本项目代码后，首先需要准备训练数据集。本项目默认使用 291 图像集进行训练，Set14 进行测试。\n\n**下载数据集命令：**\n\n```bash\nmkdir dataset\ncd dataset\nwget https:\u002F\u002Fcv.snu.ac.kr\u002Fresearch\u002FVDSR\u002Ftrain_data.zip\nwget https:\u002F\u002Fcv.snu.ac.kr\u002Fresearch\u002FVDSR\u002Ftest_data.zip\nunzip train_data.zip\nunzip test_data.zip\ncd ..\n```\n\n> **注意**：如果 `wget` 下载速度慢，可手动在浏览器下载上述 zip 文件并解压到 `dataset` 目录下，或使用国内图床替换链接。你也可以使用任何自定义数据集替代，只需调整后续命令中的路径。\n\n## 3. 基本使用\n\n### 3.1 模型训练\n\n你可以选择使用 **(噪声，噪声)** 配对（Noise2Noise 核心模式）或 **(噪声，干净)** 配对（标准监督模式）进行训练。\n\n#### 场景 A：高斯噪声去噪 (Gaussian Noise)\n\n**方式一：Noise2Noise 模式 (无需干净标签)**\n```bash\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --output_path gaussian\n```\n\n**方式二：标准监督模式 (需要干净标签作为对比)**\n```bash\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --target_noise_model clean --output_path clean\n```\n\n#### 场景 B：文字遮挡修复 (Text Insertion)\n\n```bash\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model text,0,50 --target_noise_model text,0,50 --val_noise_model text,25,25 --loss mae --output_path text_noise\n```\n\n#### 场景 C：随机值脉冲噪声 (Impulse Noise)\n\n```bash\npython3 train.py --image_dir dataset\u002F291 --test_dir dataset\u002FSet14 --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model impulse,0,95 --target_noise_model impulse,0,95 --val_noise_model impulse,70,70 --loss l0 --output_path impulse_noise\n```\n\n**其他训练选项：**\n*   **切换模型架构**: 添加 `--model unet` 可使用 UNet 代替默认的 SRResNet。\n*   **断点续训**: 添加 `--weight path\u002Fto\u002Fweight\u002Ffile` 加载已训练的权重继续训练。\n\n### 3.2 模型测试与推理\n\n训练完成后，使用以下命令对测试集进行去噪处理并查看结果。\n\n**基本测试命令：**\n```bash\npython3 test_model.py --weight_file [trained_model_path] --image_dir dataset\u002FSet14\n```\n\n**常用参数说明：**\n*   `--weight_file`: 指定训练好的 `.hdf5` 权重文件路径。\n*   `--image_dir`: 测试图片目录。\n*   `--model`: 模型架构 (`srresnet` 或 `unet`)，默认为 `srresnet`。\n*   `--test_noise_model`: 测试时添加的噪声类型 (默认 `gaussian,25,25`)。\n    *   如果你要直接对**已经含有噪声的图片**进行去噪，请设置为 `clean`，例如：`--test_noise_model clean`。\n*   `--output_dir`: 如果设置此参数，结果图片将保存到该目录；否则直接使用 `imshow` 弹窗显示。\n\n**示例：使用预训练权重测试高斯噪声去噪（直接处理已有噪声图）：**\n```bash\npython3 test_model.py --weight_file weights.040-87.447-29.13496_gauss_noise.hdf5 --image_dir dataset\u002FSet14 --test_noise_model clean --output_dir results\n```\n\n### 3.3 可视化训练历史\n\n查看训练过程中的 Loss 和 PSNR 变化曲线：\n\n```bash\npython3 plot_history.py --input1 gaussian --input2 clean\n```\n\n### 3.4 预训练权重下载\n\n如果不想从头训练，可以直接下载官方提供的预训练权重：\n\n*   **高斯噪声 (Noise Target)**: [下载链接](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.040-87.447-29.13496_gauss_noise.hdf5)\n*   **高斯噪声 (Clean Target)**: [下载链接](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.056-66.803-30.57923_gauss_clean.hdf5)\n*   **文字遮挡 (Noise Target)**: [下载链接](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.057-4.796-27.68533_text_noise.hdf5)\n*   **脉冲噪声 (Noise Target)**: [下载链接](https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Freleases\u002Fdownload\u002Fv0.1\u002Fweights.047-2.317-24.30238_impulse_noise.hdf5)\n\n*(注：更多权重请访问项目 GitHub Release 页面)*","某医疗影像初创团队正在开发一款眼底筛查系统，但面临海量历史病历图片均带有不同程度的传感器噪点，且完全缺乏对应的“干净”原始图像作为训练标签。\n\n### 没有 noise2noise 时\n- **数据标注成本极高**：为了训练去噪模型，团队必须人工合成噪声或寻找极少量的配对数据，耗时数月仍无法覆盖真实的临床噪声分布。\n- **模型泛化能力差**：使用合成数据训练的模型在面对真实医疗设备产生的复杂高斯噪声或脉冲噪声时，去噪效果大打折扣，甚至模糊了病灶细节。\n- **项目进度受阻**：由于无法获取理想的“噪声 - 清晰”配对数据集，核心的图像增强模块迟迟无法进入验证阶段，导致产品上线计划被迫推迟。\n- **算法选择受限**：传统监督学习方法强依赖干净标签，使得团队在面对只有脏数据的场景时束手无策，只能放弃深度学习方案退回到效果有限的传统滤波算法。\n\n### 使用 noise2noise 后\n- **无需干净数据即可训练**：团队直接利用现有的两张不同噪声版本的眼底图作为输入和目标进行训练，彻底摆脱了对“完美清晰图”的依赖，数据准备时间从数月缩短至几天。\n- **真实噪声还原度高**：通过配置 `impulse` 或 `gaussian` 噪声模型参数，noise2noise 能直接从真实脏数据中学习噪声统计规律，显著提升了在复杂临床场景下的去噪精度。\n- **快速迭代验证**：借助 UNet 架构支持和灵活的命令行参数，工程师迅速完成了多轮模型调优，成功恢复了被噪声掩盖的微血管结构，推动了项目进入临床测试。\n- **降低技术门槛**：即使没有昂贵的标注预算，团队也能基于开源代码和自有数据构建高性能去噪管道，让深度学习技术在资源受限的场景下落地成为可能。\n\nnoise2noise 的核心价值在于打破了深度学习图像复原对“干净标签数据”的强依赖，让开发者能够直接利用现实世界中不完美的脏数据训练出高质量的去噪模型。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyu4u_noise2noise_8f2e08a2.png","yu4u","Yusuke Uchida","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fyu4u_e4169046.png","Interested in deep learning for image recognition, image retrieval, approximate nearest neighbor search, and so on.\r\n","GO inc.",null,"yu4u.github.io","https:\u002F\u002Fgithub.com\u002Fyu4u",[81],{"name":82,"color":83,"percentage":84},"Python","#3572A5",100,1094,234,"2026-04-05T06:34:12","MIT","未说明","未说明 (基于 TensorFlow\u002FKeras，通常支持 CPU 或 GPU，但 README 未明确指定显卡型号、显存或 CUDA 版本)",{"notes":92,"python":93,"dependencies":94},"这是一个非官方的部分 Keras 实现。训练数据集默认为 ImageNet 的子集（需手动下载），也可替换为其他数据集。支持多种噪声模型（高斯噪声、文本插入、随机值脉冲噪声）和模型架构（SRResNet 或 UNet）。提供了预训练权重可供直接测试或断点续训。","3.x (命令示例使用 python3，具体小版本未说明)",[95,96,97,98],"Keras>=2.1.2","TensorFlow","NumPy","OpenCV",[14],[64,101,102,103,104],"deep-learning","convolutional-neural-networks","denoising","keras","2026-03-27T02:49:30.150509","2026-04-13T22:46:01.928826",[108,113,118,123,128,133,138],{"id":109,"question_zh":110,"answer_zh":111,"source_url":112},32064,"如何读取和处理 16 位灰度 TIFF 图像？","默认情况下 `cv2.imread` 会将图像转换为 8 位深度。要读取 16 位图像，需添加 `cv2.IMREAD_ANYDEPTH` 参数：`cv2.imread(str(image_path), cv2.IMREAD_ANYDEPTH)`。\n注意：读取后图像形状可能变为二维（高度，宽度），需要手动调整代码以适配单通道逻辑（例如将 `_ = 1` 设为通道数）。\n此外，如果训练报错，可能还需要对 `ValGenerator` 进行相同的修改，并检查图像裁剪逻辑 `y = y[:(h \u002F\u002F 16) * 16, :(w \u002F\u002F 16) * 16]` 是否导致形状不匹配。","https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Fissues\u002F20",{"id":114,"question_zh":115,"answer_zh":116,"source_url":117},32065,"遇到显存不足（Out of Memory\u002FOOM）错误该怎么办？","降低显存需求的最有效方法是减小 `batch_size`（批次大小）或 `image_size`（图像尺寸）。\n可以通过在运行训练脚本时修改相应参数来实现，例如：\n`python3 train.py --image_size 256 --batch_size 4 ...`\n尝试逐步减小这两个数值直到不再出现 OOM 错误。","https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Fissues\u002F34",{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},32066,"如果只有噪声数据进行训练，使用验证损失（validation loss）作为停止标准合理吗？","不合理。如果只有噪声数据而没有干净的参考图像，无法执行有效的验证。\n在这种情况下，应该修改代码中涉及 \"val\"（验证）信息的部分。具体来说，需要移除或注释掉 `train.py` 中使用验证数据的回调函数和相关逻辑（参考原代码第 95-99 行），否则可能会因为缺少 `val_loss` 键值而报错。","https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Fissues\u002F31",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},32067,"运行时报错 'AttributeError: NoneType object has no attribute shape' 是什么原因？","这通常是因为程序未能正确加载图像，导致图像变量为 `None`。\n常见原因是输入图像的位深不符合要求。请检查您的图像，确保它们是 **24 位深度**（即标准的 8 位 RGB 三通道图像）。\n如果图像是 32 位或其他深度，请先将其转换为 24 位深度后再运行程序。","https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Fissues\u002F54",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},32068,"当前版本是否支持随机值脉冲噪声模型和 L0 损失函数？","是的，维护者已经更新实现了随机值脉冲噪声模型（Random-valued impulse noise model）和 L0 损失函数（L0 loss）。\n如果您使用的是较旧的版本，请拉取最新的代码库以使用这些功能。","https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Fissues\u002F16",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},32069,"在 Windows 机器上运行时遇到 'Can't pickle local object' 错误怎么办？","这是在 Windows 上使用 Python 多进程时的常见问题。由于 Windows 的进程启动方式与 Linux\u002FmacOS 不同，直接在交互式环境或非主模块中定义生成器可能导致序列化失败。\n解决方案：确保数据加载相关的函数定义在主模块保护下（即放在 `if __name__ == '__main__':` 块中），或者将自定义的数据生成器类定义在独立的 `.py` 文件中并在主程序中导入，避免在局部作用域定义可拾取对象。","https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Fissues\u002F12",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},32070,"使用 TensorFlow 2.3.1 运行时，为什么 Val_PSNR 和 Val_loss 都显示为 0.0000e+00？","这是一个已知的兼容性问题或配置问题。当验证数据未正确加载或验证步骤被错误跳过时，指标会显示为零。\n建议检查：\n1. 确认测试\u002F验证目录路径是否正确且包含有效图像。\n2. 确认是否因只有噪声数据而错误地禁用了验证逻辑（参考 Issue #31）。\n3. 检查 TensorFlow 和 Keras 的版本兼容性，必要时尝试回退到推荐的稳定版本。","https:\u002F\u002Fgithub.com\u002Fyu4u\u002Fnoise2noise\u002Fissues\u002F46",[144],{"id":145,"version":146,"summary_zh":77,"released_at":147},239301,"v0.1","2018-08-24T15:33:36"]