从shp到sumo:路网转换链路与netconvert参数实战
1. 从shp到osm再到sumo这条链路到底在解决什么问题做交通仿真的人迟早会撞上一个很现实的问题手头拿到的路网数据是shp格式的。可能是从某个地理信息平台下载的也可能是合作方给的甚至是从CAD图纸转出来的。但sumo这个仿真工具它原生认的是自己的.net.xml格式而通往.net.xml最顺滑的一条路是先有osm文件再用netconvert去转换。所以整条链路是这样的shp → osm → net.xml。中间那个osm环节很多人觉得多余为什么不直接从shp转到net.xml我一开始也这么想后来发现osm这层中间商其实有它的价值。osm本身是一种开放的、结构化的路网描述格式它把道路的拓扑关系、车道数、限速、道路类型这些属性用一套相对统一的标签体系表达出来。当你把shp先转成osm相当于把原始数据翻译成了一种sumo更容易理解的中间语言后续用netconvert处理时很多拓扑构建、车道推断的工作就能自动完成省去大量手工调整。这条链路适合谁如果你手上有shp格式的路网数据想快速搭一个sumo仿真场景又不想从零手动画路网那这套流程就是为你准备的。它不要求你精通GIS但需要你对shp的字段结构、osm的标签体系、sumo的netconvert参数都有基本的认识。下面我会把每一步拆开讲包括我实际踩过的坑和最后验证有效的做法。2. 动手之前shp数据的体检与预处理2.1 先搞清楚你的shp里到底有什么拿到一个shp文件别急着转。第一步是打开它看看。我习惯用QGIS或者ArcGISQGIS免费且够用。打开之后重点看三件事几何类型、坐标参考系、属性字段。几何类型决定了这个shp能不能直接用来建路网。路网数据通常是线状的LineString或MultiLineString如果是面状Polygon的那可能是道路用地范围而不是中心线需要先提取中心线。点状的就更不用说了那是节点数据得先连成线。坐标参考系是第二个关键。shp文件可能用的是地理坐标系比如WGS84单位是度也可能是投影坐标系比如各种UTM带单位是米。sumo和osm都更习惯处理经纬度坐标所以如果你的shp是投影坐标后面转换时要做一次坐标变换。我一般会在QGIS里先确认CRS如果是投影坐标就先用另存为功能转成EPSG:4326WGS84地理坐标系这样后续处理最省心。属性字段决定了你能保留多少信息。路网shp里常见的字段有道路名称、道路等级、车道数、限速、单行道标志等。这些字段在转osm的时候需要映射到osm的标签体系里。比如你的道路等级字段里写着主干道那对应osm的highway标签应该是trunk或primary写着次干道可能对应secondary。这个映射关系你得提前想清楚不然后面转出来的osm会丢失大量语义信息。2.2 字段映射表shp属性到osm标签的对应关系这一步是整条链路里最容易被忽视、但影响最大的环节。osm的道路标签体系有一套约定俗成的规范sumo的netconvert在读取osm时就是靠这些标签来判断道路类型、车道数、优先级等。如果你转出来的osm里所有道路都是默认标签那netconvert就只能靠猜结果往往惨不忍睹。下面这张表是我在实际项目中总结的常用映射关系你可以根据自己的数据情况调整shp字段示例shp值示例osm标签osm值说明道路等级高速/快速路highwaymotorway最高等级sumo中优先级最高道路等级主干道highwaytrunk/primary城市主要骨架道路道路等级次干道highwaysecondary城市一般道路道路等级支路highwaytertiary/residential小区或街区内部道路车道数4lanes4直接对应车道数量限速60maxspeed60单位默认km/h单行道是/1onewayyes单向通行道路名称XX路nameXX路保留名称便于识别这个映射不是死的。比如你的数据里没有道路等级字段只有道路宽度那你可以根据宽度来推断等级宽度大于30米算主干道15到30米算次干道小于15米算支路。这种推断虽然粗糙但比全部用默认值强得多。注意osm的maxspeed标签默认单位是km/h如果你的shp里限速单位是m/s或者mph一定要先换算。我见过有人直接把30mph写成30结果仿真出来的车慢得像蜗牛。2.3 拓扑检查断线、重叠、悬挂点shp数据最常见的问题就是拓扑错误。道路线之间该连的地方没连上不该连的地方又粘在一起。这些问题在GIS软件里可能看不出来但转到osm再进sumo之后就会变成断头路、异常连接或者孤岛路网。我一般会在QGIS里做三件事第一用拓扑检查器找出悬挂点dangling nodes也就是线的端点没有和其他线连接的地方第二检查重叠线两条线如果完全重合或者部分重合会导致osm里出现重复道路第三检查自相交一条线自己和自己交叉这在立交桥数据里很常见需要区分是平面交叉还是立体交叉。处理这些问题没有捷径就是手工修。悬挂点要么延伸线让它连上要么删掉多余的短头。重叠线要合并。自相交如果是立交需要在osm里用layer标签区分上下层否则sumo会认为它们是平面交叉导致车辆在立交桥上撞车。3. shp转osm工具选择与实操细节3.1 为什么我最终选了JOSM而不是在线转换shp转osm有好几条路可走。有人用在线转换工具上传shp下载osm简单是简单但问题很多字段映射不可控、大文件传不上去、数据隐私没保障。也有人用ogr2ogr命令行功能强大但学习曲线陡而且它转出来的osm标签需要额外处理。我最后稳定用的是JOSM OpenData插件。JOSM本来是OpenStreetMap的编辑器但它的OpenData插件可以直接打开shp文件然后你再另存为osm格式。这个方案的好处是你可以在JOSM里直观地看到转换后的道路手工调整标签修复拓扑问题然后再导出。整个过程是可视化的心里有底。具体操作步骤打开JOSM点编辑菜单里的首选项在插件选项卡里搜索opendata并安装重启JOSM。然后文件→打开文件类型选ESRI Shapefile选中你的shp。加载进来之后你会看到道路线显示在地图上。这时候别急着导出先检查一下标签。3.2 在JOSM里批量修改标签的技巧JOSM的搜索功能非常强大可以用来批量选中的道路然后统一改标签。比如你想把所有道路等级主干道的线选中就在搜索框里输入道路等级主干道回车这些线就会被高亮选中。然后你在右侧的标签/成员面板里把highway标签设成primary。这里有个小技巧如果你的shp字段名是中文JOSM可能显示乱码。解决办法是在QGIS里先把字段名改成英文或者用JOSM的标签重命名功能批量改。我一般会在QGIS里先导出一份字段名为英文的shp再进JOSM处理省去很多麻烦。还有一个坑JOSM默认会把shp的所有字段都转成osm标签包括一些你不需要的字段比如FID、面积、周长。这些冗余标签会让osm文件变大也可能干扰netconvert的判断。你可以在JOSM里用搜索-highway选中所有没有highway标签的线理论上不应该有或者导出前用编辑→批量修改标签删掉不需要的字段。3.3 导出osm时的关键设置在JOSM里导出osm点文件→另存为格式选.osm。这里有个细节JOSM默认导出的是XML格式的osm这是对的sumo的netconvert能直接读。但你要注意导出的时候不要勾选保存为压缩格式.osm.gz虽然netconvert也支持gz但调试的时候看不了内容不方便。导出之后我强烈建议你用文本编辑器打开osm文件看一眼。重点看三件事第一way标签里有没有highway标签第二lanes标签的值是不是合理第三oneway标签有没有正确设置。如果发现大量way缺少highway标签说明你的字段映射没做对需要回JOSM重新处理。提示osm文件本质上是XML你可以用grep命令快速统计各类标签的数量。比如grep -c highwayprimary your.osm就能数出有多少条primary道路。这个技巧在验证转换结果时非常有用。4. osm导入sumonetconvert参数详解与路网生成4.1 netconvert的基本命令与必选参数有了osm文件接下来就是把它转成sumo能用的net.xml。核心工具是netconvert这是sumo自带的一个命令行程序。最基本的命令长这样netconvert --osm-files your.osm -o your.net.xml这一行命令就能跑但跑出来的路网往往不能用。为什么因为netconvert默认会做很多猜测它猜你的道路怎么连接、猜车道怎么分配、猜交叉口怎么处理。猜对了是运气猜错了是常态。所以实际项目中我一般会用一组更完整的参数netconvert \ --osm-files your.osm \ --output-file your.net.xml \ --geometry.remove \ --ramps.guess \ --junctions.join \ --tls.guess-signals \ --tls.discard-simple \ --no-turnarounds \ --offset.disable-normalization \ --lefthand false每个参数都有它的用意下面我逐个解释。4.2 那些让路网能用的关键参数--geometry.remove这个参数会移除几何上的冗余点。osm里的道路线往往有很多中间点这些点对仿真来说没有意义反而增加计算量。移除之后路网更简洁。--ramps.guess自动识别匝道。如果你的路网里有高速出入口这个参数能帮netconvert判断哪些是匝道从而正确处理连接关系。没有这个参数匝道可能被当成普通道路导致连接错误。--junctions.join合并距离很近的交叉口。现实中一个大的十字路口在osm里可能被拆成好几个小节点。这个参数会把它们合并成一个逻辑交叉口避免sumo里出现一堆莫名其妙的短路段。--tls.guess-signals和--tls.discard-simple这两个参数配合使用让netconvert根据osm里的信号灯标签来生成交通信号灯同时丢弃那些不完整的信号灯信息。如果你的osm里没有信号灯数据这两个参数不会起作用但加上也无妨。--no-turnarounds禁止掉头。在很多仿真场景里我们不需要车辆在路口掉头这个参数可以简化路网逻辑。当然如果你的场景需要掉头就去掉这个参数。--offset.disable-normalization禁止坐标归一化。sumo默认会把路网坐标平移到一个以原点为中心的范围这个参数保持原始坐标。如果你后续要和其他地理数据对齐这个参数很重要。--lefthand false指定右侧通行。国内是右侧通行所以设false。如果你的数据是左侧通行地区设true。4.3 转换后的验证怎么判断路网对了netconvert跑完之后别急着开仿真。先用sumo自带的netedit打开net.xml看一眼。netedit是sumo的图形化路网编辑器能直观显示路网结构。重点检查这几个地方第一连通性。随便选一条路看它能不能通过交叉口连到其他路上。如果发现大量孤立的道路片段说明拓扑有问题。第二车道数。看看主要道路的车道数是不是和你预期的一致。如果所有路都是1车道说明lanes标签没生效。第三交叉口。看看交叉口的连接关系是否合理有没有出现车辆飞过交叉口的情况。我还会用netconvert的一个辅助功能来检查netconvert --sumo-net-file your.net.xml --plain-output-prefix check。这个命令会把net.xml拆成几个纯文本文件节点、边、连接关系你可以用文本编辑器打开看细节。特别是连接关系文件能看出每个交叉口的具体转向逻辑。5. 踩坑实录那些让我熬夜的典型问题5.1 断头路osm里看着连着sumo里却是孤岛这是最常见的问题。在JOSM里看两条路明明端点重合但转到sumo之后它们就是不连通。原因通常是两条路的端点虽然坐标相同但在osm里它们是两个独立的节点node没有共享同一个node ID。netconvert在构建拓扑时只认共享节点不认坐标重合。解决办法有两个一是在JOSM里用合并节点功能把重合的端点合并成一个节点二是在netconvert里加--junctions.join参数让它自动合并距离很近的节点。我一般两个都用先手工合并明显的再用参数兜底。5.2 车道数丢失为什么我的四车道变成了单车道osm里的lanes标签必须是纯数字不能带单位。我见过有人写成lanes4车道netconvert直接忽略。还有人写成lanes4;3想表示可变车道但netconvert不认这种语法。另外lanes标签要加在way上不是加在node上。如果你在JOSM里选中了一条路但标签面板里显示的是节点的标签那说明你选中的是节点而不是线。要确保选中整条线双击线再添加lanes标签。还有一个隐藏问题如果你的osm里同时有lanes和lanes:forward、lanes:backward标签netconvert会优先使用后者。如果你只想简单指定总车道数就只用lanes别加forward/backward。5.3 立交桥变平面交叉车辆在桥上打架立交桥在osm里需要用layer标签区分上下层。比如上层道路layer1下层道路layer0或layer-1。如果没有这个标签netconvert会认为两条路在同一平面生成平面交叉口结果就是桥上桥下的车互相干扰。在JOSM里设置layer很简单选中立交桥的上层道路在标签面板里添加layer1。注意layer的值可以是负数表示地下通道。另外bridgeyes和tunnelyes标签也有助于netconvert判断但它们不能替代layer。5.4 坐标偏移路网跑到几千公里外去了这个问题通常出现在shp本身是投影坐标、但转换时没有做坐标变换的情况下。投影坐标的单位是米数值很大比如几百万osm和sumo会把这些数值当成经纬度结果路网就跑到地球另一端去了。解决办法在QGIS里先把shp转成EPSG:4326再进JOSM。如果你已经转好了osm但发现坐标不对可以在netconvert里用--offset.x和--offset.y手动平移但这只是补救不如从源头解决。6. 从能跑到好用路网优化的几个进阶思路6.1 用netedit手工微调交叉口自动生成的路网交叉口逻辑往往不够精细。比如一个复杂的十字路口netconvert可能生成了过多的连接线导致车辆在路口内频繁变道。这时候可以用netedit打开net.xml手工删除多余的连接或者调整连接的车道对应关系。netedit里有个连接模式可以直观看到每个交叉口的连接线。你可以选中不需要的连接线删掉也可以拖动连接线改变它的起止车道。这个工作很繁琐但对于关键交叉口花时间调一调是值得的。6.2 补充交通需求让路网活起来路网建好只是第一步没有车流的sumo场景就是个空壳。下一步是生成交通需求也就是车流的出发地、目的地、出发时间。sumo提供了几种方式可以用duarouter根据OD矩阵生成路线也可以用randomTrips.py脚本生成随机车流。我一般先用randomTrips.py快速生成一批车流看看路网能不能跑通。命令大概是python randomTrips.py -n your.net.xml -o trips.xml -b 0 -e 3600 -p 1.5这个命令会生成从0秒到3600秒、平均每1.5秒发一辆车的出行需求。然后配合duarouter生成路线文件最后在sumo-gui里加载net.xml和rou.xml就能看到车跑了。6.3 性能优化大路网怎么跑得快如果你的路网很大比如整个城市sumo跑起来会很慢。几个优化方向第一用--geometry.remove和--junctions.join减少路网复杂度第二在netconvert里加--no-internal-links去掉交叉口内部的连接线能显著减少计算量第三仿真时用--step-length调大仿真步长比如从默认的1秒调到2秒速度会快很多但精度会下降。还有一个技巧如果你的仿真不需要GUI就用命令行版的sumo而不是sumo-gui速度能快好几倍。调试的时候用GUI跑数据的时候用命令行这是我惯用的做法。7. 一些零散但有用的经验关于shp字段的命名我建议全部用英文小写不要用中文也不要用空格。中文在某些工具里会乱码空格在命令行里要转义都是麻烦。用下划线连接单词比如road_class、lane_num、speed_limit清晰又安全。关于osm文件的版本JOSM导出的osm默认是0.6版本netconvert完全支持。但如果你从其他渠道拿到osm注意看一下文件头的version属性太老的版本可能需要先升级。关于netconvert的日志它跑的时候会输出很多信息包括警告和错误。别忽略这些日志尤其是warning。很多问题在warning里已经提示了比如junction is not connected或者edge has no lanes。我习惯把日志重定向到文件里跑完之后用grep搜warning和error逐个排查。最后说一个心态问题从shp到sumo这条路第一次走大概率不会一次成功。路网数据的问题千奇百怪每个数据集都有自己的脾气。我的建议是先用一小块区域试通整个流程确认方法可行之后再处理完整数据。这样即使出问题排查范围也小得多。我在实际项目中通常会把整个流程脚本化shp预处理、JOSM转换、netconvert参数、验证步骤都写成脚本或者文档下次遇到新数据直接套用效率能提升不少。

相关新闻

雷电模拟器+Xposed框架实现消费券自动领取的安卓自动化方案

雷电模拟器+Xposed框架实现消费券自动领取的安卓自动化方案

1. 这套组合到底在解决什么问题先把话说在前头:这篇东西聊的是安卓模拟器环境下的自动化操作思路,核心围绕雷电模拟器、Xposed框架以及消费券领取场景这三个关键词展开。我第一次接触这个组合,是因为身边有朋友抱怨每次消费券发放都是“秒没”…

2026/10/14 18:08:35 阅读更多 →
NOC指导教师认证真题拆解:递归、二分与机器人巡线核心考点

NOC指导教师认证真题拆解:递归、二分与机器人巡线核心考点

简介:这份资料围绕全国中小学信息技术创新与实践大赛(NOC)指导教师认证真题整理而成,面向备考该认证的指导教师及竞赛辅导人员,覆盖编程基础、机器人、人工智能、算法与数据结构等核心考点,适合用于考前自测…

2026/10/14 18:08:35 阅读更多 →
新能源无人化场站:边缘AI与远程集控落地指南

新能源无人化场站:边缘AI与远程集控落地指南

简介:这份《新能源“无人化”场站解决方案白皮书》由金风服务GOLDWIND推出,面向新能源场站运维、智能化改造及能源数字化领域的技术与管理人员,聚焦场站智能化、无人化操作与自动化控制等核心议题,帮助读者理解如何借助物联网、人…

2026/10/14 18:08:35 阅读更多 →

最新新闻

Java 面向对象|大二学习笔记,把最难啃的这块讲明白

Java 面向对象|大二学习笔记,把最难啃的这块讲明白

之前把 Java 基础语法过完了,if、for、数组、方法写起来还算顺手,可一碰到面向对象直接卡壳。很长一段时间我都觉得:不就是写个 class 然后 new 对象吗?好像看懂了,但一写代码就乱,分不清什么时候用继承、什…

2026/10/15 2:18:18 阅读更多 →
Bowser 2.x 版本演进全解析:从 API 重写到 Client Hints 时代的浏览器检测器

Bowser 2.x 版本演进全解析:从 API 重写到 Client Hints 时代的浏览器检测器

开发工具 【免费下载链接】bowser a browser detector 项目地址: https://gitcode.com/gh_mirrors/bo/bowser 点击查看 免费下载 导读:本文以 Bowser(当前仓库为 gh_mirrors/bo/bowser,一个轻量级浏览器/平台/引擎检测库&#xf…

2026/10/15 2:18:18 阅读更多 →
FDFullscreenPopGesture 源码级解析:用 AOP 为 UINavigationController 开启全屏滑动返回

FDFullscreenPopGesture 源码级解析:用 AOP 为 UINavigationController 开启全屏滑动返回

移动开发UI组件 【免费下载链接】FDFullscreenPopGesture A UINavigationControllers category to enable fullscreen pop gesture with iOS7 system style. 项目地址: https://gitcode.com/gh_mirrors/fd/FDFullscreenPopGesture 点击查看 免费下载 FDFullscreenP…

2026/10/15 2:18:18 阅读更多 →
为什么视频AI这么贵?一份关于“省钱“技术的全景调查

为什么视频AI这么贵?一份关于“省钱“技术的全景调查

你有没有想过,为什么手机上的视频AI助手总是卡顿,或者干脆不支持太长的视频?答案很简单,也很扎心:视频太贵了。不是钱包意义上的贵,是计算意义上的贵。一段一分钟的视频,按每秒抽一帧算,也有60张图。每张图…

2026/10/15 2:18:18 阅读更多 →
紫铜韵致筑院墅 以铝代木承江南雅韵

紫铜韵致筑院墅 以铝代木承江南雅韵

在温州的高端低密墅区,一方苏式院墅藏着江南栖居的理想模样。白墙黛瓦间,紫铜色廊柱挺拔温润,万字挂落玲珑精巧,飞檐翘角下雀替雕花细腻,连廊栏杆、檐下构件处处彰显东方雅致。这座极具质感的中式院墅,并未采用昂贵的纯铜或易损的实木打造,而是以仿铜铝代木构件体系实现 —— 以…

2026/10/15 2:18:18 阅读更多 →
Bambu Studio 切片教程:从模型导入到可用切片的完整上手路径

Bambu Studio 切片教程:从模型导入到可用切片的完整上手路径

Bambu Studio 切片教程:从模型导入到可用切片的完整上手路径 【免费下载链接】BambuStudio PC Software for BambuLab and other 3D printers 项目地址: https://gitcode.com/GitHub_Trending/ba/BambuStudio 打印出来的模型边缘翘起、支撑硬到拿镊子都抠不干…

2026/10/15 2:17:17 阅读更多 →

日新闻

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/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/14 7:53:34 阅读更多 →