[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-jzbontar--mc-cnn":3,"tool-jzbontar--mc-cnn":64},[4,17,26,40,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},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,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,2,"2026-04-03T11:11:01",[13,14,15],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":23,"last_commit_at":32,"category_tags":33,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,34,35,36,15,37,38,13,39],"数据工具","视频","插件","其他","语言模型","音频",{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":10,"last_commit_at":46,"category_tags":47,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,38,37],{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":10,"last_commit_at":54,"category_tags":55,"status":16},519,"PaddleOCR","PaddlePaddle\u002FPaddleOCR","PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来，转换成计算机可读取的结构化数据，让机器真正“看懂”图文内容。\n\n面对海量纸质或电子文档，PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域，它扮演着连接图像与大型语言模型（LLM）的桥梁角色，能将视觉信息直接转化为文本输入，助力智能问答、文档分析等应用场景落地。\n\nPaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显：不仅支持全球 100 多种语言的识别，还能在 Windows、Linux、macOS 等多个系统上运行，并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目，PaddleOCR 既能满足快速集成的需求，也能支撑前沿的视觉语言研究，是处理文字识别任务的理想选择。",74913,"2026-04-05T10:44:17",[38,14,13,37],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":23,"last_commit_at":62,"category_tags":63,"status":16},2471,"tesseract","tesseract-ocr\u002Ftesseract","Tesseract 是一款历史悠久且备受推崇的开源光学字符识别（OCR）引擎，最初由惠普实验室开发，后由 Google 维护，目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据，有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题，是数字化归档和信息自动化的重要基础工具。\n\n在技术层面，Tesseract 展现了强大的适应能力。从版本 4 开始，它引入了基于长短期记忆网络（LSTM）的神经网络 OCR 引擎，显著提升了行识别的准确率；同时，为了兼顾旧有需求，它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码，开箱即用即可识别超过 100 种语言，并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面，它灵活支持纯文本、hOCR、PDF、TSV 等多种格式，方便后续数据处理。\n\nTesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库（libtesseract），不包含图形用户界面（GUI），因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中",73286,"2026-04-03T01:56:45",[13,14],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":78,"owner_location":79,"owner_email":80,"owner_twitter":78,"owner_website":78,"owner_url":81,"languages":82,"stars":106,"forks":107,"last_commit_at":108,"license":109,"difficulty_score":110,"env_os":111,"env_gpu":112,"env_ram":113,"env_deps":114,"category_tags":124,"github_topics":78,"view_count":23,"oss_zip_url":78,"oss_zip_packed_at":78,"status":16,"created_at":125,"updated_at":126,"faqs":127,"releases":158},2760,"jzbontar\u002Fmc-cnn","mc-cnn","Stereo Matching by Training a Convolutional Neural Network to Compare Image Patches","mc-cnn 是一款开创性的开源工具，旨在通过训练卷积神经网络（CNN）来比较图像块，从而实现高精度的立体匹配。它主要解决了传统算法在复杂纹理或弱纹理区域难以准确计算深度信息的难题，能够生成高质量的视差图，广泛应用于自动驾驶、机器人导航及三维重建领域。\n\n该工具特别适合计算机视觉研究人员、AI 开发者以及需要处理立体图像数据的工程师使用。其核心亮点在于将深度学习引入立体匹配的成本计算环节：利用 CNN 自动学习图像特征并评估匹配置信度，再结合跨基成本聚合、半全局匹配等传统后处理技术，显著提升了最终结果的准确性与鲁棒性。项目提供了针对 KITTI 和 Middlebury 等主流数据集的预训练模型，支持“快速”与“高精度”两种模式，方便用户根据硬件条件（需 NVIDIA GPU）灵活选择。作为早期成功应用深度学习解决立体视觉问题的经典案例，mc-cnn 代码结构清晰，为后续相关研究奠定了重要基础。","Stereo Matching by Training a Convolutional Neural Network to Compare Image Patches\n===================================================================================\n\nThe repository contains\n\n- procedures to compute the stereo matching cost with a convolutional neural network;\n- procedures to train a convolutional neural network on the stereo matching task; and\n- a basic stereo method (cross-based cost aggregation, semiglobal matching,\n  left-right consistency check, median filter, and bilateral filter); \n\nA NVIDIA GPU with at least 6 GB of memory is required to run on the KITTI\ndata set and 12 GB to run on the Middlebury data set. We tested the code on GTX\nTitan (KITTI only), K80, and GTX Titan X. \nThe code is released under the BSD 2-Clause license.\nPlease cite our [paper](http:\u002F\u002Farxiv.org\u002Fabs\u002F1510.05970)\nif you use code from this repository in your work.\n\n\t@article{zbontar2016stereo,\n\t  title={Stereo matching by training a convolutional neural network to compare image patches},\n\t  author={Zbontar, Jure and LeCun, Yann},\n\t  journal={Journal of Machine Learning Research},\n\t  volume={17},\n\t  pages={1--32},\n\t  year={2016}\n\t}\n\n\nDownload trained networks\n-------------------------\n\n- [KITTI 2012 fast](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti_fast_-a_train_all.t7)\n- [KITTI 2012 accurate](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti_slow_-a_train_all.t7)\n- [KITTI 2015 fast](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti2015_fast_-a_train_all.t7)\n- [KITTI 2015 accurate](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti2015_slow_-a_train_all.t7)\n- [Middlebury fast](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_mb_fast_-a_train_all.t7)\n- [Middlebury accurate](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_mb_slow_-a_train_all.t7)\n\nCompute the Matching Cost\n-------------------------\n\nInstall [Torch](http:\u002F\u002Ftorch.ch\u002F), [OpenCV 2.4](http:\u002F\u002Fopencv.org\u002F), and\n[png++](http:\u002F\u002Fwww.nongnu.org\u002Fpngpp\u002F).\n\nRun the following commands in the same directory as this README file.\n\nCompile the shared libraries:\n\n\t$ cp Makefile.proto Makefile\n\t$ make\n\nThe command should produce two files: `libadcensus.so` and `libcv.so`.\n\nTo run the stereo algorithm on a stereo pair from the KITTI 2012 training set&mdash;\n\n- Left input image  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_84f4e654cf5b.png\" style=\"width: 25%;\"\u002F>\n- Right input image  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_715936054685.png\" style=\"width: 25%;\"\u002F>\n\n&mdash;download the pretrained network and call `main.lua` with the following arguments:\n\n\t$ wget -P net\u002F https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti_fast_-a_train_all.t7\n\t$ .\u002Fmain.lua kitti fast -a predict -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 -left https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_84f4e654cf5b.png -right https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_715936054685.png -disp_max 70\n\tWriting right.bin, 1 x 70 x 370 x 1226\n\tWriting left.bin, 1 x 70 x 370 x 1226\n\tWriting disp.bin, 1 x 1 x 370 x 1226\n\nThe first two arguments (`kitti fast`) are used to set the default\nhyperparameters of the stereo method. The outputs are stored as three binary\nfiles:\n\n- `left.bin`: The matching cost after semiglobal matching and cross-based\n  cost aggregation with the left image treated as the reference image.  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_e1ee396a16c4.png\" style=\"width: 25%;\"\u002F>\n- `right.bin`: Same as `left.bin`, but with the right image treated as the\n  reference image.  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_349b8c98aba5.png\" style=\"width: 25%;\"\u002F>\n- `disp.bin`: The disparity map after the full stereo method.  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_71778eb333e9.png\" style=\"width: 25%;\"\u002F>\n\nUse the `bin2png.lua` script to generate the `.png` images like the ones above:\n\n\t$ luajit samples\u002Fbin2png.lua \n\tWriting left.png\n\tWriting right.png\n\tWriting disp.png\n\nIf you wish to use the raw convolutional neural network outputs, that is,\nwithout applying cross-based cost aggregation and semiglobal matching, run\nthe following command:\n\n\t$ .\u002Fmain.lua kitti fast -a predict -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 -left https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_84f4e654cf5b.png -right https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_715936054685.png -disp_max 70 -sm_terminate cnn\n\tWriting right.bin, 1 x 70 x 370 x 1226\n\tWriting left.bin, 1 x 70 x 370 x 1226\n\tWriting disp.bin, 1 x 1 x 370 x 1226\n\nThe resulting disparity maps should look like this:\n\n- `left.png`  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_8715f5fa6422.png\" style=\"width: 25%;\"\u002F>\n- `right.png`  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_d9beb06f9cdc.png\" style=\"width: 25%;\"\u002F>\n\nNote that `-disp_max 70` is used only as an example. To reproduce our\nresults on the KITTI data sets use `-disp_max 228`.\n\nSee the [predict_kitti.lua](predict_kitti.lua) script for how you might\ncall `main.lua` in a loop, for multiple image pairs.\n\n### Load the Output Binary Files ###\n\nYou can load the binary files (if, for example, you want to apply \ndifferent post-processing steps that you have written yourself) by memory \nmapping them.  We include examples of memory mapping for some of \nthe more popular programming languages.\n\n- **Lua**\n\n\t\trequire 'torch'\n\t\tleft = torch.FloatTensor(torch.FloatStorage('..\u002Fleft.bin')):view(1, 70, 370, 1226)\n\t\tright = torch.FloatTensor(torch.FloatStorage('..\u002Fright.bin')):view(1, 70, 370, 1226)\n\t\tdisp = torch.FloatTensor(torch.FloatStorage('..\u002Fdisp.bin')):view(1, 1, 370, 1226)\n\n- **Python**\n\n\t\timport numpy as np\n\t\tleft = np.memmap('..\u002Fleft.bin', dtype=np.float32, shape=(1, 70, 370, 1226))\n\t\tright = np.memmap('..\u002Fright.bin', dtype=np.float32, shape=(1, 70, 370, 1226))\n\t\tdisp = np.memmap('..\u002Fdisp.bin', dtype=np.float32, shape=(1, 1, 370, 1226))\n\n- **Matlab**\n\n\t\tleft = memmapfile('..\u002Fleft.bin', 'Format', 'single').Data;\n\t\tleft = permute(reshape(left, [1226 370 70]), [3 2 1]);\n\t\tright = memmapfile('..\u002Fright.bin', 'Format', 'single').Data;\n\t\tright = permute(reshape(right, [1226 370 70]), [3 2 1]);\n\t\tdisparity = memmapfile('..\u002Fdisp.bin', 'Format', 'single').Data;\n\t\tdisparity = reshape(disparity, [1226 370])';\n\n- **C**\n\n\t\t#include \u003Cfcntl.h>\n\t\t#include \u003Cstdio.h>\n\t\t#include \u003Csys\u002Fmman.h>\n\t\t#include \u003Csys\u002Fstat.h>\n\t\t#include \u003Csys\u002Ftypes.h>\n\t\tint main(void)\n\t\t{\n\t\t\tint fd;\n\t\t\tfloat *left, *right, *disp;\n\t\t\tfd = open(\"..\u002Fleft.bin\", O_RDONLY);\n\t\t\tleft = mmap(NULL, 1 * 70 * 370 * 1226 * sizeof(float), PROT_READ, MAP_SHARED, fd, 0);\n\t\t\tclose(fd);\n\t\t\tfd = open(\"..\u002Fright.bin\", O_RDONLY);\n\t\t\tright = mmap(NULL, 1 * 70 * 370 * 1226 * sizeof(float), PROT_READ, MAP_SHARED, fd, 0);\n\t\t\tclose(fd);\n\t\t\tfd = open(\"..\u002Fdisp.bin\", O_RDONLY);\n\t\t\tdisp = mmap(NULL, 1 * 1 * 370 * 1226 * sizeof(float), PROT_READ, MAP_SHARED, fd, 0);\n\t\t\tclose(fd);\n\t\t\treturn 0;\n\t\t}\n\nTrain\n-----\n\nThis section explains how to train the convolutional neural network on the\nKITTI and Middlebury data sets.\n\n### KITTI ###\n\nDownload both\n\n- the [KITTI 2012](http:\u002F\u002Fwww.cvlibs.net\u002Fdownload.php?file=data_stereo_flow.zip) data set and unzip it\ninto `data.kitti\u002Funzip` (you should end up with a file `data.kitti\u002Funzip\u002Ftraining\u002Fimage_0\u002F000000_10.png`) and \n- the [KITTI 2015](http:\u002F\u002Fwww.cvlibs.net\u002Fdownload.php?file=data_scene_flow.zip) data set and unzip it\ninto `data.kitti2015\u002Funzip` (you should end up with a file `data.kitti2015\u002Funzip\u002Ftraining\u002Fimage_2\u002F000000_10.png`).\n\nRun the preprocessing script:\n\n\t$ .\u002Fpreprocess_kitti.lua\n\tdataset 2012\n\t1\n\t...\n\t389\n\tdataset 2015\n\t1\n\t...\n\t400\n\nRun `main.lua` to train the network:\n\n\t$ .\u002Fmain.lua kitti slow -a train_tr\n\tkitti slow -a train_tr \n\tconv(in=1, out=112, k=3)\n\tcudnn.ReLU\n\tconv(in=112, out=112, k=3)\n\tcudnn.ReLU\n\tconv(in=112, out=112, k=3)\n\tcudnn.ReLU\n\tconv(in=112, out=112, k=3)\n\tcudnn.ReLU\n\tnn.Reshape(128x224)\n\tnn.Linear(224 -> 384)\n\tcudnn.ReLU\n\tnn.Linear(384 -> 384)\n\tcudnn.ReLU\n\tnn.Linear(384 -> 384)\n\tcudnn.ReLU\n\tnn.Linear(384 -> 384)\n\tcudnn.ReLU\n\tnn.Linear(384 -> 1)\n\tcudnn.Sigmoid\n\t...\n\nThe network is trained on a subset of all training examples with the remaining\nexamples used for validation; to train on all examples use\n\n\t$ .\u002Fmain.lua kitti slow -a train_all\n\nIn the previous command, the KITTI 2012 data set is used. If you wish to train\non the KITTI 2015 run\n\n\t$ .\u002Fmain.lua kitti2015 slow -a train_tr\n\nTo train the fast architecture instead use\n\n\t$ .\u002Fmain.lua kitti fast -a train_tr\n\nThe network is stored in the `net\u002F` directory.\n\n\t$ ls net\u002F\n\t...\n\tnet_kitti2012_fast_-action_train_tr.t7\n\t...\n\n### Middlebury ###\n\nRun `download_middlebury.sh` to download the training data\n(this can take a long time, depending on your internet connection).\n\n\t$ .\u002Fdownload_middlebury.sh\n\nThe data set is downloaded into the `data.mb\u002Funzip` directory.\n\nCompile the [MiddEval3-SDK](http:\u002F\u002Fvision.middlebury.edu\u002Fstereo\u002Fsubmit3\u002F). You\nshould end up with the `computemask` binary in one of the directories listed in\nyour `PATH` enviromential variable.  \n\nInstall [ImageMagick](http:\u002F\u002Fwww.imagemagick.org\u002Fscript\u002Findex.php); the\npreprocessing steps requires the `convert` binary to resize the images.\n\nRun the preprocessing script:\n\n\t$ mkdir data.mb.imperfect_gray\n\t$ .\u002Fpreprocess_mb.py imperfect gray\n\tAdirondack\n\tBackpack\n\t...\n\ttestH\u002FStaircase\n\nThe preprocessing is slow (it takes around 30 minutes) the first time it is\nrun, because the images have to be resized.\n\nUse `main.lua` to train the network:\n\n\t$ .\u002Fmain.lua mb slow -a train_tr\n\nOther Useful Commands\n---------------------\n\nCompute the error rate on the validation set (useful for setting hyperparameters):\n\n\t$ .\u002Fmain.lua kitti fast -a test_te -net_fname net\u002Fnet_kitti_fast_-a_train_tr.t7 \n\tkitti fast -a test_te -net_fname net\u002Fnet_kitti_fast_-a_train_tr.t7 \n\t0.86836290359497        0.0082842716717202\n\t...\n\t0.73244595527649        0.024202708004929\n\t0.72730183601379        0.023603160822285\n\t0.030291934952454\n\nThe validation error rate of the fast architecture on the KITTI 2012 data set is 3.029%.\n\n\\***\n\nCompute the error rate on the validation set of one dataset for a network that\nhas been trained on a different dataset.\n\n\t$ .\u002Fmain.lua kitti fast -a test_te -net_fname net\u002Fnet_mb_fast_-a_train_all.t7\n\tkitti fast -a test_te -net_fname net\u002Fnet_mb_fast_-a_train_all.t7\n\t2.1474301815033\t0.0071447750148986\n\t...\n\t1.4276049137115\t0.024273838024622\n\t1.4282908439636\t0.01881285579564\n\t1.408842086792\t0.021741689597834\n\t0.031564540460366\n\nThe validation error rate of the fast architecture tested on KITTI 2012 but trained on\nMiddlebury is 3.156%.\n\n\\***\n\nPrepare files for submission to the KITTI and Middlebury evaluation server.\n\n\t$ .\u002Fmain.lua kitti fast -a submit -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 \n\tkitti fast -a submit -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 \n\t  adding: 000038_10.png (deflated 0%)\n\t  adding: 000124_10.png (deflated 0%)\n\t  ...\n\t  adding: 000021_10.png (deflated 0%)\n\nThe output is stored in `out\u002Fsubmission.zip` and can be used to submit to the\n[KITTI evaluation\nserver](http:\u002F\u002Fwww.cvlibs.net\u002Fdatasets\u002Fkitti\u002Fuser_submit.php).\n\n\\***\n\nExperiment with different network architectures:\n\n\t$ .\u002Fmain.lua kitti slow -a train_tr -l1 2 -fm 128 -l2 3 -nh2 512\n\tkitti slow -a train_tr -l1 2 -fm 128 -l2 3 -nh2 512 \n\tconv(in=1, out=128, k=3)\n\tcudnn.ReLU\n\tconv(in=128, out=128, k=3)\n\tcudnn.ReLU\n\tnn.Reshape(128x256)\n\tnn.Linear(256 -> 512)\n\tcudnn.ReLU\n\tnn.Linear(512 -> 512)\n\tcudnn.ReLU\n\tnn.Linear(512 -> 512)\n\tcudnn.ReLU\n\tnn.Linear(512 -> 1)\n\tcudnn.Sigmoid\n\t...\n\n\\***\n\nMeasure the runtime on a particular data set:\n\n\t$ .\u002Fmain.lua kitti fast -a time\n\tkitti fast -a time \n\tconv(in=1, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tnn.Normalize2\n\tnn.StereoJoin1\n\t0.73469495773315\n\nIt take 0.73 seconds to run the fast architecure on the KITTI 2012 data set. If\nyou care only about the time spent in the neural network, you can terminate the\nstereo method early:\n\n\t$ .\u002Fmain.lua kitti fast -a time -sm_terminate cnn\n\tkitti fast -a time -sm_terminate cnn \n\tconv(in=1, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tnn.Normalize2\n\tnn.StereoJoin1\n\t0.31126594543457\n","通过训练卷积神经网络比较图像块进行立体匹配\n===================================================================================\n\n该仓库包含：\n\n- 使用卷积神经网络计算立体匹配代价的流程；\n- 在立体匹配任务上训练卷积神经网络的流程；以及\n- 一种基础的立体匹配方法（基于交叉的代价聚合、半全局匹配、左右一致性检查、中值滤波和双边滤波）；\n\n运行 KITTI 数据集需要至少 6 GB 显存的 NVIDIA GPU，而运行 Middlebury 数据集则需要 12 GB 显存。我们已在 GTX Titan（仅限 KITTI）、K80 和 GTX Titan X 上测试过代码。\n代码采用 BSD 2-Clause 许可证发布。\n如果您在工作中使用了本仓库中的代码，请引用我们的 [论文](http:\u002F\u002Farxiv.org\u002Fabs\u002F1510.05970)。\n\n\t@article{zbontar2016stereo,\n\t  title={Stereo matching by training a convolutional neural network to compare image patches},\n\t  author={Zbontar, Jure and LeCun, Yann},\n\t  journal={Journal of Machine Learning Research},\n\t  volume={17},\n\t  pages={1--32},\n\t  year={2016}\n\t}\n\n\n下载预训练网络\n-------------------------\n\n- [KITTI 2012 快速](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti_fast_-a_train_all.t7)\n- [KITTI 2012 精确](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti_slow_-a_train_all.t7)\n- [KITTI 2015 快速](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti2015_fast_-a_train_all.t7)\n- [KITTI 2015 精确](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti2015_slow_-a_train_all.t7)\n- [Middlebury 快速](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_mb_fast_-a_train_all.t7)\n- [Middlebury 精确](https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_mb_slow_-a_train_all.t7)\n\n计算匹配代价\n-------------------------\n\n安装 [Torch](http:\u002F\u002Ftorch.ch\u002F)、[OpenCV 2.4](http:\u002F\u002Fopencv.org\u002F) 和\n[png++](http:\u002F\u002Fwww.nongnu.org\u002Fpngpp\u002F)。\n\n在与本 README 文件同一目录下运行以下命令。\n\n编译共享库：\n\n\t$ cp Makefile.proto Makefile\n\t$ make\n\n该命令应生成两个文件：`libadcensus.so` 和 `libcv.so`。\n\n要在 KITTI 2012 训练集中的某对立体图像上运行立体算法——\n\n- 左侧输入图像  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_84f4e654cf5b.png\" style=\"width: 25%;\"\u002F>\n- 右侧输入图像  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_715936054685.png\" style=\"width: 25%;\"\u002F>\n\n——请下载预训练网络，并使用以下参数调用 `main.lua`：\n\n\t$ wget -P net\u002F https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti_fast_-a_train_all.t7\n\t$ .\u002Fmain.lua kitti fast -a predict -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 -left https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_84f4e654cf5b.png -right https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_715936054685.png -disp_max 70\n\tWriting right.bin, 1 x 70 x 370 x 1226\n\tWriting left.bin, 1 x 70 x 370 x 1226\n\tWriting disp.bin, 1 x 1 x 370 x 1226\n\n前两个参数（`kitti fast`）用于设置立体方法的默认超参数。输出以三个二进制文件的形式存储：\n\n- `left.bin`：以左图作为参考图像时，经过半全局匹配和基于交叉的代价聚合后的匹配代价。  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_e1ee396a16c4.png\" style=\"width: 25%;\"\u002F>\n- `right.bin`：与 `left.bin` 相同，但以右图作为参考图像。  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_349b8c98aba5.png\" style=\"width: 25%;\"\u002F>\n- `disp.bin`：完成整个立体方法后的视差图。  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_71778eb333e9.png\" style=\"width: 25%;\"\u002F>\n\n使用 `bin2png.lua` 脚本来生成如上所示的 `.png` 图像：\n\n\t$ luajit samples\u002Fbin2png.lua \n\tWriting left.png\n\tWriting right.png\n\tWriting disp.png\n\n如果您希望直接使用卷积神经网络的原始输出，即不应用基于交叉的代价聚合和半全局匹配，请运行以下命令：\n\n\t$ .\u002Fmain.lua kitti fast -a predict -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 -left https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_84f4e654cf5b.png -right https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_715936054685.png -disp_max 70 -sm_terminate cnn\n\tWriting right.bin, 1 x 70 x 370 x 1226\n\tWriting left.bin, 1 x 70 x 370 x 1226\n\tWriting disp.bin, 1 x 1 x 370 x 1226\n\n生成的视差图应如下所示：\n\n- `left.png`  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_8715f5fa6422.png\" style=\"width: 25%;\"\u002F>\n- `right.png`  \n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_readme_d9beb06f9cdc.png\" style=\"width: 25%;\"\u002F>\n\n请注意，`-disp_max 70` 仅作为示例。要复现我们在 KITTI 数据集上的结果，请使用 `-disp_max 228`。\n\n有关如何在循环中为多对图像调用 `main.lua` 的示例，请参阅 [predict_kitti.lua](predict_kitti.lua) 脚本。\n\n### 加载输出的二进制文件 ###\n\n您可以将二进制文件映射到内存中来加载它们（例如，如果您想应用自己编写的不同的后处理步骤）。我们提供了一些常用编程语言的内存映射示例。\n\n- **Lua**\n\n\t\trequire 'torch'\n\t\tleft = torch.FloatTensor(torch.FloatStorage('..\u002Fleft.bin')):view(1, 70, 370, 1226)\n\t\tright = torch.FloatTensor(torch.FloatStorage('..\u002Fright.bin')):view(1, 70, 370, 1226)\n\t\tdisp = torch.FloatTensor(torch.FloatStorage('..\u002Fdisp.bin')):view(1, 1, 370, 1226)\n\n- **Python**\n\n\t\timport numpy as np\n\t\tleft = np.memmap('..\u002Fleft.bin', dtype=np.float32, shape=(1, 70, 370, 1226))\n\t\tright = np.memmap('..\u002Fright.bin', dtype=np.float32, shape=(1, 70, 370, 1226))\n\t\tdisp = np.memmap('..\u002Fdisp.bin', dtype=np.float32, shape=(1, 1, 370, 1226))\n\n- **Matlab**\n\n\t\tleft = memmapfile('..\u002Fleft.bin', 'Format', 'single').Data;\n\t\tleft = permute(reshape(left, [1226 370 70]), [3 2 1]);\n\t\tright = memmapfile('..\u002Fright.bin', 'Format', 'single').Data;\n\t\tright = permute(reshape(right, [1226 370 70]), [3 2 1]);\n\t\tdisparity = memmapfile('..\u002Fdisp.bin', 'Format', 'single').Data;\n\t\tdisparity = reshape(disparity, [1226 370])';\n\n- **C**\n\n\t\t#include \u003Cfcntl.h>\n\t\t#include \u003Cstdio.h>\n\t\t#include \u003Csys\u002Fmman.h>\n\t\t#include \u003Csys\u002Fstat.h>\n\t\t#include \u003Csys\u002Ftypes.h>\n\t\tint main(void)\n\t\t{\n\t\t\tint fd;\n\t\t\tfloat *left, *right, *disp;\n\t\t\tfd = open(\"..\u002Fleft.bin\", O_RDONLY);\n\t\t\tleft = mmap(NULL, 1 * 70 * 370 * 1226 * sizeof(float), PROT_READ, MAP_SHARED, fd, 0);\n\t\t\tclose(fd);\n\t\t\tfd = open(\"..\u002Fright.bin\", O_RDONLY);\n\t\t\tright = mmap(NULL, 1 * 70 * 370 * 1226 * sizeof(float), PROT_READ, MAP_SHARED, fd, 0);\n\t\t\tclose(fd);\n\t\t\tfd = open(\"..\u002Fdisp.bin\", O_RDONLY);\n\t\t\tdisp = mmap(NULL, 1 * 1 * 370 * 1226 * sizeof(float), PROT_READ, MAP_SHARED, fd, 0);\n\t\t\tclose(fd);\n\t\t\treturn 0;\n\t\t}\n\n训练\n-----\n\n本节说明如何在 KITTI 和 Middlebury 数据集上训练卷积神经网络。\n\n### KITTI ###\n\n下载以下两个数据集并解压：\n\n- [KITTI 2012](http:\u002F\u002Fwww.cvlibs.net\u002Fdownload.php?file=data_stereo_flow.zip)，解压到 `data.kitti\u002Funzip` 目录（最终应得到文件 `data.kitti\u002Funzip\u002Ftraining\u002Fimage_0\u002F000000_10.png`）；\n- [KITTI 2015](http:\u002F\u002Fwww.cvlibs.net\u002Fdownload.php?file=data_scene_flow.zip)，解压到 `data.kitti2015\u002Funzip` 目录（最终应得到文件 `data.kitti2015\u002Funzip\u002Ftraining\u002Fimage_2\u002F000000_10.png`）。\n\n运行预处理脚本：\n\n\t$ .\u002Fpreprocess_kitti.lua\n\tdataset 2012\n\t1\n\t...\n\t389\n\tdataset 2015\n\t1\n\t...\n\t400\n\n运行 `main.lua` 训练网络：\n\n\t$ .\u002Fmain.lua kitti slow -a train_tr\n\tkitti slow -a train_tr \n\tconv(in=1, out=112, k=3)\n\tcudnn.ReLU\n\tconv(in=112, out=112, k=3)\n\tcudnn.ReLU\n\tconv(in=112, out=112, k=3)\n\tcudnn.ReLU\n\tconv(in=112, out=112, k=3)\n\tcudnn.ReLU\n\tnn.Reshape(128x224)\n\tnn.Linear(224 -> 384)\n\tcudnn.ReLU\n\tnn.Linear(384 -> 384)\n\tcudnn.ReLU\n\tnn.Linear(384 -> 384)\n\tcudnn.ReLU\n\tnn.Linear(384 -> 384)\n\tcudnn.ReLU\n\tnn.Linear(384 -> 1)\n\tcudnn.Sigmoid\n\t...\n\n网络在部分训练样本上进行训练，其余样本用于验证；若要使用全部样本训练，可执行：\n\n\t$ .\u002Fmain.lua kitti slow -a train_all\n\n在上述命令中使用的是 KITTI 2012 数据集。若希望使用 KITTI 2015 数据集训练，可运行：\n\n\t$ .\u002Fmain.lua kitti2015 slow -a train_tr\n\n若要训练快速架构，则使用：\n\n\t$ .\u002Fmain.lua kitti fast -a train_tr\n\n训练好的网络会保存在 `net\u002F` 目录下。\n\n\t$ ls net\u002F\n\t...\n\tnet_kitti2012_fast_-action_train_tr.t7\n\t...\n\n### Middlebury ###\n\n运行 `download_middlebury.sh` 脚本下载训练数据（根据网络连接速度，可能需要较长时间）：\n\n\t$ .\u002Fdownload_middlebury.sh\n\n数据集将被下载到 `data.mb\u002Funzip` 目录。\n\n编译 [MiddEval3-SDK](http:\u002F\u002Fvision.middlebury.edu\u002Fstereo\u002Fsubmit3\u002F)。最终应在你的 `PATH` 环境变量所列的某个目录中生成 `computemask` 可执行文件。\n\n安装 [ImageMagick](http:\u002F\u002Fwww.imagemagick.org\u002Fscript\u002Findex.php)；预处理步骤需要 `convert` 命令来调整图像大小。\n\n运行预处理脚本：\n\n\t$ mkdir data.mb.imperfect_gray\n\t$ .\u002Fpreprocess_mb.py imperfect gray\n\tAdirondack\n\tBackpack\n\t...\n\ttestH\u002FStaircase\n\n首次运行预处理时速度较慢（大约需要 30 分钟），因为需要对图像进行缩放。\n\n使用 `main.lua` 训练网络：\n\n\t$ .\u002Fmain.lua mb slow -a train_tr\n\n其他实用命令\n---------------------\n\n计算验证集上的误差率（可用于调整超参数）：\n\n\t$ .\u002Fmain.lua kitti fast -a test_te -net_fname net\u002Fnet_kitti_fast_-a_train_tr.t7 \n\tkitti fast -a test_te -net_fname net\u002Fnet_kitti_fast_-a_train_tr.t7 \n\t0.86836290359497        0.0082842716717202\n\t...\n\t0.73244595527649        0.024202708004929\n\t0.72730183601379        0.023603160822285\n\t0.030291934952454\n\n快速架构在 KITTI 2012 数据集上的验证误差率为 3.029%。\n\n\\***\n\n计算在一个数据集的验证集上，由另一个数据集训练的网络的误差率。\n\n\t$ .\u002Fmain.lua kitti fast -a test_te -net_fname net\u002Fnet_mb_fast_-a_train_all.t7\n\tkitti fast -a test_te -net_fname net\u002Fnet_mb_fast_-a_train_all.t7\n\t2.1474301815033\t0.0071447750148986\n\t...\n\t1.4276049137115\t0.024273838024622\n\t1.4282908439636\t0.01881285579564\n\t1.408842086792\t0.021741689597834\n\t0.031564540460366\n\n在 KITTI 2012 数据集上测试、但由 Middlebury 数据集训练的快速架构的验证误差率为 3.156%。\n\n\\***\n\n准备提交至 KITTI 和 Middlebury 评估服务器的文件。\n\n\t$ .\u002Fmain.lua kitti fast -a submit -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 \n\tkitti fast -a submit -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 \n\t  adding: 000038_10.png (deflated 0%)\n\t  adding: 000124_10.png (deflated 0%)\n\t  ...\n\t  adding: 000021_10.png (deflated 0%)\n\n输出结果存储在 `out\u002Fsubmission.zip` 中，可用于提交至 [KITTI 评估服务器](http:\u002F\u002Fwww.cvlibs.net\u002Fdatasets\u002Fkitti\u002Fuser_submit.php)。\n\n\\***\n\n尝试不同的网络架构：\n\n\t$ .\u002Fmain.lua kitti slow -a train_tr -l1 2 -fm 128 -l2 3 -nh2 512\n\tkitti slow -a train_tr -l1 2 -fm 128 -l2 3 -nh2 512 \n\tconv(in=1, out=128, k=3)\n\tcudnn.ReLU\n\tconv(in=128, out=128, k=3)\n\tcudnn.ReLU\n\tnn.Reshape(128x256)\n\tnn.Linear(256 -> 512)\n\tcudnn.ReLU\n\tnn.Linear(512 -> 512)\n\tcudnn.ReLU\n\tnn.Linear(512 -> 512)\n\tcudnn.ReLU\n\tnn.Linear(512 -> 1)\n\tcudnn.Sigmoid\n\t...\n\n\\***\n\n测量在特定数据集上的运行时间：\n\n\t$ .\u002Fmain.lua kitti fast -a time\n\tkitti fast -a time \n\tconv(in=1, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tnn.Normalize2\n\tnn.StereoJoin1\n\t0.73469495773315\n\n在 KITTI 2012 数据集上运行快速架构需要 0.73 秒。若仅关注神经网络部分的耗时，可以提前终止立体匹配过程：\n\n\t$ .\u002Fmain.lua kitti fast -a time -sm_terminate cnn\n\tkitti fast -a time -sm_terminate cnn \n\tconv(in=1, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tcudnn.ReLU\n\tconv(in=64, out=64, k=3)\n\tnn.Normalize2\n\tnn.StereoJoin1\n\t0.31126594543457","# MC-CNN 快速上手指南\n\nMC-CNN 是一个基于卷积神经网络（CNN）进行立体匹配（Stereo Matching）的开源工具，通过训练网络比较图像块来计算视差图。\n\n## 环境准备\n\n### 系统要求\n- **GPU**: 必须配备 NVIDIA GPU。\n  - 运行 KITTI 数据集：显存至少 **6 GB**。\n  - 运行 Middlebury 数据集：显存至少 **12 GB**。\n  - 已测试显卡型号：GTX Titan, K80, GTX Titan X。\n- **操作系统**: Linux (推荐，因涉及 `.so` 库编译)。\n\n### 前置依赖\n请确保安装以下软件库：\n1. **Torch**: 深度学习框架。\n2. **OpenCV 2.4**: 计算机视觉库。\n3. **png++**: PNG 图像处理库。\n\n> **提示**: 国内用户安装 Torch 时若遇网络问题，可尝试配置国内镜像源或使用离线安装包。\n\n## 安装步骤\n\n### 1. 克隆代码与编译\n在项目根目录下执行以下命令，复制配置文件并编译共享库：\n\n```bash\ncp Makefile.proto Makefile\nmake\n```\n\n编译成功后，当前目录应生成 `libadcensus.so` 和 `libcv.so` 两个文件。\n\n### 2. 下载预训练模型\n根据需求下载对应的预训练网络模型（`.t7` 文件）。以下是 KITTI 2012 的快速版模型示例：\n\n```bash\nmkdir -p net\nwget -P net\u002F https:\u002F\u002Fs3.amazonaws.com\u002Fmc-cnn\u002Fnet_kitti_fast_-a_train_all.t7\n```\n\n> **可用模型列表**:\n> - KITTI 2012\u002F2015: 提供 `fast` (快速) 和 `accurate` (高精度) 版本。\n> - Middlebury: 提供 `fast` 和 `accurate` 版本。\n> *完整下载链接请参考项目原始 README。*\n\n## 基本使用\n\n以下示例演示如何使用预训练模型对一对立体图像进行视差预测。\n\n### 1. 运行立体匹配\n假设你有一对左右图像 `kittiL.png` 和 `kittiR.png`，执行以下命令：\n\n```bash\n.\u002Fmain.lua kitti fast -a predict -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 -left samples\u002Finput\u002FkittiL.png -right samples\u002Finput\u002FkittiR.png -disp_max 70\n```\n\n**参数说明**:\n- `kitti fast`: 设置立体匹配方法的默认超参数。\n- `-disp_max 70`: 最大视差值（KITTI 官方评测通常设为 228，此处仅为示例）。\n- 输出将生成三个二进制文件：`left.bin`, `right.bin`, `disp.bin`。\n\n### 2. 转换结果为图片\n使用提供的脚本将二进制输出转换为可视化的 PNG 图片：\n\n```bash\nluajit samples\u002Fbin2png.lua\n```\n\n执行后将生成：\n- `left.png`: 左图为参考图的匹配成本图。\n- `right.png`: 右图为参考图的匹配成本图。\n- `disp.png`: 最终生成的视差图。\n\n### 3. (可选) 仅使用 CNN 原始输出\n如果你不需要后续的聚合优化（如半全局匹配 SGM），只想获取纯 CNN 的输出结果，添加 `-sm_terminate cnn` 参数：\n\n```bash\n.\u002Fmain.lua kitti fast -a predict -net_fname net\u002Fnet_kitti_fast_-a_train_all.t7 -left samples\u002Finput\u002FkittiL.png -right samples\u002Finput\u002FkittiR.png -disp_max 70 -sm_terminate cnn\n```\n\n### 4. 读取输出数据\n生成的 `.bin` 文件可通过内存映射（Memory Map）在多种语言中读取。\n\n**Python 示例**:\n```python\nimport numpy as np\n# 读取视差图 (形状需根据实际输出调整，示例为 1x1x370x1226)\ndisp = np.memmap('disp.bin', dtype=np.float32, shape=(1, 1, 370, 1226))\n```\n\n**Lua 示例**:\n```lua\nrequire 'torch'\ndisp = torch.FloatTensor(torch.FloatStorage('disp.bin')):view(1, 1, 370, 1226)\n```","某自动驾驶初创团队的感知算法工程师正在处理 KITTI 数据集，试图从车载双目相机拍摄的图像中重建高精度的道路三维深度图，以识别前方障碍物。\n\n### 没有 mc-cnn 时\n- 传统立体匹配算法在弱纹理区域（如柏油路面、白墙）极易失效，导致生成的深度图出现大面积空洞或错误噪点。\n- 面对光照变化或遮挡情况，基于手工特征的成本计算方法鲁棒性差，难以区分真实视差与误匹配，需耗费大量时间人工调整参数。\n- 缺乏端到端的特征学习能力，无法像人类视觉一样理解图像块的语义相似性，导致边缘处的深度估计模糊不清。\n- 为了获得可用的结果，往往需要叠加复杂的后处理滤波步骤，不仅计算流程繁琐，还容易引入新的伪影。\n\n### 使用 mc-cnn 后\n- 利用卷积神经网络直接训练图像块比对能力，显著提升了弱纹理区域的匹配精度，深度图完整度大幅提高。\n- 通过预训练模型（如 KITTI fast\u002Faccurate 版本）自动适应复杂光照和遮挡场景，无需手动调参即可获得高鲁棒性的视差结果。\n- 结合半全局匹配（SGM）与交叉基成本聚合，mc-cnn 输出的物体边缘清晰锐利，有效保留了场景的几何细节。\n- 提供了从“快速推理”到“高精度计算”的多种预训练网络选择，工程师可根据实时性或精度需求灵活切换，简化了部署流程。\n\nmc-cnn 通过将深度学习引入立体匹配核心环节，从根本上解决了传统算法在复杂现实场景中特征提取能力不足的痛点，为自动驾驶提供了更可靠的深度感知基础。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjzbontar_mc-cnn_35391830.png","jzbontar","Jure Zbontar","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fjzbontar_108fae84.jpg",null,"Ljubljana, Slovenia","jure.zbontar@gmail.com","https:\u002F\u002Fgithub.com\u002Fjzbontar",[83,87,91,95,99,103],{"name":84,"color":85,"percentage":86},"Cuda","#3A4E3A",40.8,{"name":88,"color":89,"percentage":90},"Lua","#000080",38.7,{"name":92,"color":93,"percentage":94},"Python","#3572A5",18,{"name":96,"color":97,"percentage":98},"Shell","#89e051",1.3,{"name":100,"color":101,"percentage":102},"C++","#f34b7d",0.9,{"name":104,"color":78,"percentage":105},"Protocol Buffer",0.4,725,227,"2026-03-09T12:55:59","BSD-2-Clause",4,"Linux","必需 NVIDIA GPU。运行 KITTI 数据集至少需要 6GB 显存，运行 Middlebury 数据集需要 12GB 显存。测试过的型号包括 GTX Titan, K80, GTX Titan X。代码中使用了 cudnn，暗示需要 CUDA 支持。","未说明",{"notes":115,"python":116,"dependencies":117},"该工具主要基于 Lua (Torch 框架) 而非 Python。编译步骤需要生成共享库文件 (libadcensus.so, libcv.so)。训练 Middlebury 数据集前需编译 MiddEval3-SDK 并安装 ImageMagick 用于图像预处理。预训练模型文件为 .t7 格式。","未说明 (主要基于 Lua\u002FTorch)",[118,119,120,121,122,123],"Torch","OpenCV 2.4","png++","cuDNN","ImageMagick","MiddEval3-SDK",[14],"2026-03-27T02:49:30.150509","2026-04-06T07:13:36.031613",[128,133,138,143,148,153],{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},12767,"如何设置训练数据集的大小（例如只使用 20% 的数据）？","可以使用 `-subset` 参数来指定训练数据的比例。例如，要使用 50% 的数据集进行训练，命令如下：\n`.\u002Fmain.lua kitti2015 slow -a train_tr -subset 0.5`\n将 `0.5` 替换为你需要的比例即可（如 0.2 代表 20%）。","https:\u002F\u002Fgithub.com\u002Fjzbontar\u002Fmc-cnn\u002Fissues\u002F33",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},12768,"运行代码时出现 'error loading module libcv' 或 'libcudart.so.x.x: cannot open shared object file' 错误怎么办？","这通常是因为 OpenCV 版本与 CUDA 版本不兼容导致的。例如，OpenCV 2.4.12 不支持 CUDA 8.0，而 OpenCV 2.4.13 支持。请尝试升级您的 OpenCV 版本以匹配当前的 CUDA 版本。","https:\u002F\u002Fgithub.com\u002Fjzbontar\u002Fmc-cnn\u002Fissues\u002F24",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},12769,"如何在 Windows 7 上运行该项目？","作者未直接在 Windows 7 上测试过编译，但理论上可行。首先需要确保 Torch 7 能在 Windows 上正常运行（参考 Torch7 Windows 安装指南）。如果直接运行困难，建议在 Windows 7 上安装虚拟机（如 Linux 环境）来运行代码。","https:\u002F\u002Fgithub.com\u002Fjzbontar\u002Fmc-cnn\u002Fissues\u002F7",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},12770,"为什么训练时使用 nn.Linear 而测试时使用 nn.SpatialConvolution1_fw？可以用 1x1 卷积替代吗？","可以替换。在编写代码时，`nn.SpatialConvolution1_fw`（本质是矩阵乘法）比使用 cuDNN 的 1x1 卷积更快。但现在 cuDNN 的性能已经提升，两者速度差异可能不再明显。你可以尝试在训练和测试过程中都使用 `cudnn.SpatialConvolution` (kernel size=1x1)，建议进行基准测试以确保性能没有下降。","https:\u002F\u002Fgithub.com\u002Fjzbontar\u002Fmc-cnn\u002Fissues\u002F21",{"id":149,"question_zh":150,"answer_zh":151,"source_url":152},12771,"在 Middlebury 数据集上预测结果误差率很高（远高于官网显示结果），原因是什么？","这通常是因为 `-disp_max`（最大视差）参数设置不正确。不同的立体图像对需要不同的最大视差值。例如，对于 'Vintage' 图像对，应将 `-disp_max` 设置为 380（即 760 \u002F 2），而不是默认值或其他数值。请根据具体数据集调整该参数。","https:\u002F\u002Fgithub.com\u002Fjzbontar\u002Fmc-cnn\u002Fissues\u002F20",{"id":154,"question_zh":155,"answer_zh":156,"source_url":157},12772,"在 Nvidia TX1 或其他设备上加载模型时出现 'Failed to load function from bytecode' 错误如何解决？","这个问题通常出现在 'fast' 架构的模型文件中，因为模型保存时包含了特定于原机器环境的函数指针（如 `accUpdateGradParameters`），导致在其他设备上无法反序列化。\n解决方案：\n1. 在能够正常加载该模型的机器上（如原作者的桌面环境），加载模型。\n2. 移除或重置这些特定于环境的函数参数。\n3. 将模型重新保存为 ASCII 格式。\n注意：'slow' 架构的模型通常没有这个问题，可以直接加载。","https:\u002F\u002Fgithub.com\u002Fjzbontar\u002Fmc-cnn\u002Fissues\u002F19",[]]