当前位置: 首页 > article >正文

保姆级教程:用PyTorch 1.13.1在GPU上跑通PointNet分类与分割(附自写推理脚本)

从零实现PointNet分类与分割PyTorch 1.13.1 GPU实战指南当你第一次接触3D点云处理时可能会被各种复杂的数学公式和算法吓退。但PointNet的出现改变了这一局面——这个开创性的网络架构直接处理原始点云数据无需复杂的体素化或网格化预处理。本文将带你用PyTorch 1.13.1在GPU上完整实现PointNet的分类和分割任务包含你可能在其他教程中找不到的自定义推理脚本。1. 环境配置与数据准备在开始之前确保你有一台配备NVIDIA GPU的机器本地或云服务器均可。我们将使用conda创建隔离的Python环境避免依赖冲突。conda create -n pointnet python3.8 -y conda activate pointnet pip install torch1.13.1cu116 torchvision0.14.1cu116 --extra-index-url https://download.pytorch.org/whl/cu116注意PyTorch版本必须与CUDA驱动兼容。如果你的CUDA版本不是11.6请访问PyTorch官网查找对应版本的安装命令。接下来下载ShapeNet数据集这是PointNet论文中使用的标准基准数据集# 创建数据集目录 mkdir -p data/shapenet wget [ShapeNet下载链接] -O shapenetcore_partanno_segmentation_benchmark_v0.zip unzip shapenetcore_partanno_segmentation_benchmark_v0.zip -d data/shapenet数据集目录结构应如下所示shapenetcore_partanno_segmentation_benchmark_v0/ ├── 02691156/ # 飞机类别 │ ├── points/ # 点云文件(.pts) │ └── points_label/ # 分割标签 ├── 02773838/ # 背包类别 └── ... # 其他类别2. PointNet分类任务实战分类任务是PointNet最基础的应用场景。我们将从模型训练开始逐步实现端到端的流程。2.1 模型训练首先克隆PointNet的PyTorch实现git clone https://github.com/charlesq34/pointnet.pytorch cd pointnet.pytorch pip install -e .训练分类模型的命令如下python train_classification.py \ --datasetdata/shapenet/shapenetcore_partanno_segmentation_benchmark_v0 \ --nepoch50 \ --batch_size32 \ --gpu0关键参数说明参数描述推荐值--dataset数据集路径绝对路径为佳--nepoch训练轮数50-100--batch_sizeGPU显存决定16-64--gpu使用的GPU索引0为第一块GPU训练过程中常见的两个问题及解决方案ImportError: No module named pointnet# 在脚本开头添加 import sys sys.path.append(../)CUDA out of memory减小batch_size使用nvidia-smi检查其他进程是否占用显存2.2 自定义推理脚本原作者未提供推理代码我们实现了一个完整的分类预测脚本cls_inference.pyimport torch import numpy as np from model import PointNetCls def load_model(model_path, num_classes16): model PointNetCls(knum_classes) model.load_state_dict(torch.load(model_path)) model.cuda().eval() return model def preprocess_pointcloud(points, num_points2500): 标准化并采样到固定点数 if len(points) num_points: indices np.random.choice(len(points), num_points, replaceFalse) points points[indices] elif len(points) num_points: # 重复填充不足的点 indices np.random.choice(len(points), num_points - len(points)) points np.concatenate([points, points[indices]]) # 中心化并归一化 points points - np.mean(points, axis0) points / np.max(np.linalg.norm(points, axis1)) return points.astype(float32) def predict(model, points): points_tensor torch.from_numpy(points).unsqueeze(0).transpose(2,1).cuda() with torch.no_grad(): pred, _, _ model(points_tensor) return pred.argmax().item()使用示例python cls_inference.py \ --modelcls/cls_model_49.pth \ --pointclouddata/shapenet/02691156/points/1a04e3eab45ca15dd86060f189eb133.pts3. PointNet分割任务进阶分割任务需要预测每个点的类别比分类更复杂。我们同样从训练开始逐步实现可视化推理。3.1 训练分割模型python train_segmentation.py \ --datasetdata/shapenet/shapenetcore_partanno_segmentation_benchmark_v0 \ --class_choiceChair \ # 指定训练类别 --nepoch100 \ --batch_size16训练参数对比参数分类任务分割任务输入维度(B, 3, N)相同输出维度(B, C)(B, N, S)典型batch_size3216训练时间较短较长3.2 分割结果可视化由于服务器环境可能没有GUI我们实现将3D分割结果渲染为2D图像import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def visualize_segmentation(points, seg_labels, save_path): fig plt.figure(figsize(10, 10)) ax fig.add_subplot(111, projection3d) # 为每个分割类别设置不同颜色 unique_labels np.unique(seg_labels) colors plt.cm.jet(np.linspace(0, 1, len(unique_labels))) for i, label in enumerate(unique_labels): mask seg_labels label ax.scatter(points[mask,0], points[mask,1], points[mask,2], colorcolors[i], labelfPart {i}, s10) ax.legend() plt.savefig(save_path, dpi300, bbox_inchestight) plt.close()完整的推理流程加载预训练模型预处理输入点云运行模型预测可视化分割结果python seg_inference.py \ --modelseg/seg_model_Chair_49.pth \ --pointclouddata/shapenet/03001627/points/ff5f849b52d2b2c810a0f5d325c2b39e.pts \ --outputresults/chair_seg.png4. 性能优化与实用技巧经过基础实践后下面这些技巧可以帮你进一步提升效果和效率4.1 数据增强策略在dataset.py中添加这些增强方法def augment_pointcloud(points): # 随机旋转 theta np.random.uniform(0, 2*np.pi) rotation_matrix np.array([ [np.cos(theta), -np.sin(theta), 0], [np.sin(theta), np.cos(theta), 0], [0, 0, 1] ]) points points rotation_matrix # 随机缩放 scale np.random.uniform(0.8, 1.2) points * scale # 随机抖动 noise np.random.normal(0, 0.02, sizepoints.shape) points noise return points4.2 混合精度训练使用NVIDIA的Apex库加速训练from apex import amp model PointNetCls(k16).cuda() optimizer torch.optim.Adam(model.parameters()) model, optimizer amp.initialize(model, optimizer, opt_levelO1) with amp.scale_loss(loss, optimizer) as scaled_loss: scaled_loss.backward()4.3 模型量化部署将训练好的模型量化为INT8格式提升推理速度model PointNetCls(k16).eval() quantized_model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 ) torch.jit.save(torch.jit.script(quantized_model), pointnet_quantized.pt)实测性能对比模型类型推理时间(ms)显存占用(MB)原始FP3212.31245INT8量化5.7683

相关文章:

保姆级教程:用PyTorch 1.13.1在GPU上跑通PointNet分类与分割(附自写推理脚本)

从零实现PointNet分类与分割:PyTorch 1.13.1 GPU实战指南 当你第一次接触3D点云处理时,可能会被各种复杂的数学公式和算法吓退。但PointNet的出现改变了这一局面——这个开创性的网络架构直接处理原始点云数据,无需复杂的体素化或网格化预处理…...

ESP-01s固件烧录与Arduino编程:从接线玄学到一键下载的避坑指南

1. ESP-01s模块入门:为什么你的接线总是出错? 第一次接触ESP-01s的朋友,十有八九会在烧录固件或上传程序时遇到各种莫名其妙的失败。我见过太多人把模块插上CH340就以为万事大吉,结果在电脑前折腾一整天都搞不定下载。这其实是因为…...

PADS VX2.8 极坐标布局技巧:圆形灯板LED高效排列指南

1. 极坐标布局在圆形灯板设计中的核心价值 第一次接触圆形LED灯板设计时,我被密密麻麻的元件排列搞得头晕眼花。传统直角坐标系下,要精确控制每个LED灯珠的间距和角度,需要反复计算XY坐标,效率极低。直到发现PADS VX2.8的极坐标功…...

3D点云检测实战指南-数据准备篇(一):Nuscenes数据集解析与应用

1. Nuscenes数据集基础解析 第一次接触Nuscenes数据集时,我被它庞大的数据量和精细的标注震撼到了。这个由Motional团队打造的自动驾驶数据集,包含了1000个真实驾驶场景,每个场景持续20秒。不同于普通数据集,Nuscenes最吸引我的是…...

所有下载都一定要直接从个人服务器直接下载--------因为个人宽带的上传速度一点也不慢

可以看到居然速度高达10M/S如果你直接从云服务器下载速度就非常慢:这就是1M的宽带,所以很慢。所以如果是下载apk文件,一定要从自己的服务器直接下载:就是带10001端口号的个人服务器。...

避坑指南:用OpenCV处理Kinetics-400数据集时,你可能遇到的3个典型问题及解决方案

避坑指南:用OpenCV处理Kinetics-400数据集时,你可能遇到的3个典型问题及解决方案 处理大型视频数据集如Kinetics-400时,即使是最有经验的开发者也会遇到各种意料之外的问题。本文将深入探讨三个最常见的技术陷阱,并提供经过实战验…...

服务器速度很慢

表现:20K/s ssh有时候能打开,有时候打不开结果:没有交话费,欠费。解决方式:充值200元现在能打开了,另外添加了一个参数:ProxyPreserveHost off但是很可能没用,因为我一开始直接访问…...

告别CNN!用Mask2Former+Swin Transformer实战图像分割,保姆级代码解析

从CNN到Transformer:Mask2Former与Swin Transformer在图像分割中的实战指南 图像分割技术正在经历一场静默的革命。传统卷积神经网络(CNN)主导的时代逐渐让位于基于Transformer的新型架构,这种转变不仅仅是技术栈的更新&#xff…...

保姆级教程:用AutoDL租4090显卡,在PyCharm里远程复现具身智能论文PAI0(附完整避坑清单)

零基础实战:AutoDLPyCharm复现PAI0具身智能论文全流程指南 第一次接触云端GPU服务器和远程开发?别担心,这篇教程会手把手带你用AutoDL租用4090显卡,并通过PyCharm实现无缝远程开发,完整复现具身智能领域的前沿论文PAI0…...

华为eNSP防火墙GRE over IPSec保姆级排错指南:从隧道起不来、加密失败到稳定通信

华为eNSP防火墙GRE over IPSec实战排错手册:从零排查到稳定通信 当你在华为eNSP环境中搭建GRE over IPSec隧道时,是否遇到过隧道死活起不来、加密协商失败或者路由莫名其妙的消失?这篇文章将带你走进真实排错现场,用工程师的视角一…...

用STC89C51+LM358做个心率计,从硬件选型到代码调试的完整避坑指南

从零打造高精度心率监测仪:STC89C51与LM358的硬核实战手册 指尖轻触红外传感器,LCD屏幕上的数字开始跳动——这不是医疗设备,而是你用面包板和51单片机搭建的心率监测装置。当开源硬件遇上生物信号采集,传统单片机依然能在可穿戴设…...

MacOS 在Trae IDE中解锁现代C++开发:从零配置到智能编码的进阶指南

1. 为什么选择Trae IDE进行现代C开发 作为一个长期使用Visual Studio和CLion的老C程序员,我第一次接触Trae IDE时就被它的AI特性惊艳到了。这不仅仅是一个代码编辑器,更像是一个懂你编程思维的智能助手。在MacOS环境下,Trae基于VSCode技术构…...

星闪实战指南:10分钟掌握WS63 SDK任务调度与调试技巧

1. 星闪WS63 SDK任务调度基础 第一次接触星闪WS63 SDK的任务调度功能时,我完全被各种API搞晕了。经过几个项目的实战,才发现这套任务管理系统设计得非常巧妙。简单来说,它就像个智能管家,能帮你把各种工作安排得井井有条。 任务调…...

从Pico到Pico W:无线加持下,树莓派微控制器如何重塑物联网原型设计

1. 从有线到无线的跨越:Pico W带来的物联网革命 记得我第一次用树莓派Pico做智能温湿度计项目时,被传感器布线折腾得够呛。为了把数据传到服务器,不得不在面包板上插满杜邦线,最后成品活像只炸毛的刺猬。直到Pico W出现&#xff…...

GHelper终极指南:如何用开源工具彻底掌控华硕笔记本性能

GHelper终极指南:如何用开源工具彻底掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...

新手入门指南:在快马平台上通过openclaw切换模型理解ai编程差异

作为一个刚开始接触AI编程的新手,我最近在InsCode(快马)平台上尝试了openclaw切换模型的功能,发现这个功能特别适合用来理解不同AI模型的代码生成特点。整个过程就像有个耐心的老师在旁边手把手教学,完全不需要任何编程基础就能上手。下面我就…...

实战演练:在快马平台构建并部署一个完整的云原生博客系统

实战演练:在快马平台构建并部署一个完整的云原生博客系统 最近在尝试云原生技术栈时,发现InsCode(快马)平台特别适合做全流程的实战演练。这里记录下如何用这个平台快速搭建一个包含前后端和数据库的博客系统,并实现自动化部署的全过程。 项…...

用OpenPCDet跑通Nuscenes-mini:小显存福音与多模态数据处理的实战笔记

用OpenPCDet跑通Nuscenes-mini:小显存福音与多模态数据处理的实战笔记 在3D目标检测领域,Nuscenes数据集因其丰富的多模态数据(LiDAR、摄像头、雷达)和复杂的城市场景而备受研究者青睐。但对于大多数个人开发者和学生来说&#x…...

利用快马平台与openclaw快速构建电商数据抓取原型

最近在做一个电商数据分析的小项目,需要快速验证数据抓取的可行性。传统方式从零搭建爬虫环境太费时间,正好发现了InsCode(快马)平台这个神器,配合openclaw库可以快速完成原型开发。这里记录下我的实践过程,特别适合需要快速验证想…...

课堂行为及状态检测数据集11697张VOC+YOLO格式

课堂行为及状态检测数据集11697张VOCYOLO格式数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):11697 标注数量(xml文件个数):1169…...

LoRa土壤监测与灌溉控制系统方案

当前农业生产中,土壤水分、温度等环境参数是影响作物生长的核心因素,传统种植模式依赖人工经验判断灌溉时机与用量,存在诸多局限。随着智慧农业、精准农业的快速发展,物联网技术在农业灌溉领域的应用日益广泛,LoRa作为…...

手把手教你用ESP32-S3开发智能语音设备:麦克风选型+WAV录音全流程

ESP32-S3智能语音设备开发实战:从麦克风选型到WAV录音全流程解析 1. 智能语音设备开发的核心挑战与ESP32-S3解决方案 在智能家居和物联网设备爆发式增长的今天,语音交互已成为人机交互的重要方式。然而,开发一款高性能的智能语音设备并非易…...

当单片机玩起音乐魔法

基于单片机的音乐律动播放器音乐盒串口远程控制(LCD1286 1100056-基于单片机的音乐律动播放器音乐盒串口远程控制(LCD12864、六首音乐、PWM调频、音频编码、源代码、仿真、流程图、物料清单、Proteus) 功能描述:基于单片机的音乐律…...

Pandas读写Parquet文件避坑指南:pyarrow和fastparquet引擎怎么选?columns参数真能省内存吗?

Pandas读写Parquet文件避坑指南:引擎选择与内存优化实战解析 当你第一次听说Parquet格式能比CSV节省80%存储空间时,可能和我一样兴奋地立刻把项目里的数据全转成了.parquet后缀。但真正在生产环境部署时,却发现pd.read_parquet()在不同机器上…...

Python-for-Android终极指南:用Python代码打造原生Android应用

Python-for-Android终极指南:用Python代码打造原生Android应用 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址: https://gitcode.com/gh_mirrors/py/python-for-android 想要用你最熟悉的Python语言开发An…...

暗黑破坏神2存档修改神器:从入门到精通的完整指南

暗黑破坏神2存档修改神器:从入门到精通的完整指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 如果你是暗黑破坏神2的忠实玩家,一定遇到过反复刷装备的枯燥、角色培养的漫长过程。d2s-editor作为一款强…...

OriginPro 2023保姆级教程:三步搞定柱状图+点线图组合,让你的科研图表颜值飙升

OriginPro 2023科研图表优化实战:从基础绘图到期刊级组合图表 科研图表是学术论文的"门面",一张精心设计的图表往往能让审稿人和读者眼前一亮。OriginPro作为科研绘图领域的标杆工具,其2023版本在图表组合和视觉优化方面带来了诸多…...

GESP2025年3月认证C++三级( 第三部分编程题(2、词频统计)

一、🧙‍♂️ 故事背景:单词王国选举大会 在“单词王国”里 🏰 有很多单词来参加“最受欢迎单词”比赛! 👉 比如: Apple banana apple Orange banana apple二、🎯 任务 👉 找出&…...

后台管理系统布局设计指南:从架构到实践的全方位解析

后台管理系统布局设计指南:从架构到实践的全方位解析 【免费下载链接】vue3-element-admin 🔥基于 Vue 3 Vite 7 TypeScript element-plus 构建的后台管理前端模板(配套后端源码),vue-element-admin 的 vue3 版本。 …...

OpenClaw效率对比:人工vsQwen2.5-VL-7B处理100张图片耗时测试

OpenClaw效率对比:人工vsQwen2.5-VL-7B处理100张图片耗时测试 1. 测试背景与动机 最近在整理个人摄影作品集时,我遇到了一个典型问题:需要将100张混合了风景、人像、静物的照片按主题分类归档。手动操作不仅耗时,还容易因视觉疲…...