深圳设计网站排行WordPress对象储存插件

张小明 2026/1/9 16:51:04
深圳设计网站排行,WordPress对象储存插件,网络服务器与网站建设,做网站许昌前言 博主导读#xff1a;   在上一篇文章 《Pointcept 框架详解#xff1a;从 Config 到 Runner 的全流程执行机制》 中#xff0c;我们像剥洋葱一样拆解了 Pointcept 的代码架构。明白了“配置驱动”的原理后#xff0c;很多同学跃跃欲试#xff0c;想要在自己的数据集…前言博主导读在上一篇文章 《Pointcept 框架详解从 Config 到 Runner 的全流程执行机制》 中我们像剥洋葱一样拆解了 Pointcept 的代码架构。明白了“配置驱动”的原理后很多同学跃跃欲试想要在自己的数据集上跑起来。然而“道理我都懂一改就报错”是很多人的真实写照。在实际魔改的过程中大概率会遇到各种各样这种让人摸不着头脑的错误。本文将从代码实现、配置修改、执行顺序三个维度手把手教你如何在 Pointcept 中正确添加自定义数据增强并完美避开“类型冲突”的深坑。4. 实例说明从命令行到代码底层在了解了框架结构后我们通过一个具体的实例来看看 Pointcept 是如何把命令行参数一步步转化为Python 对象的。通常情况下我们推荐使用scripts/train.sh来启动训练。它是一个 Shell 包装器负责环境配置和备份。# 通用模板shscripts/train.sh -p${INTERPRETER_PATH}-g${NUM_GPU}-d${DATASET_NAME}-c${CONFIG_NAME}-n${EXP_NAME}参数全称含义-pPython Interpreter指定 Python 解释器路径 (如python或/usr/bin/python)-dDataset数据集名称 (决定去configs/下哪个子目录找配置)-cConfig配置文件名称 (不带.py后缀)-nExperiment Name实验名称 (决定exp/下的输出目录名)-wWeight权重文件路径 (用于 Finetune 或 Test)-rResume是否恢复训练 (断点续训)可选true/false-gNum GPU使用的 GPU 数量-mNum Machine机器数量 (用于多机多卡训练)train.sh 脚本在解析完上述参数后会将其打包并最终调用 Python 入口文件。上述的 Shell 命令等价于直接运行以下 Python 命令# 等价的 Python 调用方式 python tools/train.py \ --config-file configs/scannet/semseg-pt-v2m2-0-base.py \ --num-gpus 1 \ --options save_pathexp/scannet/semseg-base‘’平时做实验用 Shell 方式更方便但在 IDE (如 PyCharm, VSCode) 中 Debug 时使用 Python 方式直接运行 tools/train.py 会更简单。当程序启动后Config 文件是如何实例化成具体的 Python 类的我们以 ModelNet40 分类任务 为例。配置文件 (Config)在 configs/modelnet40/cls-ptv2-v1m1-0-base.py 中定义了一个字典model dict( typeDefaultClassifier, # --- 【关键】这就是 Registry 中的 Key num_classes40, # --- 参数 1 backbone_embed_dim256, # --- 参数 2 # ... 其他参数 )源码定义 (Source Code)在 pointcept/models/default.py 中我们可以找到对应的类定义from pointcept.models import MODELS MODELS.register_module() # --- 【关键】把这个类注册到 MODELS 名录里 class DefaultClassifier(nn.Module): # 注意这里的参数名和 Config 字典里的 Key 是一模一样的 def __init__(self, num_classes, backbone_embed_dim, backbone, criteria, ...): super().__init__() self.num_classes num_classes # ...连接过程运行时发生的“魔法”当你运行代码时Pointcept 的 build 函数在后台执行了类似下面的逻辑将字符串变成了对象# 伪代码解释 build 函数内部发生了什么 def build_model(config_dict): # 1. 拿出名字 (Key) # 此时 class_name DefaultClassifier # config_dict 剩下了 {num_classes: 40, ...} class_name config_dict.pop(type) # 2. 找到对应的类 (Class) # 去全局字典 MODELS 里查表找到了 DefaultClassifier 这个类 TargetClass MODELS.get(class_name) # 3. 实例化 (Instantiation) # 把剩下的 dict 当作 **kwargs 传进去 # 等价于: DefaultClassifier(num_classes40, backbone_embed_dim256, ...) obj TargetClass(**config_dict) return obj这就是 Pointcept “配置驱动” 的核心奥义Config 里的 Key 对应init的参数名type 对应类名。 掌握了这个规律你就可以随心所欲地修改参数了。5. 数据增强之随机旋转根据 Pointcept 的设计规范所有的数据增强类都位于pointcept/datasets/transform.py。我们需要在这里实现一个基于NumPy的旋转类。原始代码给出的是围绕着某一个轴进行旋转现在我们改为随机旋转并进行使用。特别注意是NumPy类5.1 源码注入请打开pointcept/datasets/transform.py加入以下代码。别忘了加上TRANSFORMS.register_module()这是让 Config 能找到它的关键TRANSFORMS.register_module()classRandomRotate(object):def__init__(self,angleNone,centerNone,axisz,always_applyFalse,p0.5):# 初始化参数角度范围、旋转轴、中心点、概率self.angle[-1,1]ifangleisNoneelseangle self.axisaxis self.always_applyalways_apply self.ppifnotself.always_applyelse1self.centercenterdef__call__(self,data_dict):# 1. 概率判断决定本次是否执行增强ifrandom.random()self.p:returndata_dict# 2. 计算旋转矩阵 (Rotation Matrix)# 这里的 angle 范围是 [-1, 1] * pi即 -180度 到 180度anglenp.random.uniform(self.angle[0],self.angle[1])*np.pi rot_cos,rot_sinnp.cos(angle),np.sin(angle)ifself.axisz:# 绕 Z 轴旋转矩阵 (最常用)rot_tnp.array([[rot_cos,-rot_sin,0],[rot_sin,rot_cos,0],[0,0,1]])elifself.axisy:rot_tnp.array([[rot_cos,0,rot_sin],[0,1,0],[-sin_y,0,rot_cos]])elifself.axisx:rot_tnp.array([[1,0,0],[0,rot_cos,-rot_sin],[0,rot_sin,rot_cos]])else:raiseNotImplementedError(目前只支持单轴旋转若需任意旋转请修改代码)# 3. 执行几何变换ifcoordindata_dict.keys():# 自动计算几何中心ifself.centerisNone:x_min,y_min,z_mindata_dict[coord].min(axis0)x_max,y_max,z_maxdata_dict[coord].max(axis0)center[(x_minx_max)/2,(y_miny_max)/2,(z_minz_max)/2]else:centerself.center# 核心步骤移回原点 - 旋转 - 移回原位# 注意这里的 coord 是 NumPy 数组data_dict[coord]-center data_dict[coord]np.dot(data_dict[coord],np.transpose(rot_t))data_dict[coord]center# 4. 同步旋转法向量 (Normal)ifnormalindata_dict.keys():data_dict[normal]np.dot(data_dict[normal],np.transpose(rot_t))returndata_dict5.2 配置Config 方案打开你的配置文件如configs/modelnet40/cls-ptv2-base.py修改 data 部分datadict(num_classes40,ignore_index-1,namesclass_names,# 训练集配置traindict(typedataset_type,splittrain,data_rootdata_root,transform[dict(typeNormalizeCoord),# ✅ 正确位置在 ToTensor 之前# p1.0 表示每个样本都旋转angle[-1, 1] 表示 360 度随机dict(typeRandomRotate,angle[-1,1],axisz,center[0,0,0],p1.0),dict(typeRandomScale,scale[0.7,1.5],anisotropicTrue),dict(typeRandomShift,shift((-0.2,0.2),(-0.2,0.2),(-0.2,0.2))),# GridSample 会进行体素化采样通常建议先做几何变换再做采样dict(typeGridSample,grid_size0.01,hash_typefnv,modetrain,return_grid_coordTrue),dict(typeShufflePoint),dict(typeToTensor),# --- 分界线这之后的数据全是 Tensordict(typeCollect,keys(coord,grid_coord,category),feat_keys[coord,normal]),],test_modeFalse,),# 验证集配置valdict(typedataset_type,splittest,data_rootdata_root,transform[dict(typeNormalizeCoord),# 验证集通常不需要旋转除非你想做 TTA (Test Time Augmentation)dict(typeGridSample,grid_size0.01,hash_typefnv,modetrain,return_grid_coordTrue),dict(typeToTensor),dict(typeCollect,keys(coord,grid_coord,category),feat_keys[coord,normal]),],test_modeFalse,),)这里你需要注意dict(typeToTensor), # — 分界线这之后的数据全是 Tensor大多数数据预处理是使用的numpy这是需要放在分界线之前的否则你会遇到报错TypeError: unsupported operand type(s) for -: ‘Tensor’ and ‘list’File “…/pointcept/datasets/transform.py”, line 293, incalldata_dict[“coord”] - center6. 总结与预告 (Conclusion)通过这次实战我们不仅学会了如何添加数据增强更重要的是理解了 Pointcept 数据流的底层逻辑。Registry 是桥梁TRANSFORMS.register_module() 将 Python 类映射到 Config 字符串。顺序是关键Config 列表中的顺序就是代码执行的顺序。基于 NumPy 的操作必须放在 ToTensor 之前。掌握了这套“配置驱动 (Config-Driven)”的开发模式你不仅能玩转 Pointcept以后上手 MMDetection、Detectron2 等工业级框架也将易如反掌。 附录点云网络系列导航本专栏致力于用“人话”解读 3D 视觉领域的硬核论文与源码从原理到代码逐行拆解。 欢迎订阅专栏不错过每一篇干货【深度学习-论文讲解】持续更新中…互动话题你在配置环境时候遇到了什么问题你还有什么流程无法理解的部分欢迎在评论区留言分享你的“踩坑”经历我们一起避雷 如果这篇文章对你有帮助请 点赞 、收藏 ⭐、关注 支持博主你的三连是我持续更新的最大动力
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

西安企业建站素材网站底部版权信息字体颜色

🚀 Flutter OpenHarmony 发布与运维指南:从上架 AppGallery 到线上监控的全生命周期管理 作者:晚霞的不甘 日期:2025年12月5日 标签:Flutter OpenHarmony 应用发布 AppGallery 热更新 崩溃监控 鸿蒙生态 运维 …

张小明 2026/1/8 8:08:18 网站建设

做pc网站最大分辨率如何优化网站性能

第一章:Open-AutoGLM移动端部署概述Open-AutoGLM 是基于 AutoGLM 架构优化的轻量化大语言模型,专为移动设备端侧推理设计。其核心目标是在资源受限的环境中实现高效、低延迟的自然语言处理能力,同时保持较高的语义理解准确率。通过模型剪枝、…

张小明 2026/1/8 13:16:13 网站建设

如何填写网站建设计划表河南住房和城乡建设局网站

深入探究Bash脚本中的流程控制与命令行选项 在Bash脚本编程中,流程控制结构是实现复杂逻辑和自动化任务的关键。本文将详细介绍Bash中的多种流程控制结构,包括 case 、 select 、 while 和 until ,并探讨命令行选项的处理方法。 1. 代码修改与输出优化 在处理目录…

张小明 2026/1/9 14:17:22 网站建设

小公司网站网站建设报价表模板下载

Easy-Scraper智能数据采集:零基础快速上手完整指南 【免费下载链接】easy-scraper Easy scraping library 项目地址: https://gitcode.com/gh_mirrors/ea/easy-scraper 还在为复杂的网页数据提取而烦恼吗?传统爬虫工具需要掌握繁琐的技术细节&…

张小明 2026/1/8 13:16:09 网站建设

商品网站建设网站教育培训机构

《ChangeLocalAdminPassword.ps1脚本:高效管理本地管理员密码》 1. 背景与需求 在系统管理工作中,定期或强制更改本地管理员密码是一项既耗时又繁琐的任务,许多系统管理员常常因为其乏味而忽视该工作。以companyabc.com为例,该公司运营着一个包含500台Windows Server 200…

张小明 2026/1/8 13:16:07 网站建设

个人网站模板html下载wordpress后台安全

Langchain-Chatchat知识库更新机制:动态文档同步策略 在企业知识管理日益复杂的今天,一个常见的痛点浮现出来:员工刚根据AI助手提供的操作指南执行任务,却发现流程早已变更——因为系统还在引用三个月前的旧版文档。这种“知识滞后…

张小明 2026/1/8 13:16:05 网站建设