WEB搜索技术课程总结:从信息检索基础到倒排索引与BM25排序实战
1. 这门课到底在讲什么从“会搜”到“会做搜索”很多人第一次看到“WEB搜索技术”这个课程名第一反应是这不就是教你怎么用搜索引擎吗如果你也这么想那说明你还没真正接触过这个领域。我当初选这门课的时候也带着类似的误解以为无非是讲几个搜索语法、高级指令之类的技巧。结果第一节课就被打脸了——这门课的核心根本不是“怎么搜”而是“搜索系统本身是怎么被造出来的”。说得再直白一点这门课要解决的核心问题是当你面对海量网页数据时如何设计一套系统让用户输入几个关键词就能在毫秒级时间内返回最相关的结果。这背后涉及的是信息检索、倒排索引、排序算法、爬虫系统、分布式架构等一整套工程与算法体系。它既是计算机科学中信息检索方向的经典内容也是当前很多互联网产品最核心的基础设施之一。这门课适合什么人我的判断是三类人值得认真投入第一类是对后端系统设计感兴趣的开发者因为搜索系统几乎涵盖了大规模数据处理的所有典型问题第二类是想进入推荐、广告、搜索等方向的算法工程师因为排序和相关性计算是这些方向的共同基础第三类是产品经理或数据分析人员理解搜索系统的能力边界和成本结构能帮你做出更合理的产品决策。我写这篇总结的目的很纯粹把我在学习这门课过程中整理的大纲脉络、踩过的坑、以及真正让我豁然开朗的几个关键理解点完整地分享出来。不管你是正在学这门课还是打算自学搜索技术希望这些内容能帮你少走一些弯路。2. 课程大纲的整体设计逻辑与拆解2.1 为什么大纲要从“信息检索基础”讲起这门课的大纲设计有一个很清晰的递进逻辑先建立理论框架再进入工程实现最后讨论系统优化和扩展。第一部分是信息检索基础包括布尔模型、向量空间模型、概率模型等经典检索模型。很多人学这部分的时候容易觉得“太理论了跟实际写代码有什么关系”但我后来的体会是这部分恰恰是理解后续所有工程决策的根基。举个例子为什么倒排索引要记录词频和位置信息因为向量空间模型里计算相似度需要TF-IDF权重而短语查询需要位置信息来判断词序。如果你不理解这些模型在算什么你就无法理解索引结构为什么要那样设计。我在复习这部分的时候自己动手用Python实现了一遍TF-IDF计算和余弦相似度排序代码量不大但跑通之后对整个检索流程的理解一下子就具体了。提示学理论模型时不要只背公式一定要用一个小数据集亲手算一遍。哪怕只有10篇文档手动计算一遍TF-IDF和相似度比看十遍PPT都管用。2.2 从理论到工程索引与检索系统的核心模块大纲的第二部分进入工程实现核心围绕倒排索引的构建与查询处理展开。这部分是整个课程最硬核也最实用的内容。倒排索引说白了就是“从词到文档”的映射表每个词对应一个 posting list里面记录了包含这个词的所有文档ID以及附加信息词频、位置等。构建倒排索引的过程涉及几个关键决策分词怎么做、停用词怎么处理、词干还原要不要做、索引是存内存还是存磁盘。每一个决策都会影响最终的检索效果和系统性能。我在做课程项目的时候一开始把所有索引都放在内存里小数据集跑得飞快但数据量一上来内存直接爆掉。后来改成磁盘上的分段索引结构才真正理解了为什么工业级搜索引擎都采用“分段合并”的策略。查询处理部分则涉及布尔查询、短语查询、通配符查询等多种查询类型的实现。这部分的学习建议是不要只看讲义上的伪代码一定要自己写一个能跑的小型搜索引擎。哪怕只支持布尔查询和短语查询完整走一遍从分词到索引到查询到排序的流程收获会非常大。2.3 排序与相关性搜索系统的“灵魂”大纲的第三部分聚焦排序算法和相关性计算。如果说索引解决的是“能不能找到”的问题那排序解决的就是“找得对不对”的问题。这部分从经典的BM25算法讲起逐步延伸到机器学习排序Learning to Rank的基本思路。BM25是我个人认为整个课程中最值得深入理解的算法之一。它本质上是在TF-IDF的基础上做了两个重要修正一是对词频做了饱和处理避免某个词出现次数过多导致权重无限增大二是引入了文档长度归一化避免长文档因为天然包含更多词而获得不公平的优势。理解这两个修正背后的直觉比记住公式本身重要得多。机器学习排序部分则介绍了pointwise、pairwise、listwise三种基本框架。这部分内容在工业界应用非常广泛但课程中只能讲个大概。我的建议是如果你对排序方向感兴趣学完这门课之后可以专门找LTR的综述文章深入阅读并结合开源工具做实验。2.4 系统扩展与前沿话题大纲的最后部分讨论搜索系统的扩展性和一些前沿话题包括分布式索引、查询缓存、增量索引更新等。这部分内容相对开放很多细节需要自己查阅资料补充。但它的价值在于帮你建立一个“全局视角”一个真实的搜索系统不只是算法问题更是工程问题、架构问题、甚至成本问题。我印象很深的是课程中讨论“增量索引”的部分。真实场景下网页数据是不断更新的你不可能每次都重建整个索引。如何在保证查询性能的前提下高效地合并新数据和旧索引是一个非常经典的工程难题。课程中介绍的“分层索引定期合并”策略后来我在实际工作中也见到了类似的设计这种理论与实践的对应关系让我觉得特别有意思。3. 核心细节解析与实操要点3.1 分词与文本预处理看似简单坑最多文本预处理是搜索系统的第一步也是最容易被低估的一步。很多人觉得分词不就是按空格切吗英文确实可以这么粗暴处理但一旦涉及中文、日文等语言分词就变成了一个独立的研究方向。课程中介绍了基于词典的分词方法和基于统计的分词方法前者依赖词典质量和匹配策略后者依赖大规模语料训练。我在实操中最大的体会是分词器的选择直接决定了搜索系统的上限。如果分词粒度太粗会导致召回率下降如果粒度太细又会引入大量噪声。比如“搜索引擎优化”这个词如果切成“搜索”、“引擎”、“优化”三个词用户搜“搜索引擎”时可能匹配不到但如果整词保留用户搜“优化”时又可能漏掉。实际系统中通常采用“细粒度索引粗粒度查询”的混合策略来平衡。停用词处理也是一个需要根据场景调整的环节。课程中给出的通用停用词表在实际项目中未必适用。比如在电商搜索场景下“的”、“了”这些词确实可以去掉但“包”、“装”这类词在某些品类下可能是关键区分词。我的建议是停用词表一定要结合具体业务场景来定制不要直接套用通用列表。3.2 倒排索引的构建从内存到磁盘的关键转折倒排索引的构建流程可以拆解为几个步骤文档收集、分词处理、词项排序、posting list合并、索引写入。在小规模场景下整个过程可以在内存中完成但一旦数据量超过内存容量就必须引入外部排序和分段索引的机制。课程中重点讲解了基于“排序-合并”的索引构建方法。具体来说先把文档集分成多个批次每个批次在内存中构建一个临时索引段并写入磁盘然后通过多路归并的方式将这些段合并成更大的段。这个过程和归并排序的思路非常相似理解了归并排序就很容易理解索引合并。我在实现这个流程时踩过一个坑合并策略的选择会显著影响查询性能。如果合并太频繁写入放大严重如果合并太少查询时需要扫描太多段延迟会上升。课程中提到的“分层合并”策略类似LSM-Tree的思路是一个很好的折中方案值得深入理解。注意索引合并时的I/O开销往往被低估。在实际系统中合并操作通常放在后台异步执行并且需要限速避免影响在线查询的响应时间。3.3 查询处理与优化让搜索“快且准”查询处理部分涉及查询解析、查询重写、查询执行三个环节。查询解析负责把用户输入的原始字符串转换成结构化的查询表达式查询重写负责对查询进行扩展或修正比如拼写纠错、同义词扩展查询执行则负责在索引上实际检索并返回结果。课程中让我印象最深的是“跳表指针”这个优化技巧。在合并多个posting list时如果每个list都按文档ID排序就可以通过跳表指针快速跳过不相关的文档大幅减少比较次数。这个优化在短语查询中尤其重要因为短语查询需要先找到包含所有词项的文档再验证词项位置是否相邻。另一个实用技巧是查询缓存。对于高频查询可以把结果缓存起来直接返回避免重复计算。但缓存的设计需要考虑失效策略和内存管理课程中介绍的LRU策略是一个基础但有效的方案。3.4 相关性排序BM25与机器学习排序的衔接BM25的计算涉及三个核心参数k1控制词频饱和速度b控制文档长度归一化程度以及每个词项的IDF值。课程中给出了参数的经验取值范围但强调这些值需要根据实际数据分布来调优。我在实验中发现k1和b的取值对排序效果的影响非常显著。在短文本场景下比如标题搜索b可以设得小一些因为文档长度差异不大但在长文本场景下比如论文搜索b需要设得大一些以抑制长文档的优势。这种“根据数据特性调参”的思路是课程中反复强调的实践原则。机器学习排序部分课程重点介绍了特征工程的基本思路查询-文档相关性特征、文档质量特征、查询特征、用户行为特征等。这部分内容为后续深入学习LTR打下了基础但真正要做好排序还需要大量特征工程和在线实验的经验积累。4. 实操过程与核心环节实现4.1 环境准备与技术选型课程项目我选择用Python来实现一个迷你搜索引擎主要考虑是开发效率高、调试方便。具体技术栈如下分词用jieba中文场景索引存储用SQLite简化磁盘操作查询处理用纯Python实现排序用BM25算法手写实现。如果你也想自己动手做一个我的建议是不要一上来就追求“工业级”。先用小数据集比如几百篇文档跑通全流程再逐步增加数据量和功能。这样你能快速看到结果保持学习动力同时也能在扩展过程中真正理解每个模块的作用。4.2 数据采集与预处理实操数据采集我用了一个简单的爬虫脚本从一个公开的新闻网站上抓取了约500篇新闻文章。这里要强调的是爬虫一定要遵守目标网站的robots协议控制请求频率不要给对方服务器造成压力。课程中也专门强调了这一点技术学习不能以损害他人利益为代价。预处理流程包括HTML标签清洗、正文提取、中文分词、停用词过滤。HTML清洗我用的是BeautifulSoup正文提取用了一个简单的启发式规则取包含最多文本的div块。分词用jieba的精确模式停用词表用的是哈工大停用词表加上一些自定义补充。import jieba from bs4 import BeautifulSoup def preprocess(html_content): soup BeautifulSoup(html_content, html.parser) text soup.get_text() words jieba.lcut(text) stopwords load_stopwords(stopwords.txt) filtered [w for w in words if w not in stopwords and len(w) 1] return filtered这段代码看起来简单但实际跑起来会遇到各种问题编码错误、特殊字符、空文档等等。我的经验是预处理阶段一定要加充分的日志和异常处理否则后面排查问题会非常痛苦。4.3 索引构建与查询实现索引构建我采用了“内存构建磁盘存储”的方案。具体来说遍历所有文档对每篇文档的分词结果建立词到文档ID的映射同时记录词频和位置信息。构建完成后把索引序列化到磁盘。查询实现支持三种模式单词查询、AND查询、短语查询。单词查询直接查posting listAND查询对多个posting list求交集短语查询在AND查询的基础上验证位置相邻性。def phrase_query(index, terms): # 先做AND查询 postings [index.get(t, []) for t in terms] if not all(postings): return [] # 求交集 common_docs set(postings[0]) for p in postings[1:]: common_docs set(p) # 验证位置相邻 results [] for doc_id in common_docs: positions [index.get_position(t, doc_id) for t in terms] if check_adjacent(positions): results.append(doc_id) return results这段代码的性能瓶颈在位置验证环节。优化思路是先用跳表指针快速缩小候选文档范围再逐个验证。我在500篇文档的数据集上测试优化后短语查询的延迟从约50ms降到了约10ms。4.4 排序效果评估与调参排序效果评估我用了课程中介绍的MAPMean Average Precision和NDCGNormalized Discounted Cumulative Gain两个指标。为了计算这些指标我手动标注了20个查询的相关文档列表作为ground truth。BM25的参数调优我采用了网格搜索的方式k1在[1.0, 2.0]范围内以0.1为步长b在[0.3, 0.9]范围内以0.1为步长遍历所有组合选择MAP最高的参数组合。最终在我的数据集上k11.5、b0.6的效果最好。这个调参过程让我深刻体会到没有“万能最优参数”只有“针对特定数据集和查询分布的最优参数”。工业级搜索系统需要持续监控和调优而不是一次调好就一劳永逸。5. 常见问题与排查技巧实录5.1 分词导致的召回问题问题现象用户搜索某个关键词明明文档中包含这个词但就是搜不出来。排查思路首先检查分词结果看目标词是否被切分成了多个部分。比如用户搜“深度学习”如果分词器把“深度”和“学习”切开了而索引中存储的是分开的词项那么短语查询可能因为位置信息不匹配而失败。解决方法一是调整分词器的粒度二是建立同义词词典把“深度学习”映射到“深度”“学习”的组合查询。实际系统中通常两种方法结合使用。5.2 索引膨胀与查询变慢问题现象随着文档数量增加索引文件越来越大查询延迟明显上升。排查思路检查索引中是否存储了过多冗余信息。比如位置信息虽然对短语查询有用但如果你的系统很少做短语查询存储位置信息就是浪费空间。另外检查是否有大量低频词占用了索引空间。解决方法一是对低频词做截断处理不建立索引二是对位置信息做压缩存储比如差值编码三是引入查询缓存减少重复查询的开销。5.3 排序结果不符合预期问题现象搜索结果中明显更相关的文档排在后面不太相关的文档反而排在前面。排查思路先检查BM25参数是否合理特别是b值是否适合当前文档长度分布。然后检查是否有其他因素干扰排序比如文档质量、时效性等。解决方法除了调参之外可以考虑引入更多排序特征。比如文档的点击率、发布时间、来源权威性等。课程中介绍的LTR框架就是用来融合多特征的。5.4 常见问题速查表问题类型典型现象优先排查方向常用解决手段召回不足搜不到已知存在的文档分词粒度、同义词、索引覆盖调整分词器、加同义词词典查询延迟高响应时间超过预期索引大小、查询复杂度、缓存命中率压缩索引、优化查询计划、加缓存排序不准相关文档排名靠后BM25参数、特征覆盖、数据分布调参、加特征、换排序模型索引更新慢新文档长时间搜不到合并策略、写入频率、资源竞争调整合并周期、异步写入、限速提示排查搜索系统问题时一定要有“分层定位”的思路。先确认是索引问题还是查询问题再确认是数据问题还是算法问题逐层缩小范围避免盲目调参。6. 学习这门课之后的一些个人体会学完这门课最大的收获不是记住了多少算法公式而是建立了一种“系统思维”。搜索系统是一个典型的“多模块协作”系统任何一个模块的设计决策都会影响其他模块。比如分词粒度影响索引大小索引结构影响查询速度查询速度又影响排序策略的选择空间。这种全局视角是我在单纯刷算法题时完全得不到的。另外一点很深的体会是搜索技术的很多思想是可以迁移的。倒排索引的本质是“空间换时间”这个思路在缓存设计、数据库索引、甚至推荐系统的召回阶段都有体现。BM25的饱和函数思想在广告出价、热度计算等场景下也能看到类似的影子。学一门技术如果能把它背后的通用思想提炼出来价值就远远超过技术本身。如果你正在学这门课我的建议是一定要动手做项目。哪怕只是一个支持布尔查询的迷你搜索引擎完整走一遍流程的收获也比只看书和PPT大得多。遇到问题不要怕搜索系统的调试过程本身就是最好的学习方式。我在实现短语查询时卡了整整两天但解决之后对位置索引的理解一下子就深刻了这种“卡住-思考-突破”的循环才是真正长本事的路径。最后分享一个我常用的学习方法每学完一个模块就用自己的话写一篇总结假装在给一个完全不懂的人讲解。如果你能讲清楚说明你真的理解了如果讲不清楚说明还有盲区。这个方法帮我发现了不少“以为自己懂了其实没懂”的地方推荐你也试试。

相关新闻

基于用户组的在线教育平台课程权限管理实践

基于用户组的在线教育平台课程权限管理实践

1. 需求场景与解决方案选型 视频课程权限管理是在线教育平台的核心功能之一。最近在搭建内部培训系统时,我需要实现"仅限市场部成员观看销售技巧课程"这类精细化权限控制。经过多方案对比,最终选择基于用户组(User Group&#xff0…

2026/10/15 11:35:15 阅读更多 →
数据仓库工程师面试题:从SQL窗口函数到ETL链路的实战避坑指南

数据仓库工程师面试题:从SQL窗口函数到ETL链路的实战避坑指南

简介:这份《数据仓库工程师面试题》文档面向准备数据仓库方向面试的求职者与初级数仓工程师,围绕数仓核心概念与工程实践梳理高频考点,帮助读者在有限时间内系统回顾知识体系、查漏补缺。资源包内含1个docx文件,整体约31KB&#x…

2026/10/15 11:34:14 阅读更多 →
多智能体协作黑箱破解:Agent-Reach实现任务状态可达性分析

多智能体协作黑箱破解:Agent-Reach实现任务状态可达性分析

搞 AI Agent 的开发者最近应该都有类似体验:单个 Agent 的推理链路已经可以跑得比较顺,但一旦把多个 Agent 放进同一个业务流程里协作,问题立刻变得棘手。谁先执行、谁的输出喂给谁、某一环失败后整个链路怎么收敛,稍不留神任务就…

2026/10/15 11:34:14 阅读更多 →

最新新闻

目标检测后处理:IOU与NMS从原理到工程化实战

目标检测后处理:IOU与NMS从原理到工程化实战

做目标检测的朋友都知道,模型跑通只是第一步,真正决定最终效果上限的,往往是两段看起来很不起眼的计算:IOU与NMS。IOU负责衡量两个检测框到底重合成什么样,NMS负责把同一目标周围那些重复的、多出来的框“压”下去。无…

2026/10/15 21:19:30 阅读更多 →
Docker Compose部署WeKnora:从环境规划到上线运维的完整指南

Docker Compose部署WeKnora:从环境规划到上线运维的完整指南

我第一次帮人部署WeKnora时,对方给的服务器上已经跑了七八个业务,系统里Python和Node版本乱成一锅粥。当时我们几乎没有犹豫,直接用Docker部署WeKnora,把服务、数据库、缓存全部容器化隔离,不到半天就正常跑起来&#…

2026/10/15 21:19:30 阅读更多 →
500k长上下文实战:Codex与ChatGPT Work工作流重构指南

500k长上下文实战:Codex与ChatGPT Work工作流重构指南

直接说结论:从16k到128k,再到200k,然后跳到500k,这个数字看着只是“变大了”,但真正用起来你会发现,这根本不是同一个物种。我花了几个晚上把 Codex 和 ChatGPT Work 里的长上下文工作流重新跑了一遍&#…

2026/10/15 21:19:30 阅读更多 →
TxBENCH硬盘检测全攻略:性能测试、SMART健康与翻新盘识别

TxBENCH硬盘检测全攻略:性能测试、SMART健康与翻新盘识别

简介:TxBENCH 电脑及硬盘检测工具是一套面向电脑 DIY 爱好者、硬件评测人员及普通用户的 SSD 检测资源,覆盖基础读写测试、大文件拷入高级测试、安全擦除与驱动信息查看等核心功能,可帮助判断硬盘性能是否达到预期,并兼顾旧盘数据…

2026/10/15 21:19:30 阅读更多 →
Halcon+MFC工业模板匹配实战:从环境搭建到产线鲁棒部署

Halcon+MFC工业模板匹配实战:从环境搭建到产线鲁棒部署

简介:本资源是一个基于Halcon与MFC联合开发的模板匹配实战Demo,面向具备C基础和图像处理入门经验的Windows桌面应用开发者,解决工业视觉中目标定位、多尺度形状识别与灰度匹配等典型需求。项目完整实现形状匹配、形状缩放匹配及灰度匹配三类核…

2026/10/15 21:19:30 阅读更多 →
MySQL零基础入门:从安装到增删改查实战教程

MySQL零基础入门:从安装到增删改查实战教程

写这篇教程的初衷很简单——我见过太多人一上来就啃官方文档,结果被术语劝退;也见过不少人背了一堆命令,却连数据库都没装好。MySQL作为最流行的开源关系型数据库,它其实没有传说中那么难,难的是没人告诉你第一步该干嘛…

2026/10/15 21:18:29 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →