RAG知识库落地:PDF解析三层实战与踩坑指南
做RAG知识库这一年多我最大的感受是最容易被低估的环节不是向量模型也不是Prompt而是文档解析特别是PDF解析。PDF这玩意看起来就是“能复制文字的文档”可真要把它丢进RAG管线里问题立刻冒出来文本顺序错乱、表格变成天书、页眉页脚混进正文、扫描件还要OCR每一步都在给下游检索埋雷。我把这些坑拆成三层来打第一层是做文本抽取第二层是做版面分析与结构还原第三层是做面向RAG的切块与知识化。这篇文章就记录这套“PDF三层实战”的完整路径和踩坑实录适合正在做RAG知识库、企业文档问答、本地文件私有化搜索的团队参考。无论你是刚接触RAG的新手还是已经被PDF折磨的工程师这篇都能帮你在进入Embedding和检索之前先把地基打稳。1. 为什么PDF处理是RAG项目的第一道坎1.1 一个看似简单却容易翻车的场景你接手一个企业知识库项目老板甩过来几百份产品说明书、行业报告、合同扫描件说“做个问答机器人”。刚开始你肯定想PDF解析这不是成熟技术吗随便用个库把文本抽出来切成小块塞进向量库完事。但真到测试阶段用户问“这个产品的质保期是多久”系统回答“请参考xx文档其中提到质保期……”但引用的上下文里全是页眉“产品白皮书”和其他段落根本没有“质保期”的字样。你翻看原始PDF才发现文本抽取时表格的顺序被拆得七零八落关键词被分到了不同块里。这种问题不是Embedding模型能救的根子在解析。PDF是一种“页面描述语言”它记录的是每个字符画在页面什么位置、用哪个字体、多大字号而不是像HTML或Markdown那样有明确的段落和标题语义。说得直白点PDF更像一张“电子照片”你看到的文字、表格、图片在文件内部是彼此独立的绘制指令。所以只把字符按出现顺序抽出来和人类阅读顺序经常对不上。这也是为什么RAG项目里PDF解析要专门拿出来做。1.2 三层解析思路帮你理清边界我把它拆成三层每层解决不同目标第一层文本抽取目标是把PDF里的文字变成可处理的字符串包含字符内容、坐标、字体信息保证“能拿得到”。第二层版面分析目标是把字符流还原成文档结构识别标题、正文、表格、图片、页眉页脚恢复阅读顺序保证“能读得懂”。第三层知识化切块目标是针对RAG检索需求把结构化内容切成长度合适、语义独立的文本块附加元数据保证“能搜得准”。这三层不能混在一起因为每一层的失败模式不同。第一层失败通常表现为乱码、丢字、扫描件空白第二层失败表现为顺序错乱、标题正文混排、表格被拆散第三层失败表现为切块太碎导致语义断层、切块太大导致召回噪声多、元数据缺失导致过滤失效。只要按层排查问题就好定位。接下来我按这三层分别讲实战过程和避坑经验。2. 第一层文本抽取——先拿到靠谱的字符流2.1 主库对比PyMuPDF、pdfplumber、pdfminer.six怎么选我实测过Python生态里最常见的三个库它们的侧重点差异很大。PyMuPDFfitz解析速度快能同时拿到文本、坐标、字体、颜色、图片还能直接渲染页面为图片。对数字版PDF它是首选。缺点是某些复杂字体映射处理得比较“粗暴”偶尔会出现提取顺序问题。pdfplumber基于pdfminer.six封装增加了表格提取能力在文字定位和表格线识别上很细适合处理带表格的财务报告、合同台账。缺点是比较慢内存占用高。pdfminer.six最老牌的底层库能精细控制布局分析参数适合做定制化解析但API偏底层直接写会有点痛苦。我的选型逻辑是先拿20个样本PDF跑一遍看哪个库抽取的文本完整度最高。如果样本里主要是数字版PDF且不带复杂表格优先用PyMuPDF因为它快能扛大文件。如果表格线复杂、单元格内容错乱严重就换pdfplumber或结合pdfminer。不要迷信某个库PDF这东西没有银弹。2.2 实操示例PyMuPDF快速抽取正文和坐标下面这段是我习惯用的抽取代码用PyMuPDF的“dict”模式拿字符和坐标import fitz # PyMuPDF doc fitz.open(产品手册.pdf) page doc[0] blocks page.get_text(dict, sortTrue)[blocks] for b in blocks: if lines not in b: continue for line in b[lines]: line_text .join([span[text] for span in line[spans]]) bbox [round(v, 1) for v in line[bbox]] print(bbox, line_text) doc.close()这里sortTrue会自动按阅读顺序排序块但注意它只是“启发式排序”遇到双栏PDF仍然可能出错。所以后续还要做版面分析。如果只是想快速拿到纯文本可以直接用page.get_text(text)但我建议至少保留坐标信息后面做表格恢复和去重时会用到。2.3 这一层最常见的坑乱码、扫描件、编码第一层最大的坑有三个乱码、扫描件、中文编码。乱码通常是因为PDF内嵌字体缺少ToUnicode映射表导致程序不知道字符的Unicode编码。遇到这种情况先用page.get_text(dict)看看字符内容如果全是“乱码”就只能走OCR路线。扫描件就更直接了整个页面没有文本层必须先渲染成图片再识别。我用的是PaddleOCR识别中文和表格效果不错如果纯英文扫描件用Tesseract也能扛。至于中文编码很多PDF中文会被拆成单字或出现全角空格建议在抽取后做一轮清洗把\u3000替换成普通空格把奇怪的换行符统一成\n避免后面切块时出现半个词或空块。这里顺便说一句热词里经常有人搜“pdf图片中文设置”其实就是这个场景。PDF里如果只有图片要先渲染成高分辨率图片再OCR分辨率低于150dpi识别率会明显下降。我自己用过300dpi渲染中文识别准确率能稳定在95%以上但解析耗时也会成倍增加生产环境要按文档优先级做取舍。3. 第二层版面分析——让文档结构从“横排字符”变回“信息块”3.1 为什么纯文本抽取不够用很多新手到这里就会问我已经把文字抽出来了切块不就行了吗不行。举个真实例子一篇双栏排版的论文如果按页面字符顺序抽取左栏读完会跳到右栏再跳回左栏阅读顺序是乱的。还有页眉页脚会夹杂在每一段中间表格会被拆成若干行和正文混在一起。这些问题不解决后续切出来的块就是“垃圾进、垃圾出”。版面分析要做的就是告诉程序哪些元素属于同一个标题层级、哪些文字属于同一个表格、哪些区域是页眉页脚需要丢弃、哪些是图片需要单独处理。3.2 用LayoutParser或Unstructured还原标题、段落、表格我实践中最顺手的两个工具是LayoutParser和Unstructured。LayoutParser底层用的目标检测模型如PubLayNet能识别出Title、Text、List、Table、Figure等区域框Unstructured则把这些能力封装成更友好的partition_pdf接口一步返回结构化元素列表。下面是我用Unstructured做版面解析的示例from unstructured.partition.pdf import partition_pdf elements partition_pdf( 产品手册.pdf, strategyhi_res, # 高分辨率版面分析 infer_table_structureTrue, # 识别表格结构 extract_images_in_pdfTrue, # 抽取出图片 ) for el in elements: print(type(el).__name__, |, str(el)[:80])这样得到的elements里会有Title、NarrativeText、ListItem、Table等类型类型本身就是很好的元数据。如果你的PDF是扫描版还可以让Unstructured自动调用OCR做识别但速度会慢不少建议只在需要时开。3.3 表格到底要不要“拆开”存这是RAG场景里一个很纠结的问题。表格在PDF里有两种命运一种是只保留文本把表格内容转成Markdown或HTML字符串作为文本块存入向量库另一种是拆成“行”或“单元格”每一行单独入库同时保留表头作为上下文。我的经验是如果表格是“查询型”内容比如“产品参数表”、“费用说明”拆行存储效果最好因为用户问“某型号的功率是多少”时召回时可以直接匹配到一行上下文加上表头就能回答。如果表格是“叙述型”内容比如报告里的数据解读就别拆保持整表转成Markdown作为一段语义块。具体可以用pdfplumber提取表格为DataFrame再按业务决定粒度。3.4 双栏论文与页眉页脚的陷阱双栏文档是版面分析的重灾区。如果没有做栏区识别文本顺序会乱。我常用的办法是用坐标做列聚类统计页面上所有文字块的左上角x坐标如果明显分成两簇就按左栏从上到下、然后右栏从上到下的顺序重排。页眉页脚则可以通过坐标和内容模式过滤页眉通常在页面顶部内容重复或包含文档标题页脚通常在底部可能是页码、日期。直接按y坐标阈值切掉会误伤正文最好用“连续多页出现相同字符串”来判定。我用脚本统计某个字符串在多页出现的频率超过一半就标记为页眉页脚在切块前剔除。4. 第三层面向RAG的切块与知识化——解析结果不是终点4.1 从“解析”到“知识块”的设计思路拿到版面分析后的结构化元素还不能直接灌向量库。RAG检索以“块”为单位块的质量直接决定Recall。好的块要满足三点语义相对独立、长度保持在模型窗口内、携带足够的上下文线索。很多团队直接按固定长度切比如512个字符结果把段落从中间截断语义断裂答非所问。我推荐的做法是“以文档结构为骨架”把版面分析输出的Title作为章节节点把每个段落或表格作为一个候选块如果候选块超过800字再用递归字符切分并设置一定的重叠区域比如50字符。这样标题、正文、表格的边界都保留了。4.2 切块策略固定长度还是语义边界有经验的读者可能听过“chunk size 512, overlap 50”这种经验值但一定要结合你的Embedding模型和文档类型调整。中文文档字符密度高512个字符能装不少内容可能过于稀疏英文文档512个token不是字符才合适。我一般先用tiktoken或者对应模型的tokenizer统计token数而不是数字符。比如用BGE系列Embedding模型中文块长控制在256到512 token不超过模型最大长度。切块时要按段落边界优先其次句子边界实在不行才按词/字边界切断。下面是一个简化的递归切块逻辑def recursive_split_text(text, max_len500, overlap50): if len(text) max_len: return [text] # 优先找段落边界 cut text.rfind(\n, 0, max_len) if cut max_len * 0.5: cut text.rfind(。, 0, max_len) # 中文句号 if cut max_len * 0.5: cut max_len chunk text[:cut] rest text[cut - overlap:] return [chunk] recursive_split_text(rest, max_len, overlap)这段代码只是示例生产环境需要处理更多边界情况比如Markdown表格不能从中间切。表格块我通常单独走“整块”策略不做递归拆分除非表格行数太多。4.3 元数据设计让检索结果更精准切块之后一定要附上元数据这是很多开源demo忽略的。我做知识库时每个块至少包含这几类字段source_doc文件名、page_no页码、section_title所在章节、element_type文本/表格/图片、created_at入库时间。元数据的价值在检索阶段体现用户问问题后可以先按元数据过滤比如只看某个版本、只看某类文档也可以作为上下文提示拼接给LLM。比如表格块的表头可以放在元数据里检索时只显示命中行但给LLM时再把表头拼回去这样既省token又保留语义。4.4 向量化与召回评估知识化最后一步是向量化。Embedding模型建议根据语言选中文场景优先BGE、M3E或OpenAI text-embedding-3本地部署没GPU就用ONNX的轻量模型。向量化之后一定不要只靠肉眼“看几个样例”判断效果。我习惯做一个迷你评测集准备20个真实问题每道标注期望命中的段落然后跑召回看Top 5里有没有正确答案。如果召回率低于70%优先回头查是不是切块太碎是不是元数据过滤太严格是不是问题里的关键词被PDF解析成了乱码先修解析再换模型不要一上来就调Embedding。5. 实战踩坑与调优实录5.1 高频问题与排查对照表下面这张表总结了我在PDF解析RAG项目里遇到的高频问题基本覆盖了大部分翻车场景现象可能原因解决方案抽取文本是乱码字体缺少ToUnicode映射换OCR渲染后再识别扫描件全是空白页面没有文本层先用PyMuPDF渲染150dpi以上图片再OCR双栏顺序错乱版面分析未识别分栏按文字块x坐标聚类左→右重排页眉页脚混入正文重复内容未过滤统计跨页重复串按坐标剔除表格行被拆散表格线和单元格跨度复杂用pdfplumber提取表格并做行合并切块后在段中截断固定长度切分不感知语义改为段落优先递归切分检索命中了无关块元数据缺失或块过大增加章节标题、页码过滤控制块长度这张表可以直接存下来项目上线前按图索骥检查一遍。5.2 我建议的PDF解析管线组合没有一种工具能通吃所有PDF所以我提供两套组合按项目预算和文档类型选。第一套轻量方案原生PDF为主少量表格和图片。流程是“PyMuPDF抽文本坐标 → 正则/规则做页眉页脚过滤 → 按段落结构切块”。优点是速度快、部署简单适合文档质量高、格式规范的企业内部资料。第二套完整方案混合文档包含扫描件、复杂表格、论文排版。流程是“PyMuPDF判断是否有文本层 → 无文本层走PaddleOCR识别 → Unstructured/LayoutParser做版面分析 → 表格用pdfplumber提取并按业务粒度拆行/整表 → 自定义切块元数据入库”。这套能应对80%的复杂场景代价是解析耗时明显增加建议用并发和缓存优化。5.3 评估解析质量的小工具与指标解析完PDF不能只看“能跑通”要能量化地评估。我常用的三个指标是字符覆盖率、结构还原准确率、检索命中率。字符覆盖率指的是抽取出的有效字符数PDF页面上实际可见字符数扫描件或乱码会导致这个数字偏低。结构还原准确率我一般从每个PDF里抽5个区域人工核对“抽取后的元素类型和顺序”是否与页面一致。检索命中率就是前面说的评测集召回率。基于这三个指标你才能知道改动解析流程是真的变好了还是只是换了种失败方式。我在实际项目里会写一个很简单的评测脚本读取原始PDF调用解析管线输出结构化JSON然后和人工整理的golden JSON逐项比对统计类型准确率和顺序一致率。虽然不能完全替代人工但至少能在回归测试时快速发现问题。5.4 上线前别忘了做的三件小事最后提醒三件容易被忽略但非常重要的小事。第一PDF文件大小差异巨大。有人拿1页的扫描件测试通过结果生产环境丢进一个500页的彩色手册内存直接爆掉。解析服务一定要按页流式处理别一次性把整个文档载入内存处理完一页就释放。第二并发写库时保持一致顺序。并行解析后多个进程同时写向量库很容易出现文档内块顺序错乱。建议每个文档用一个batch_id按页号排序后再批量写入。第三保留解析中间产物。把每层的结果都落盘存成JSON比如文本层、版面层、块列表。这样做的好处是当检索效果不好时你可以快速定位是解析问题还是检索问题而不用重新跑一遍流程。做RAG做到现在我越来越确认一个观点解析决定上限检索和生成决定实现多少。PDF三层解析这套方法帮我解决了很多“看起来离谱”的检索错误。每次用户反馈答非所问我第一反应就是去翻解析中间产物十有八九能在文本层或版面层找到线索。如果你也在做RAG知识库不妨先别急着调Embedding和Prompt回头把PDF解析按这三层梳理一遍很多问题会迎刃而解。

相关新闻

案卷查阅系统数字化升级:Vue+Node.js+小程序全栈开发实战

案卷查阅系统数字化升级:Vue+Node.js+小程序全栈开发实战

法院信息化这几年推进得很快,但案卷查阅这个环节,很多地方还停留在“跑腿、填表、等电话通知”的阶段。律师想阅卷,得先带着所函、委托书跑到法院档案窗口排队,材料不齐还得再跑一趟;审批人整天在纸质单子和系统之间来…

2026/10/17 19:31:43 阅读更多 →
href占位链接写法与调试全解析:从#到javascript:void(0)的坑

href占位链接写法与调试全解析:从#到javascript:void(0)的坑

前阵子我在本地起一个静态页面调试交互&#xff0c;偷懒在按钮位置上写了一个<a href"#">测试链接</a>&#xff0c;结果从点击事件、路由跳转到控制台报错&#xff0c;整整折腾了一个下午。后来我认真把“临时链接”这件事从头捋了一遍&#xff0c;才发现…

2026/10/17 19:31:43 阅读更多 →
MATLAB实现量子近似优化算法:组合优化问题求解与避坑指南

MATLAB实现量子近似优化算法:组合优化问题求解与避坑指南

简介&#xff1a;一份面向 MATLAB 用户的量子近似优化算法系统讲解 PDF&#xff0c;从组合优化问题定义、旅行商、背包、图着色等模型入手&#xff0c;逐步展开量子计算基础、问题哈密顿量与驱动哈密顿量的构建、参数优化与测量流程。内容以最大割问题作为完整案例&#xff0c;…

2026/10/17 19:30:42 阅读更多 →

最新新闻

外包项目30天:从全栈开发到系统设计的实战蜕变

外包项目30天:从全栈开发到系统设计的实战蜕变

1. 外包项目干了三十天&#xff0c;技术反而突飞猛进先说个反常识的事情&#xff1a;我之前一直以为外包是技术的坟墓&#xff0c;进去就是复制粘贴、写业务代码、跟产品经理扯皮&#xff0c;干完一个项目啥也沉淀不下来。结果上个月临时接了一个外包项目&#xff0c;前后干了一…

2026/10/17 20:25:31 阅读更多 →
XGBoost实战手册:从调参泥潭到梯度提升的工程化指南

XGBoost实战手册:从调参泥潭到梯度提升的工程化指南

简介&#xff1a;《XGBoost with Python》是Jason Brownlee撰写的英文原版经典教材&#xff0c;面向具备一定机器学习基础、希望系统掌握梯度提升与XGBoost建模的开发者与数据科学从业者。全书从AdaBoost与梯度提升原理讲起&#xff0c;逐步过渡到XGBoost的核心特性与优势&…

2026/10/17 20:25:31 阅读更多 →
这篇全身 WAM 无需生成视频,仅用一个模型搞定 11 项家庭任务!TaoToken 统一 Key 实测

这篇全身 WAM 无需生成视频,仅用一个模型搞定 11 项家庭任务!TaoToken 统一 Key 实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 20:25:31 阅读更多 →
Hermes agent 使用记录:把本地 endpoint 改到 TaoToken 的完整配置与验证

Hermes agent 使用记录:把本地 endpoint 改到 TaoToken 的完整配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 20:24:31 阅读更多 →
10分钟看懂多模态视频理解大模型VideoChat-TPO:面向新手的完整入门指南

10分钟看懂多模态视频理解大模型VideoChat-TPO:面向新手的完整入门指南

【免费下载链接】VideoChat-TPO 项目地址&#xff1a; https://ai.gitcode.com/OpenGVLab/VideoChat-TPO 点击查看 免费下载 VideoChat-TPO 是 OpenGVLab 开源的一个多模态视频理解大模型&#xff08;Multimodal LLM&#xff09;&#xff0c;基于 Mistral-7B 语言模型 ViT 视…

2026/10/17 20:24:31 阅读更多 →
并发容器源码解析:从CAS到锁的Java线程安全设计

并发容器源码解析:从CAS到锁的Java线程安全设计

1. 源码阅读前&#xff0c;先给并发容器建个坐标系我一直觉得&#xff0c;并发容器类是Java并发编程里最值得啃的一块硬骨头。它不像锁那样直观&#xff0c;也不像线程池那样有清晰的配置参数&#xff0c;它的精妙之处全藏在“性能”和“正确性”的权衡里。我自己读JDK源码那段…

2026/10/17 20:24:31 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介&#xff1a;《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南&#xff0c;重点围绕V3与R1两款模型的能力差异与适用场景展开&#xff0c;帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件&#xff0c;压缩包大小约311KB&#xff0c;篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介&#xff1a;这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档&#xff0c;共收录两百余条可直接套用的润色指令&#xff0c;涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度&#xff0c;并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介&#xff1a;本资源是一份基于OpenCV的本科课程设计完整报告&#xff0c;面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生&#xff0c;解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →