SAM单图转3D物体:从2D分割到点云重建的完整技术管线
一张照片就能换来一个能转、能缩放、能导入游戏引擎或者建模软件的3D物体这个想法确实很有吸引力。最近我花了不少时间研究 SAM 3D Objects 这条技术路线简单说就是把“分割一切”的 SAMSegment Anything Model能力延伸到 3D 重建里最终实现单张图片即可重构 3D 物体。它不做多视角采集不需要结构光扫描只靠普通 RGB 图片就能得到一个完整度尚可的三维资产。听起来有点魔幻但整套流程跑通之后会发现思路其实很清晰分割、估计深度、反投影点云、再重建表面。这篇分享就围绕这个流程来写包含我的设计取舍、核心代码思路、参数调整经验以及踩过的那些坑。适合正在研究 3D 视觉、做数字资产生产或者对 AIGC 与几何重建交叉方向感兴趣的开发者阅读。1. 为什么单图重建是难点以及 SAM 在这里面到底帮了什么忙1.1 从一张图恢复 3D 信息本质上是个“病态问题”我必须先泼一盆冷水单张图片重建 3D 物体数学上是不适定问题ill-posed problem。一张 2D 图片丢掉了太多信息同一个像素可能是远距离的大楼也可能是近距离的小杯子物体的背面更是完全没有出现在画面里。所以任何声称“单图重建”的方案本质上都在用先验知识做合理猜测。深度、形状、不可见部分全靠模型根据海量训练样本“脑补”。这也是为什么早期很多单图重建方法效果很差它们直接让一个网络从 RGB 图像回归体积场或网格结果往往只能得到一团模糊的、缺乏边缘细节的形状。问题不在于网络能力不够而在于“从颜色直接预测几何”这个中间环节没有结构约束。SAM 的出现改变了其中一环它把“图像中哪个像素属于哪个物体”这件事做得非常干净可靠而我们做复杂几何重建时恰恰最需要这个强语义分割结果来限定目标区域。把“分割”从重建里解耦出来整个管线一下子就清晰了。1.2 SAM 在管线中的角色不是“重建器”而是“空间接口”很多人误以为 SAM 是做 3D 分割的其实它本身是 2D 分割基础模型。它输入一张图片和可选的提示点、框、掩码输出高质量的物体掩码。但注意这个 mask 恰恰是连接 2D 图片与 3D 重建最重要的桥梁。在我做的模拟项目 X 里SAM 承担了三个功能。第一前景背景分离。没有干净的 mask深度图里的背景点云就会混进来重建出来的网格会是一团杂乱表面。第二定位物体尺度。mask 的边界框可以作为深度归一化的参考假设物体占据画面多大范围结合先验大小约束可以估算一个合理的实际尺度。第三为后续纹理映射提供 UV 依据。mask 内部像素是唯一需要保留颜色的区域这个区域直接决定了点云颜色贴回网格时的采样权重。因此SAM 不是“重建器”它是我整个 3D 管线的空间接口。1.3 整体技术思路拆解分割、深度、反投影、网格生成把 SAM 3D Objects 这套流程拆开是四个连续的模块图像语义分割SAM 自动或半自动地生成目标物体的 mask。单目深度估计用专门的单目深度模型从 RGB 图像预测相对深度图得到每个像素的深度值。反投影与点云生成结合相机内参假设和 mask把前景像素从 2D 坐标系转换到 3D 世界坐标系生成带颜色点云。表面重建与导出对点云做降采样、滤波再用表面重建算法生成封闭网格导出为 PLY、OBJ 或 GLB。这个思路的好处是每个环节都可被替换、可被验证。如果分割不好可以换更强的分割模型如果深度不准可以单独优化深度模型如果表面重建太粗糙可以用更精细的网格生成算法。比起端到端直接生成这种模块化设计对工程调优友好得多。我在搭建过程中最大的感受是不要指望某一个模型解决所有问题而是把基础模型当作高质量零件组合成一套可控的流水线。2. 核心框架与关键模块设计2.1 两层模型协同分割 mask 与单目深度图的配合方式分割和深度估计是同步进行的但它们的结果最终要对齐。我建议先跑分割再跑深度然后用 mask 去裁剪深度图。理由是深度模型的输出往往在边缘处有连续过渡目标物体和背景之间的深度跳变不够陡峭直接重建容易产生粘连结构。用 mask 裁剪之后背景深度硬性剔除前景点云就干净了。还有一个细节很多教程不会提mask 和深度图存在分辨率不匹配的问题。SAM 通常按 1024x1024 推理单目深度模型可能按 518x518 之类的输入分辨率计算。如果直接 resize边界会偏移。我的做法是把深度图 resize 到和 mask 相同分辨率然后用形态学腐蚀操作把 mask 向内收缩两个像素再与深度图的置信度区域做交集。这样做能显著减少前景和背景边缘混叠导致的“毛边点云”。2.2 坐标反投影从深度图到带颜色点云的数学细节反投影的核心公式不复杂。假设已知像素坐标 (u, v)、相机焦距 (fx, fy)、主点 (cx, cy) 和该像素深度 z三维坐标为x (u - cx) * z / fxy (v - cy) * z / fyz z单图重建没有真实相机内参所以需要做一个合理假设。在模拟项目 X 里我默认主点位于图像中心焦距则根据模型输入分辨率设定一个经验值。比如图像宽度为 W则 fx fy 0.8 * W这个值代表大约 50 度左右的水平视场角对大多数用手机或者普通相机拍摄的物体照片来说是比较稳妥的初值。拿到这些参数后把 mask 内每个有效像素都投影到三维空间得到原始点云。这里必须强调单目深度模型输出的是相对深度或视差不是真实距离。你需要把它们归一化到固定范围再配合物体尺寸先验做整体缩放。我在过程中跑过一个保险的做法找到 mask 区域内深度值的中位数然后把整个深度图除以这个中位数让物体中心深度归一化到 1.0 左右。这样后续重建不受输入图片尺度和深度范围差异影响结果更稳定。2.3 表面重建点云到网格的路要怎么选从点云生成网格我试过两种主流方案各有适用场景。第一种是深度图直接生成 TSDF。如果深度图质量好、视角单一直接用 TSDF 融合可以快速得到带厚度的表面。问题在于单图深度噪声大TSDF 很容易产生波浪形表面。第二种是点云泊松重建。先对点云估计法线然后求解泊松方程可以得到封闭且平滑的网格。泊松重建对点云密度均匀性要求高单图反投影出来的点云往往是中心密、边缘稀疏所以需要先做体素下采样和法线估计。我在真实项目中默认走“点云 → 下采样 → 法线估计 → 泊松重建”这条路效果最可预测。还需要处理“背面缺失”的问题。单图只有可见面点云泊松重建会把背面“缝合”得比较平看起来像一张片。我的做法是在重建后加一道对称补全如果物体左右对称性明显就沿 y 轴镜像点云并重新融合如果不确定对称轴至少用封闭网格的深度修复填平背面空洞避免生成的模型出现大面积破洞。3. 实操流程从图片到可编辑 3D 模型的完整步骤3.1 环境搭建与依赖准备我建议在一台显存不低于 8GB 的机器上跑完整流程哪怕用 CPU 也能运行但速度会非常难受。先创建一个干净的 Python 环境然后把核心依赖装好conda create -n sam3d python3.10 -y conda activate sam3d pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install opencv-python numpy matplotlib scipy trimesh open3dSAM 和单目深度模型都需要下载预训练权重。下载完成后用一个配置类统一管理模型路径。我习惯把权重文件放在weights/目录下避免代码里到处写绝对路径。3.2 关键代码实现五个步骤写清楚下面是模拟项目 X 的核心管线代码框架我做了简化但保留了关键逻辑你可以直接照着搭import torch import numpy as np import cv2 import trimesh import open3d as o3d # 假设 sam_segment 是封装好的 SAM 推理函数 # 假设 depth_predict 是封装好的单目深度估计函数 def load_image(path): img cv2.imread(path) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) return img def get_mask(image, sam_model): # 使用图像中心点作为提示SAM 输出目标 mask h, w image.shape[:2] prompt np.array([[w // 2, h // 2]]) masks, scores, _ sam_model.predict(image, pointsprompt) best_id int(np.argmax(scores)) mask masks[best_id] mask (mask 0.5).astype(np.uint8) return mask def get_depth(image, depth_model): # 返回与输入图同分辨率的相对深度图 depth depth_model.predict(image) depth cv2.resize(depth, (image.shape[1], image.shape[0])) return depth def backproject(image, depth, mask): h, w image.shape[:2] fx fy 0.8 * w cx, cy w / 2.0, h / 2.0 ys, xs np.nonzero(mask) depth_values depth[ys, xs] # 归一化让 mask 内深度中位数为 1 depth_values depth_values / np.median(depth_values) points_x (xs - cx) * depth_values / fx points_y (ys - cy) * depth_values / fy points_z depth_values points np.stack([points_x, points_y, points_z], axis1) colors image[ys, xs] / 255.0 return points, colors def mesh_from_points(points, colors): pcd o3d.geometry.PointCloud() pcd.points o3d.utility.Vector3dVector(points) pcd.colors o3d.utility.Vector3dVector(colors) pcd pcd.voxel_down_sample(voxel_size0.01) pcd.remove_statistical_outlier(nb_neighbors20, std_ratio2.0) pcd.estimate_normals(search_paramo3d.geometry.KDTreeSearchParamHybrid(radius0.03, max_nn30)) mesh, _ o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth9) return mesh def main(): image load_image(input.jpg) sam_model load_sam_model(sam_weight.pth) depth_model load_depth_model(depth_weight.pt) mask get_mask(image, sam_model) depth get_depth(image, depth_model) points, colors backproject(image, depth, mask) mesh mesh_from_points(points, colors) # 统一方向并导出为 glb mesh mesh.compute_vertex_normals() trimesh.Trimesh(np.asarray(mesh.vertices), np.asarray(mesh.triangles), vertex_colorsNone).export(output.glb) print(done) if __name__ __main__: main()这段代码我把每一步都降到了最小可运行状态。需要注意几个点SAM 推理输入需要带 batch 维度和归一化单目深度模型输入也需要处理到它要求的分辨率中间可能有 resize 带来的对齐误差open3d 的泊松重建要求点云有法线否则会直接报错。建议按模块逐步打印中间结果在 Jupyter 里用matplotlib可视化 mask 和深度图确认无误后再接下一步。3.3 参数调整与效果验证我最常调的是三个参数泊松深度depth、体素下采样的voxel_size、深度归一化的参考点。泊松深度depth9产生更多细节但对噪声敏感depth7更平滑适用于深度噪声大的场景。voxel_size0.01适用于物体归一化边长在 1 左右的场景。如果点云密集可以加大到 0.02速度快很多。深度归一化除的是 mask 内深度中位数如果你发现生成的模型偏大或偏小可以乘一个整体缩放因子。验证阶段不要只用肉眼。我会同时看三个指标mask 覆盖是否完整、深度图边缘是否对齐、点云密度分布是否均匀。有条件的话用三维渲染软件快速旋转检查网格尤其要看底面和背面有没有塌陷、有没有异常凸起。不要只看某一个视角因为单图重建最常犯的问题就是“正面好看、背面畸形”。4. 我踩过的坑常见问题与排查方法4.1 分割 mask 不完整导致关键部位被切掉这个问题出现的频率最高。SAM 有时会把物体的一部分当成背景尤其当物体细长、背景杂乱或者目标与背景颜色相近时。我遇到过一次输入一个带手柄的杯子SAM 把杯子主体和手柄分开算了mask 只选中了杯身重建出来是一个没有手柄的畸形圆柱体。排查思路是如果 mask 不完整先尝试换提示方式。中心点提示不行就改用边界框提示甚至用自动生成的多候选分割结果取最大连通域。另外可以在 SAM 输出的多个 mask 里选得分高且面积占比适中的不要盲目选得分最高因为最高得分往往对应背景的大块区域。还有一个实用技巧将 mask 与深度图的多尺度边缘图做形态学融合把深度物体边缘补充进去。总之mask 决定重建结果的“天花板”这一关必须把严。4.2 深度图边缘和 mask 边缘错位产生的“飞点”深度模型和 SAM 的分辨率不同哪怕只有几个像素的偏差反投影后都会产生很长的飞点尾巴。这些点在三维空间中又长又细严重污染法线估计。我的解决办法是在反投影之前先对 mask 执行一次开运算去除边缘孤点然后对深度图做中值滤波减少单像素噪声。如果飞点还是很多可以在反投影后使用统计滤波把每个点到其邻居平均距离偏差超过两个标准差的点直接剔除。再不够就在点云生成后执行“距离阈值裁剪”只保留以物体中心为球心、半径 1.5 倍物体大小的点。这些组合拳打下来点云质量会明显改善。4.3 显存爆炸与运行速度慢单张图跑 SAM 加深度估计加泊松重建显存占用很容易超过 10GB。如果只有 8GB 显存第一次跑大概率会崩。我的建议是分割和深度估计串行执行把中间特征搬到 CPU释放 GPU 显存推理时开启半精度 fp16把输入分辨率从 1024 降到 768对大部分物体照片影响不大但显存能降一半。还有个容易忽略的点Open3D 的泊松重建会在 CPU 上执行如果点云数量超过 200 万速度会非常慢。先用体素下采样把点数压到 30 万以内再重建我在实际项目中一般压到 20 万速度和效果都能兼顾。4.4 坐标系、单位与方向混乱这是新手最容易踩的隐形坑。SAM 输出的 mask 坐标系是图像像素坐标左上角原点Open3D 使用的是右手坐标系Trimesh 导出 GLB 时又有自己的轴方向约定。如果不做转换重建出来的模型可能是倒着的或者深度轴和高度轴搞反。我现在的做法是在主函数里固定一个约定输入图像按 OpenCV 读取后统一转为 RGB反投影时 x 轴向右y 轴向下z 轴向画面内点云进入 Open3D 后把 y 轴取反使其变成常规三维坐标系导出 GLB 前做一次旋转让网格的“上”方向对齐 Y。整个过程虽然啰嗦但只需要写一次通用函数后续所有图片都能复用省心很多。5. 应用场景与后续扩展方向5.1 哪些行业值得用这套方案从效率角度看我很难找到比“单张图 → 3D 模型”更轻量的资产生产方式。电商行业尤其需要卖家只需要用手机拍一张产品图就能快速生成一个可旋转查看的 3D 展示模型放到商品详情页比视频更有交互感。游戏和影视行业的早期概念阶段也可以用这套方案把概念图快速做成占位模型让场景搭建和相机走位变得可视化。线下门店做数字藏品或者虚拟展陈同样可以用单图重建快速批量化生成展品模型。但要注意这套方案生成的是概念级模型不是精密测量级模型。如果要做工业逆向、医学建模、自动驾驶的精确标注数据精度还远远不够。它更适合对“视觉完整度”要求高、对“物理精度”要求低的场景。5.2 后续可以做哪些扩展从模拟项目 X 往后走我比较看好的方向有三个。第一个是视频序列输入手持手机绕着物体拍一段短视频用多帧的特征匹配和光束法平差代替单目深度估计能大幅减少不可见部分的不确定性重建效果会接近多视角重建但仍然只需要普通设备。第二个是可控生成补全引入 3D 扩散模型给 SAM 3D Objects 输出一个粗糙网格由扩散模型对不可见部分进行符合语义的补全比如补全杯子背面、椅子底部。第三个是实时化把 SAM 的编码器输出做蒸馏换成一个更小的分割头配合轻量深度模型可以在移动端实现实时重建预览。这三个方向本质上都是在“补全缺失信息”上做文章和单图重建的问题本质是一致的。我自己的体会是别把单图重建看成终点把它当成一个快速启动器后面接什么细化模型决定了这套方案真正能落到什么行业。最后分享一个我在反复调试中总结出来的小技巧记得时刻保存中间产物。每跑完一个模块就把 mask、深度图、点云都输出到文件不要只在内存里传递。因为你在调后面参数的时候往往会发现问题出在前面一步没有中间文件就得从头跑一遍整个流程时间成本很高。保存 intermediate 文件这个习惯几乎是所有单图重建项目里性价比最高的工程实践。

相关新闻

dart_chromecast鸿蒙化适配:分布式设备发现与投屏控制链路重构

dart_chromecast鸿蒙化适配:分布式设备发现与投屏控制链路重构

在把 dart_chromecast 塞进 OpenHarmony 分布式项目之前,我先被一个问题问住了:你要适配的到底是 Chromecast 设备,还是这套 Flutter API 的用户习惯?实际去摸了一遍组件源码之后,答案很明确:两者都要&…

2026/10/20 18:44:22 阅读更多 →
人性测评新视角:HumanOS如何像拆机一样解读你的行为模式

人性测评新视角:HumanOS如何像拆机一样解读你的行为模式

最早注意到HumanOS,是因为它的名字。别家做心理测评的都喜欢叫“心智测评”“性格分析”,它偏偏给自己取名HumanOS——把人当成一个操作系统来看待。后来我用这套系统做完第一份完整报告,翻来覆去看了三遍,说的确实不是大路边上的…

2026/10/20 10:53:51 阅读更多 →
dart_chromecast鸿蒙化适配:从投屏协议到分布式总线的迁移实践

dart_chromecast鸿蒙化适配:从投屏协议到分布式总线的迁移实践

最近我把 Flutter 里的 dart_chromecast 组件做了一次鸿蒙化适配,整个过程比预想中折腾不少。dart_chromecast 原本负责投屏控制、设备发现与多媒体协同,跨端应用靠它在多屏互动场景里统一管理会话;迁移到 OpenHarmony 分布式环境后&#xff…

2026/10/20 18:44:36 阅读更多 →

最新新闻

Qt5与hidapi实战:手搓USB HID调试助手,告别串口工具

Qt5与hidapi实战:手搓USB HID调试助手,告别串口工具

简介:这是一份面向嵌入式与桌面开发者的USB调试工具源码包,基于Qt5框架与hidapi库实现,可在Windows 10环境下借助mingw编译运行,帮助开发者快速测试和调试支持HID协议的USB设备。资源共19个文件,约1004KB,包…

2026/10/20 22:41:59 阅读更多 →
用思维导图重构综合布线系统:从图纸迷宫到故障秒定位

用思维导图重构综合布线系统:从图纸迷宫到故障秒定位

1. 为什么一张图就能讲清综合布线系统?——从“看不懂图纸”到“一眼定位故障点”的认知跃迁你有没有过这样的经历:站在机房里,面对一整面墙的配线架、密密麻麻的跳线和标签模糊的线缆,手握设计图纸却像在读天书?图纸上…

2026/10/20 22:41:59 阅读更多 →
Python情感计算实战:从情感词典到深度学习的文本情绪识别

Python情感计算实战:从情感词典到深度学习的文本情绪识别

最近在做情感计算相关的项目,从文本到情绪的智能识别这条路,我前前后后踩了不少坑,也积累了一些真实可用的方案。有朋友问我“Python做情感识别到底靠不靠谱”,我的回答一直是:靠不靠谱取决于你怎么设计数据、选模型、…

2026/10/20 22:41:59 阅读更多 →
AI辅助材料设计:从屈服强度预测到工艺优化的完整实战

AI辅助材料设计:从屈服强度预测到工艺优化的完整实战

做材料的人,十有八九都经历过这种场景:为了一个“再提高100MPa屈服强度”的目标,反复调整成分和热处理工艺,一炉料烧出来,加工成试样,拉完拉伸曲线已经是十几天之后。我在某实验室做高强钢项目时&#xff0…

2026/10/20 22:41:59 阅读更多 →
d3dx10_39.dll缺失别乱下载:官方DirectX运行库修复指南

d3dx10_39.dll缺失别乱下载:官方DirectX运行库修复指南

打开老游戏或者某些几年前编译的图形软件时,屏幕上突然蹦出一句“由于找不到 d3dx10_39.dll,无法继续执行代码”,很多人第一反应就是打开搜索引擎,输入“d3dx10_39.dll 免费下载”。我先说个结论:这个方向基本是错的。…

2026/10/20 22:41:59 阅读更多 →
函数调用实战:让AI原生应用在电商营销中真正“能干活”

函数调用实战:让AI原生应用在电商营销中真正“能干活”

1. 从“对话机器人”到“干活的人”:函数调用为什么是AI原生应用的分水岭做电商营销的同学,这几年一定有一个特别深的感受:传统的智能客服或者营销助手,本质上是个“话痨”。你跟它说“帮我把上周买的蓝牙耳机退了吧”&#xff0c…

2026/10/20 22:40:56 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →