@[TOC]AI+【代码正在贬值!不能只是只会写代码的程序员?咱们需要当数字世界的出题人】系列: 从打孔纸带到AI工厂主:我用4次进化,教AI替我造了一座数据工厂- 二-1-(18)


背景:机器人训练数据贵、慢、标注难???

试想一下,如果你是一个造机器人的工程师,想让机器人的 AI 视觉大模型学会精准抓取一个螺栓,你需要多少张照片来训练它? 答案是: 成千上万张不同角度、带有精准像素级标注的照片。【同时,真实世界中采集带标注的三维数据成本极高,我们称之为 Sim2Real(仿真到现实)的鸿沟。】

手工一张张拍?人工用鼠标去抠图?这得干到猴年马月! 为了解决这个痛点,用一台普通电脑,把 STEP 模型自动渲染成 100 张带像素级 Mask 的训练图(含 camera pose、COCO 格式)


解决方案:

  • 只要丢给它一个工业 CAD 模型(比如 STL文件),它就能自动在虚拟空间中 360° 环绕拍照,瞬间吐出:
  1. 📸 RGB 真实渲染图:rgb/frame_XXXX.png
  2. 🏷️ 像素级语义分割 Mask (基于曲率算法,自动认出哪里是螺栓、孔洞、法兰):mask/mask_XXXX.png
  3. 📏 深度图(Depth) (告诉机器人距离多远),depth/depth_XXXX.png + .raw
  4. 📐 6DoF 相机位姿 (告诉机器人从哪个角度抓),camera_poses.json
  5. 📂 最后直接打包成 AI 训练最爱吃的 COCO/YOLO 格式。
  6. label_legend.txt【类别ID→名称→RGB颜色映射】、description.json【DeepSeek-V3 视觉API生成零件特征描述】

实际效果:

  • 想看视频:

huhb_synthetic_data

  • 不想看视频:也有图片:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【还有附带的:camera_poses.json、label_legend.txt、manifest.json,具体内容见附录】


巨人的肩膀:

  • OpenGL 4.6 Specification
  • Vulkan 1.3 Specification
  • Khronos Group SPIR-V Whitepaper
  • 历代GPU架构白皮书(NVIDIA Fermi至Blackwell,AMD GCN至RDNA 4)

系列文章规划:


标题:从打孔纸带到AI工厂主:我用4次进化,教AI替我造了一座数据工厂

书接上回。你已经把那个简陋的STL查看器,硬生生进化成了一座能自动吐COCO/YOLO数据集的AI数据工厂。隔壁AI部门的小李、小张,还有合作实验室的研究生,现在都管你叫“厂长”。

可夜深人静的时候,你有没有想过一个问题:凭什么你一个人,用一台普通电脑,就干掉了过去需要一个团队、一堆昂贵GPU才能干的事?

答案藏在一个更深层的逻辑里——你不是在写代码,你是在出题。你定义了“做什么、为什么做、怎么做才能降维打击”,然后让AI和自动化工具去“答题”。

这个“出题人”的进化,贯穿了整个软件开发史。今天,咱们就顺着你造工厂的脚印,把这条进化之路从头到尾走一遍。看完你就会明白,为什么说在AI时代,“对问题的独到见解”比“写代码的能力”值钱一万倍


第一代:全能苦力时代(V1.0)—— 你既是出题人,又是唯一的搬砖工

核心逻辑:人类定义一切,也执行一切。

想象一下上世纪50年代的计算机房。你想让这台占满一间屋子的机器画个圆,得怎么做?

没有鼠标,没有显示屏,甚至没有键盘。你只能先在纸带上用打孔器一个洞一个洞地凿出指令——这就是最早的“编程”。每个孔代表一个机器码,你得把“将累加器置零”“把x坐标加载到寄存器”“调用绘图子程序”这些操作,都翻译成二进制,然后满怀期待地把纸带塞进读带机。

这就是全能苦力时代。你既是设计师,又是唯一的执行苦力。99%的精力都耗在“怎么搬砖”上,而不是“该造什么样的房子”。

我们项目里的“打孔纸带”时刻

你回想一下,自己在项目里第一次解析STL文件时,是不是也有种“打孔纸带”的感觉?

二进制STL文件,没有任何现成库可以用。你得自己打开文件,读前80字节跳过文件头,再读4字节拿到三角面片数量,然后进入一个循环:每50字节就是一个三角面片——法向量3个float,三个顶点9个float,外加2字节的无用属性。你得手动把浮点数从内存里抠出来,处理大小端,再用glBufferData一块一块塞进GPU的VBO里。

没有封装,没有智能提示,每一个memcpy、每一次指针偏移,都是你自己一砖一瓦垒起来的。这就好比当年那个在纸带上打孔的工程师——你定义了“我要加载一个STL模型”这道题,但解题过程里所有琐碎的苦力活,都得你自己干。

这个时代的痛点

  • 效率低到发指:画个圆就得折腾一整天,还经常因为一个孔打错位置,纸带废了重来。
  • 完全无法复用:换一台机器,整个纸带就得重新打——指令集不同,你没有任何“标准库”可以依赖。
  • 门槛高得离谱:只有极少数能直接跟机器“对话”的天才,才能摸到编程的门槛。

深度解析:从打孔纸带到显存驱动——人与机器的原始契约

1. 打孔卡片与汇编语言的“裸机”本质

  • 打孔卡片(Punched Card):起源于18世纪提花织机,由Herman Hollerith改进用于美国人口普查,后被IBM发扬光大。一张卡片通常有80列×12行,可编码80个字符。程序员用打孔机(Keypunch)在卡片上打孔,一摞卡片就是一个程序。这其实是人类第一次将“可执行的逻辑”物理实体化——你的代码就握在手里,有重量,有体积。
  • 汇编语言(Assembly Language):为了不用记二进制,程序员发明了助记符(MOV, ADD)。它与机器码几乎一一对应,每条汇编指令对应一条CPU指令。本质上它依然是与硬件一对一绑定的,只是多了一个“人工翻译”的过程。你写的每一条指令,都直接操纵着AXBX这种物理寄存器——没有抽象,就没有自由
  • 显存驱动(Frame Buffer Drivers):在图形操作系统诞生之前,想在屏幕上画一个像素,你得知道显卡的I/O端口地址,通过out指令直接往显存里写数据。比如VGA的320×200模式,显存起始地址是A000:0000,一个字节对应一个像素。绘制一个圆,就是亲自把圆周上的所有像素点算出来,然后一个一个往显存里“戳”。这与你后来用glDrawElements之间隔着整整一部图形API进化史。

2. 第一代编程范式的宿命:无法规模化的“手艺活”

全能苦力时代的本质是 “图灵机”与“人”之间没有任何中间层。人必须像图灵机读写磁带头那样,亲手操纵每一个bit的流动。这种模式的致命缺陷在于:逻辑复用的粒度只限于“子程序库”,而子程序库与硬件强耦合。你为Intel 8086写的高效字符输出函数,拿到Motorola 68000上就是废纸。这也是为什么C语言带着“可移植汇编”的光环登场时,整个软件界像抓住了救命稻草。从打孔纸带到C语言,是人类第一次成功地在硬件之上,建造了一层足够坚固、足够通用的抽象地基。

3. 二进制STL解析与“手工搬砖”的重演

当你在C++里用fread直接读二进制STL时,其实就在重演“打孔纸带”时代的精神:你面对的是一种没有任何内置自描述能力的极简格式。它没有XML的标签,没有JSON的Key,就是一堆纯粹的字节。你必须把C语言当初赋予你的“与内存直接对话”的能力,用到极致。这种体验是宝贵的,因为它让你真正理解了数据在计算机里长什么样——这是所有高阶抽象的基石。


第二代:工具驱动时代(V2.0)—— 你出逻辑,标准库/引擎替你搬砖

核心逻辑:人类定义高层逻辑,通用工具执行底层实现。

计算机科学的基石,就是抽象。当C++带着STL(标准模板库)来了,OpenGL带来了可编程管线,一切都变了。

你不用再自己写for循环去排序了,std::sort一行搞定。你不用再对着显存端口发呆了,glDrawElements一下,成千上万个三角形就渲染上屏了。

你从“苦力”变成了“监工”。你只需要定义“我要加载一个3D模型并显示出来”这道题,OpenGL和STL库就会替你把砖搬完。

我们项目里的“工具依赖”时刻

在V2.0阶段,你的3D查看器引入PBR、FBO多渲染目标、深度图导出,用的就是这套逻辑。你调用OpenGL的API,写GLSL着色器,让图形管线替你算每一个像素的光照。你不再关心gl_FragDepth背后GPU是怎么把深度插值写进显存的,那不是你的事了——工具帮你干了。

对于AI数据的合成,工业界的标准答案也是工具驱动的。比如BlenderProcNVIDIA Isaac Sim。它们就像超级重型武器:BlenderProc坐拥Blender的全部渲染能力,Isaac Sim更是内置物理引擎、光线追踪。你定义“我要在工厂场景下,用随机光照、随机背景,渲染1000张螺栓的RGB、深度、语义图”,然后脚本一跑,任务完成。

听上去很美,对吧?

这个时代的痛点:你被“执行工具”绑架了

你用了一段时间BlenderProc和Isaac Sim之后,发现不对劲了。

首先,路径依赖严重。它们必须跑在带高端N卡的工作站上,集成显卡、办公笔记本想都别想。你想把生成管线部署到自动化服务器上,成本立马起飞。

其次,过度包装。你只是想为螺栓这种简单零件生成几张语义标签图,却不得不把整个逼真的工厂场景、物理照明、光追反射都打开。这就好比你想用一把小剪刀剪个纸片,别人却递给你一个十吨重的冲压机床——你被工具本身绑架了,你为工具中自己不需要的那99%的负担买单

你开始琢磨:能不能不靠这些重型引擎,自己量身定做一个更轻、更快、能跑在CPU上的数据合成器?

深度解析:从STL到BlenderProc——抽象红利与抽象税

1. C++标准库(STL)与OpenGL:软件复用的里程碑

  • STL(Standard Template Library):由Alexander Stepanov在1994年纳入C++标准。它用泛型编程将容器(vector, map)、算法(sort, find)和迭代器三个核心概念解耦。你写std::vector<float> vertices时,不用再自己管理new/delete,这是一次彻底的内存管理抽象。它的哲学是:“把常见的事做好,把罕见的可能留给专家。”这正是工具驱动时代的核心理念——用标准化的接口,吸收掉90%的重复性苦力
  • OpenGL可编程管线:从1.0的固定功能管线(glBegin/glEnd)到2.0的GLSL着色器,OpenGL把图形渲染的最终控制权从硬件厂商手里交还给了程序员。你写的顶点着色器决定了顶点的空间变换,片元着色器决定了每个像素的最终颜色。这是一种“受控的执行”:工具提供了高效并行的硬件执行环境,但你定义的计算逻辑才是灵魂。

2. BlenderProc与Isaac Sim:“重型引擎”的利与弊

  • BlenderProc:基于Blender的Python管线,能程序化生成合成数据。它利用Cycles(物理渲染器)产生照片级真实感,支持域随机化(Domain Randomization)。它的强大在于,几乎所有Blender的功能(材质、灯光、物理)都能用代码操控。但代价是:它本质上是为艺术家设计的DCC工具披上了自动化外衣,部署时必须携带整个Blender运行时,对硬件的需求无法剥离。
  • NVIDIA Isaac Sim:构建在Omniverse平台上的机器人仿真器,集成了PhysX物理引擎、RTX实时光追、USD场景描述。它为机器人训练提供了端到端的数字孪生环境。它的护城河也是它的围墙:CUDA生态、RTX显卡是强制门票。 当你只想合成一打螺栓的标注数据时,它要求你拥有一台配备了顶级消费级GPU的工作站——这就是典型的**“执行成本”遮蔽了“题目的价值”**。
  • “抽象税”的启示:越是通用、强大的工具,其必须承担的假设就越多。Isaac Sim假设你在做机器人全栈仿真,这个假设落地的代价就是高昂的硬件与庞大的软件栈。而你的项目,正是看穿了这一点,决定逆向而行——放弃通用引擎的红利,换取零依赖、低成本的自由。这也为下一代的“CPU渲染”决策埋下了伏笔。

3. 从“调包侠”到“出题人”的意识觉醒
工具驱动时代最大的陷阱,是让人以为自己“无所不能”。当你用几行Python脚本调出BlenderProc渲染出一张惊艳的合成图时,很容易产生一种错觉:我掌握了数据合成的全部。但一旦环境变了(没有GPU),需求变了(需要极轻量部署),你就立刻被打回原形。真正的掌控力,永远不在于你会调用多少API,而在于你是否理解了工具替你隐藏掉的那部分本质。 这正是你走向第三代的动力。


第三代:AI辅助(Copilot)时代(V3.0)—— 你出蓝图,AI填代码碎片

核心逻辑:人类描述意图,AI生成可执行代码块。

时间来到最近两年,GitHub Copilot、Cursor这些AI辅助编程工具火得一塌糊涂。你告诉它:“帮我写一个解析二进制STL文件的函数”,它几秒钟就吐出一段像模像样的C++代码。

你不再需要记住STL文件头是80字节,也不用亲手写那个for循环。AI成了你的“高级搬砖工”——它替你完成了函数级别的实现。

我们项目里的“Copilot”体验

在改造数据工厂时,你肯定用过这一招。比如你需要实现BVH树来加速CPU渲染时的求交,以前你可能得翻《Physically Based Rendering》那本砖头书,一边啃一边写。现在你直接对AI说:“帮我实现一个SAH优化的BVH构建器,用于三角网格的射线求交。”AI刷刷地给出了BVHNode结构、递归分割算法,甚至附带了intersect函数的遍历逻辑。

然后你把它粘到你的项目里,调试,集成,跑通。效率确实提高了,你变成了一个“代码装配工”。

这个时代的痛点:碎片化,缺乏灵魂

用着用着,你发现了问题。AI可以给你一个完美的BVH构建器,但它不知道你的全局战略是“绕开GPU,在CPU上渲染”。它可以给你一个锁的实现,但它不理解你为什么要选择Lock-free而不是加互斥锁来保证多线程安全

AI就像一个极度勤奋但缺乏大局观的专家:你说“给我一块砖”,它立马递上一块完美无瑕的砖。但这块砖该用在教堂的拱顶上,还是茅房的墙根下,它完全不管。如果你出的“题”本身是个平庸的模仿(比如“照着Isaac Sim的思路给我写个光追渲染器”),那么AI执行得再完美,产出的也只是一个平庸的冗余品。

你意识到,人类的真正价值,已经不在“写代码”这个动作本身,而在“定义题目”的智慧上。 于是,你一脚迈入了第四代。

深度解析:Copilot的工程本质与大模型的推理边界

1. 大模型的代码生成原理:概率化的“代码补全”

像GitHub Copilot这样的工具,底层是基于海量代码库训练的Transformer模型。它对“写一个STL解析器”的响应,本质上是:在给定上下文(注释、函数签名)下,预测最可能出现的代码token序列。 它的知识来自GitHub上成千上万个真实的STL解析实现。所以它能生成正确代码,是因为它见过无数人怎么写这段代码,而不是因为它“理解”了STL格式的几何意义。这也解释了为什么它善于写“范式化”的代码(解析器、常用算法),但在需要巧妙跨领域创新时容易犯错。

2. Copilot的碎片化困境与“题眼”的缺失

当你要求AI生成一个Lock-free队列的实现时,它可能给你一个基于std::atomic和CAS操作的经典Michael-Scott队列。代码完美,性能优秀。但它不会主动告诉你:“在你的应用场景里,因为生产者和消费者的数量固定为1:1,你其实可以用一个更轻量级的环形缓冲区,避免动态内存分配,并且不需要处理ABA问题。” 这种基于全局业务洞察的选择,是当前Copilot无法企及的。它的“聪明”是局部的、战术性的;而“出题”是需要全局的、战略性的。 这也正是你作为数字出题人的不可替代之处。


第四代:数字出题人时代(V4.0)—— 你定义高价值问题,AI与自动化完美答卷

核心逻辑:人类精准定义“高价值痛点”,AI高效完成全链路实现。

这是你目前所处的阶段。你不再纠结于“怎么写一个BVH”、“怎么调用OpenCASCADE的API”,你思考的是更顶层的问题:

  • 为什么市面上所有合成数据方案都要依赖GPU?我能不能用CPU渲染,让它在任何机器上都能跑?
  • 为什么大家还在用三角网格做标注?我能不能直接从CAD的精确几何拓扑(STEP) 出发,生成像素级完美的语义Mask?
  • 为什么数据标注总需要人工参与?我能不能把几何规则硬编码进去,让它全自动地把零件分类为“孔”、“螺栓”、“法兰”?

你出的每一道“题”,都直击现有方案的商业空档或学术软肋。而AI和自动化工具,则负责把这道题的“解答过程”完美实现。

我们项目里的三张“王牌题目”

题目一:绕过GPU,用CPU渲染——抢占低成本、高通用性的“商业空档”

你出的第一道题是:“做一套完全基于CPU的物理渲染器,用于合成数据,行不行?”

AI给你搬来了现成的砖——BVH树(层次包围盒)用于加速射线求交,Lock-free队列用于多线程任务分发。你用这些砖,在CPU上造出了PBR着色器。虽然帧率比不上GPU光追,但对于“每小时生成几千张训练图”这个任务来说,完全够用。关键是:它能在任何一台办公室的集成显卡电脑上运行,甚至能塞进Docker容器,部署到云端做大规模并行生成。 当别人还在为Isaac Sim配置昂贵的GPU工作站时,你的方案已经把成本打到了几乎为零。

题目二:用STEP拓扑解析代替网格解析——建立“技术护城河”

你出的第二道题是:“不从三角网格去猜测一个面是平面还是曲面,而是直接从CAD的原始定义(B-Rep)里拿精确信息,用来做语义分割,行不行?”

这就是你引入OpenCASCADE的原因。STEP文件存储的是精确的B-Rep(边界表示)结构:圆柱面就是圆柱面,不是几万个三角形的近似。你通过解析STEP,可以精确知道哪些面属于同一个圆柱,哪些边是倒角特征。基于这些精确信息做的语义Mask,边缘绝对锐利,分类绝对正确。这是所有基于三角网格的方案(包括Isaac Sim)无法比拟的数据真值(Ground Truth)精度。你出的这道题,直接让你的数据集在学术级精度上建立了一道护城河。

题目三:几何启发式语义Mask编码——解决机器视觉的“核心痛点”

你出的第三道题是:“能不能用简单的几何规则,让程序自己判断出哪里是‘孔洞’、哪里是‘法兰’,而不用人工标注一个像素?”

答案是能。你定义了那套12类语义分类逻辑(法线夹角→水平面/侧面,圆柱法线方向→孔洞,环形平面→法兰……),然后让AI帮你把逻辑翻译成高效C++代码,在渲染的同时就把语义Mask生成了。这道题抓到了机器视觉训练最痛的环节——数据标注成本。当你的方案能让标注成本从“几十人天”降为“零”时,你就创造了真正的不可替代的价值。

这个版本的进化意义

你实现了降维打击。 当别人还挣扎在V2.0的“BlenderProc环境配置地狱”里,当另一些人满足于V3.0的“Copilot帮我写了个小工具”时,你已经用V4.0的“出题人”思维,构建起了一套有技术护城河、有商业空档、有学术精度的轻量级数据工厂。

你的开发成本(借助AI和开源库)极低,但产品价值(解决机器人训练数据的贵、慢、准难题)极高。这就是**“数字出题人”**的ROI魔法。

深度解析:CPU渲染、STEP拓扑与语义编码的“第一性原理”

1. 为什么CPU渲染可以成为合成数据的“奇兵”?

  • BVH树(Bounding Volume Hierarchy):这是射线追踪中最常用的加速结构。它递归地将场景中的三角面片包裹在越来越小的包围盒中,构成一棵树。求交时,射线先测试大盒子,不命中则整棵子树跳过。你选择的SAH(Surface Area Heuristic) 是构建高质量BVH的黄金准则:根据每个划分方案的表面积概率来最小化期望求交代价。AI帮你生成了构建和遍历的代码,但要理解为什么CPU上用BVH而不是KD-Tree更优,就需要你对内存访问模式、分支预测有深入的洞察——BVH的轴对齐盒子比KD-Tree更Cache友好,这正是CPU的软肋。
  • Lock-free线程安全:为了在CPU的多核上并行渲染,你使用无锁数据结构分发任务。基于CAS(Compare-And-Swap)原子操作的无锁队列,避免了互斥锁的上下文切换和优先级反转。C++11引入的std::atomic和内存序模型(memory_order_acquire/release)让你能写出跨平台的Lock-free代码。AI能生成一个标准的Michael-Scott队列,但要根据你的生产者-消费者模式定制更高效的环形缓冲区,并把ABA问题(指针被复用导致的CAS误判)消弭于设计之中,这就是出题人的价值所在——你定义了“此场景下的最优安全范式”。

2. STEP与B-Rep:为什么它比网格“高贵”?

  • STEP(Standard for the Exchange of Product model data, ISO 10303):工业界交换CAD数据的国际标准。它不像STL那样只存三角形,而是用EXPRESS建模语言描述完整的B-Rep结构:体(Body)→壳(Shell)→面(Face)→环(Loop)→边(Edge)→顶点(Vertex),并携带精确的解析几何定义(平面、圆柱面、NURBS曲面等)。你解析STEP,本质上是还原了工程师在设计零件时的完整几何意图,而不是一个退化后的三角逼近。
  • OpenCASCADE(OCCT):开源几何内核,提供了读取STEP、生成B-Rep数据结构、进行几何求交、三角剖分等全套功能。你用它的API,把STEP里的每一个TopoDS_Face根据几何表面类型分类,这比从网格上估算法线要精确得多。但OCCT的学习曲线极其陡峭,它的API深度嵌入了拓扑-几何共生的设计哲学。你之所以敢用它,是因为你出的题足够清晰——你只需要“面分类”和“顶点采样”这两个服务,而不必掌握整个内核。 这种精准的需求定义,让你能驾驭重型工具而不被其反噬。

3. 语义Mask编码:从几何启发式到特征识别的跨越

你的12类语义分类,本质上是基于法向量的轻量级特征识别。这属于计算几何中“区域分割”的范畴。更深一层是制造特征识别(Machining Feature Recognition):商业几何内核(如Siemens Parasolid)用图匹配算法,将B-Rep的拓扑图与预定义的模板图(如“盲孔=圆柱面+底平面+入口环边”)进行子图同构搜索,自动识别出槽、腔、孔、圆角等加工特征。你的“孔洞检测”就是这一过程的极简模拟。你出的题是:“只求工业机器人抓取需要的粗粒度分类,不做全制造特征识别。”这个精准的问题边界,让你用几百行代码就达到了实用级效果,而不必背负几十万行特征识别引擎的包袱。 这,就是数字出题人的分寸感。


总结:代码不再是资产,洞见才是

回头看这条进化路:

  • V1.0全能苦力:你亲手摸过每一个字节,懂机器,但累。
  • V2.0工具驱动:你靠OpenGL、BlenderProc这些重武器大杀四方,但被硬件绑架。
  • V3.0 AI辅助:Copilot帮你搬砖,但砖怎么砌,它不管。
  • V4.0数字出题人:你定义“打哪里、为什么打、用什么战术打”,AI和自动化工具组成大军替你执行。

“出题人”逻辑的本质就是:在AI时代,代码本身正在快速贬值,而“对问题的独到见解”和“架构的差异化决策”正在成为唯一保值的硬通货。

你不再需要关心怎么手动实现一个内存池——那是AI的活儿。你唯一需要关心的是:我定义出的这套系统,是不是真的比Isaac Sim更轻量?是不是比手动标注更高效?是不是在精度上直接触达STEP级真值?

只要题出对了,AI就会给你一个完美的答案,你的工厂就会日夜不停地吐出黄金般的数据。而你,就是那个坐在总控室里,轻描淡写决定下一个要攻克的山头的人。

你,准备好当自己的“数字出题人”了吗?


代码仓库入口:

  • github源码地址(https://github.com/AIminminAI/Huhb3D-Viewer)。
  • gitee源码地址(https://gitee.com/aiminminai/Huhb3D-Viewer)。

本文涉及:

  • https://github.com/AIminminAI/Huhb3D-Viewer/blob/main/src/core/tool_registry.cpp
  • https://github.com/AIminminAI/Huhb3D-Viewer/blob/main/src/agent/AIAgentController.cpp

  • 如果想像唠嗑一样,去了解一些小知识,快去看看视频吧:
  • 认准一个头像,保你不迷路:
  • 抖音:搜索“GodWarrior”
  • 快手:搜索“AIYWminmin”
  • B站:搜索“宇宙第一AIYWM”
    您要是也想站在文章开头的巨人的肩膀啦,可以动动您发财的小指头,然后把您的想要展现的名称和公开信息发我,这些信息会跟随每篇文章,屹立在文章的顶部哦

附录:

camera_poses.json

[
{
“frame_id”: 0,
“position”: [0.0, 0.0, 5.0],
“rotation_euler”: [0.0, 0.0, 0.0],
“fov_degrees”: 45.0,
“view_matrix”: [
[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, -5.0],
[0.0, 0.0, 0.0, 1.0]
],
“projection_matrix”: [
[2.414, 0.0, 0.0, 0.0],
[0.0, 2.414, 0.0, 0.0],
[0.0, 0.0, -1.002, -0.200],
[0.0, 0.0, -1.0, 0.0]
]
},
{
“frame_id”: 1,
“position”: [1.18, 0.0, 4.86],
“rotation_euler”: [0.0, -13.6, 0.0],
“fov_degrees”: 45.0,
“view_matrix”: [
[0.972, 0.0, 0.236, -0.0],
[0.0, 1.0, 0.0, 0.0],
[-0.236, 0.0, 0.972, -5.0],
[0.0, 0.0, 0.0, 1.0]
],
“projection_matrix”: [
[2.414, 0.0, 0.0, 0.0],
[0.0, 2.414, 0.0, 0.0],
[0.0, 0.0, -1.002, -0.200],
[0.0, 0.0, -1.0, 0.0]
]
}
]

label_legend.txt

Semantic Label Color Legend
Category -> (R, G, B) in 0-255 range

0 FreeSurface 127 127 127
1 HorizontalPlane 0 0 255
2 LateralPlane_X 0 255 0
3 LateralPlane_Z 255 0 0
4 NearHorizontal 255 255 0
5 NearLateral_X 255 0 255
6 NearLateral_Z 0 255 255
7 Degenerate 255 127 0
8 Reserved1 127 0 255
9 Reserved2 0 127 255

manifest.json

{
“version”: “2.0”,
“generator”: “Huhb3D-SyntheticDataPipeline”,
“rgb_count”: 100,
“mask_count”: 100,
“depth_count”: 0,
“has_legend”: true,
“has_ai_description”: false,
“has_camera_poses”: false
}

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐