使用PointNet++测试分类自己的数据集并可视化

我这里PointNet++的代码用的是pytorch版本的,链接为 https://github.com/yanx27/Pointnet2_pytorch

将自己的数据集格式修改为和modelnet40_normal_resampled数据集格式一样。

       由于源码中测试脚本只是输出了测试数据集的分类精确度,且测试数据集同样的是有标签的,没有模型验证脚本,由于个人实验需要,希望当模型训练完成后能用自己的无标签数据输入后输出类别去检测模型的分类效果,因此根据模型测试脚本,修改了一下代码,可以实现输入一个无标签的数据,从而输出分类结果以及可视化,从而更直观的验证模型训练的准确度。 

 代码如下,其中可视化部分参考这位博主的文章 pointconv pytorch modelnet40 点云分类结果可视化_对象被抛出的博客-CSDN博客_modelnet40可视化

from data_utils.ModelNetDataLoader_my import ModelNetDataLoader
import argparse
import numpy as np
import os
import torch
import logging
from tqdm import tqdm
import sys
import importlib
import matplotlib.pyplot as pltBASE_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = BASE_DIR
sys.path.append(os.path.join(ROOT_DIR, 'models'))def pc_normalize(pc):  #点云数据归一化centroid = np.mean(pc, axis=0)pc = pc - centroidm = np.max(np.sqrt(np.sum(pc**2, axis=1)))pc = pc / mreturn pc
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print(torch.cuda.is_available())
def parse_args():'''PARAMETERS'''parser = argparse.ArgumentParser('Testing')parser.add_argument('--use_cpu', action='store_true', default=False, help='use cpu mode')parser.add_argument('--gpu', type=str, default='0', help='specify gpu device')parser.add_argument('--batch_size', type=int, default=4, help='batch size in training')parser.add_argument('--num_category', default=10, type=int, choices=[10, 40],  help='training on ModelNet10/40')parser.add_argument('--num_point', type=int, default=10000, help='Point Number')parser.add_argument('--log_dir', type=str, default='pointnet2_cls_msg', help='Experiment root')parser.add_argument('--use_normals', action='store_true', default=False, help='use normals')parser.add_argument('--use_uniform_sample', action='store_true', default=False, help='use uniform sampiling')parser.add_argument('--num_votes', type=int, default=3, help='Aggregate classification scores with voting')return parser.parse_args()
#加载数据集
dataset='/home/niu/mysubject/Pointnet_Pointnet2_pytorch-master/evalset/aaa_1.txt'
pcdataset = np.loadtxt(dataset, delimiter=' ').astype(np.float32)#数据读取,我的数据是三个维度,数据之间是空格,如果是逗号修改一下即可
point_set = pcdataset[0:10000, :] #我的输入数据设置为原始数据中10000个点
point_set[:, 0:3] = pc_normalize(point_set[:, 0:3]) #归一化数据
point_set = point_set[:, 0:3] 
point_set = point_set.transpose(1,0)#将数据由N*C转换为C*N
#print(point_set.shape)
point_set = point_set.reshape(1, 3, 10000)
n_points = point_set
point_set = torch.as_tensor(point_set)#需要将数据格式变为张量,不然会报错
point_set = point_set.cuda()
#print(point_set.shape)
#print(point_set.shape)
#分类测试函数
def test(model,point_set, num_class=10, vote_num=1):#mean_correct = []classifier = model.eval()class_acc = np.zeros((num_class, 3))vote_pool = torch.zeros(1, 10).cuda()for _ in range(vote_num):pred, _ = classifier(point_set)print(pred)vote_pool += predpred = vote_pool / vote_num# 对预测结果每行取最大值得到分类pred_choice = pred.data.max(1)[1]print(pred_choice)#可视化file_dir = '/home/niu/mysubject/Pointnet_Pointnet2_pytorch-master/visualizer'save_name_prefix = 'pred'draw(n_points[:, 0, :], n_points[:, 1, :], n_points[:, 2, :], save_name_prefix, file_dir, color=pred_choice)return pred_choice
#定义可视化函数
def draw(x, y, z, name, file_dir, color=None):"""绘制单个样本的三维点图"""if color is None:for i in range(len(x)):ax = plt.subplot(projection='3d')  # 创建一个三维的绘图工程save_name = name + '-{}.png'.format(i)save_name = os.path.join(file_dir,save_name)ax.scatter(x[i], y[i], z[i],s=0.1, c='r')ax.set_zlabel('Z')  # 坐标轴ax.set_ylabel('Y')ax.set_xlabel('X')plt.draw()plt.savefig(save_name)# plt.show()else:colors = ['red', 'blue', 'green', 'yellow', 'orange', 'tan', 'orangered', 'lightgreen', 'coral', 'aqua']for i in range(len(x)):ax = plt.subplot(projection='3d')  # 创建一个三维的绘图工程save_name = name + '-{}-{}.png'.format(i, color[i])save_name = os.path.join(file_dir,save_name)ax.scatter(x[i], y[i], z[i],s=0.1, c=colors[color[i]])ax.set_zlabel('Z')  # 坐标轴ax.set_ylabel('Y')ax.set_xlabel('X')plt.draw()plt.savefig(save_name)# plt.show()def main(args):def log_string(str):logger.info(str)print(str)'''HYPER PARAMETER'''os.environ["CUDA_VISIBLE_DEVICES"] = args.gpu'''CREATE DIR'''experiment_dir = '/home/niu/mysubject/Pointnet_Pointnet2_pytorch-master/log/classification/' + args.log_dir'''LOG'''args = parse_args()logger = logging.getLogger("Model")'''logger.setLevel(logging.INFO)formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')file_handler = logging.FileHandler('%s/eval.txt' % experiment_dir)file_handler.setLevel(logging.INFO)file_handler.setFormatter(formatter)logger.addHandler(file_handler)log_string('PARAMETER ...')log_string(args)'''num_class = args.num_category#选择模型model_name = os.listdir(experiment_dir + '/logs')[0].split('.')[0]model = importlib.import_module(model_name)classifier = model.get_model(num_class, normal_channel=args.use_normals)if not args.use_cpu:classifier = classifier.cuda()#选择训练好的.pth文件checkpoint = torch.load(str(experiment_dir) + '/checkpoints/best_model.pth')classifier.load_state_dict(checkpoint['model_state_dict'])#预测分类with torch.no_grad():pred_choice = test(classifier.eval(), point_set, vote_num=args.num_votes, num_class=num_class)#log_string('pred_choice: %f' % (pred_choice))if __name__ == '__main__':args = parse_args()main(args)

用自己的数据集训练完成后,测试代码中修改训练好的.pth文件。根据自己的数据格式修改自己对应的参数以及数据集路径运行即可

分类输出结果:

输出为分类的数据类别3

 可视化结果保存在visualizer文件下,可视化结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31736.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【分享NVIDIA GTC 23大会干货】干货通过技术发展平衡看待气候变化数据生产和用户需求[S51358]

【分享NVIDIA GTC 23大会干货】通过技术发展平衡看待气候变化数据生产和用户需求[S51358] 通过技术发展平衡看待实现气候变化数据的生产和用户需求数字孪生系统和气候信息为什么我们需要用数字孪生系统来适应气候变化呢?要求得不到满足当前未来气候数据来源存在问题…

软件测试的黑盒测试,输入年月日输出下一天,JavaScript版本

题目7:编写以下程序:该程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12、1≤day≤31和1900≤year≤2050),分别作为输入日期的月份、日、年份,通过程序可…

仅需要26个字节的Hello World程序(可能是最小的Hello World了)

前言 大多数初学者编写的第一个程序都是输出一段文字,最常见的是“Hello World!”。大家在编写完成之后,除了检查语法和逻辑之外,可能忽略了另一个方面的问题,那就是输出文件的大小。以C语言为例,我们编写…

ChatGPT:3. 使用OpenAI创建自己的AI网站:2. 使用 flask web框架快速搭建网站主体

使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白,有OpenAI的账号,但想调用OpenAI的API搞一些有意思的事,那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新,进度慢…

New Bing 正式向所有用户开放,无需申请即可体验

文章原文:New Bing 正式向所有用户开放,无需申请即可体验 - WINISLE 从今天起, New Bing 已经向所有用户开放! 尽管,微软已经全面放开了 New Bing 体验资格,但由于中国地区的一些合规问题,国内…

国内使用必应的正确打开方式

捣腾了两天终于体验上了bing,目前认为是最稳定的,下面是教程 前提,使用魔法,否则会跳转至国内地址正常使用microsoft edge浏览器即可,看其他人说必须下载最新版,或者下载dev版本。普通版本即可。浏览器访问…

人工智能和剪映配合提升微课效率

今天我们介绍如何让人工智能帮助我们制作微课或者批量生成短视频。 工具: 人工智能软件(ChatGPT、文心一言、Claude等) 剪映专业版 1.确定主体和生成内容 我们需要想好视频主题,并让人工智能帮助我们生成内容。如图,这…

ideal使用chatGPT

先在浏览器登录OPAI,在点击第二个连接获取token,把页面上的JSON字符串复制到ideal中

篡位者OpenAI偷家谷歌,CEO怒发Bard调教指南:别慌,咱向来是弯道超车

视学算法报道 编辑:编辑部 【导读】谷歌被唱衰多日,劈柴终于出手了!他发备忘录鼓励员工:别怕,「迟到也能赢」是咱们公司老传统了。 谷歌CEO劈柴反击了!他告诉员工:别慌,咱们迟到也…

新浪实时股票数据接口http://hq.sinajs.cn/list=code

股票数据的获取目前有如下两种方法可以获取: 1. http/javascript接口取数据 2. web-service接口 1.http/javascript接口取数据 1.1Sina股票数据接口 以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情&#xff…

友宝在线在港交所上市申请“失效”:连续两年亏损,王滨为大股东

近日,贝多财经从港交所披露易了解到,Beijing UBOX Online Technology Corp.(北京友宝在线科技股份有限公司,下称“友宝”或“友宝在线”)的上市申请材料已经失效,目前已经无法查看。 其中,招股书…

尚医通-医院详情功能(二十七)

目录: (1)前台用户系统-医院详请-情接口开发 (2)前台用户系统-技术点-nuxt路由 (3)前台用户系统-医院详情-前端整合 (1)前台用户系统-医院详-情接口开发 现在做在页面…

2020年全球及中国分子影像系统(PET/CT及PET/MR)行业现状及竞争格局分析,国产龙头在高端产品领域走在国际前沿「图」

一、分子影像系统综述 分子影像系统(包括PET/CT及PET/MR)通过显示组织水平、细胞和亚细胞水平的特定分子,反映活体状态下分子水平变化,对生物学行为在影像方面进行定性和定量研究。分子成像技术能够探查疾病过程中细胞和分子水平…

派尔特医疗在港交所招股书二次“失效”,上市计划实质性延迟

2022年6月30日,贝多财经从港交所披露易了解到,北京派尔特医疗科技股份有限公司(下称“派尔特医疗”)的招股书“失效”。事实上,这已经是派尔特医疗的上市申请材料第二次“失效”。 在此之前,派尔特医疗曾于…

尚医通 (二十六) --------- 科室接口开发

目录 一、上传科室接口1. 添加科室基础类2. 上传科室 二、查询科室接口三、删除科室接口 一、上传科室接口 1. 添加科室基础类 A、添加 model 说明:由于实体对象没有逻辑,我们已经统一导入 com.fancy.yygh.model.hosp.Department B、添加 repository…

医疗企业GE HealthCare纳斯达克上市:市值275亿美元

雷递网 雷建平 1月5日 医疗企业GE HealthCare(股票代码为:“GEHC”)昨日在美国纳斯达克上市,发行价为56美元。 GE HealthCare开盘价为54.13美元,较发行价下跌3.34%;收盘价为60.49美元,较发行价上…

python查询腾讯股票api实时行情数据

import urllib.requestdef httpGet(url):requrllib.request.Request(url) contenturllib.request.urlopen(req).read()return contentcontent httpGet("http://qt.gtimg.cn/qsh600213"); data str(content).split(~); print(f当前价格:{data[3]}); print(f昨收:…

高视医疗在港交所招股:IPO募资要用于贷款,高铁塔为控股股东

11月30日,高视医疗(HK:02407)在港交所发布公告,拟全球发售1306.86万股股份,其中香港发售股份130.7万股,国际发售股份1176.16万股,另有15%超额配股权,于2022年11月30日至12月5日招股&…

高视医疗冲刺香港上市:家族特色明显,奥博资本、华平投资等持股

11月28日,高视医疗(Gaush Meditech Ltd)在香港递交招股书,准备在港交所主板上市,摩根士丹利、海通国际为联席保荐人。 公开信息显示,高视医疗成立于1998年,专注于服务眼科医疗事业,…

东软医疗再次赴港递交上市申请,共安装超过4.1万台医学影像设备

据港交所12月1日披露,东软医疗系统股份有限公司(下称“东软医疗”)向港交所主板递交上市申请,中金公司与高盛为其联席保荐人。据贝多财经了解,这已经是东软医疗第二次向港交所递交招股书。 早前,东软医疗曾…