山东大学项目实训(十一)——分类算法(7.20、7.21)

7.20早上我们开了个小会,因为进度差距有点大,所以我们重新安排了一下工作,我先放下手里的前端工作去帮忙另一名成员写分割和分类算法。我负责的主要是分类,主要在原有的代码的基础上进行改写以获得我们需要的数据。
在拿到代码和数据后花费了一段时间去理解代码逻辑,毕竟改写之前得先知道原来的代码整体是什么样的逻辑才能更有效率,不得不说,原来的代码还是比较有误导性的,它自带的输出以及其中的一大部分我们都用不到,而我们需要的则是藏在中间了,所以花费了不少时间。它主要的代码逻辑就是从一个test表中读取文件名,根据文件名寻找并读取txt文件,然后将全部数据经过处理并存储起来,这些数据主要包括标签和txt文件里的点,然后以24的batchsize进行测试,输出以batch为单位的正确率。
这里我们需要的既不是正确率也不是以batch为单位的数据,所以我主要要从中间提取出用来计算正确率的预测值,同时在读取文件时只读取点,因为分割出来的数据应该不带坐标,然后还要让它以一个txt文件为单位而不是以24个文件一个batch为单位(这里它分类采用的是三维(243点个数),所以一个文件为单位我需要升维,变为13点个数),最后输出我打算输出一个txt文件,然后每行都有一个标签对应相同顺序的一个点,主要代码如下:

file_dir="test"
    f= open('result.txt', 'a')
    for root, dirs, files in os.walk(file_dir, topdown=False):
        for file in files:
            point_set = np.loadtxt((os.path.join(root, file)), delimiter=' ').astype(np.float32)
            point_set[:, 0:3] = pc_normalize(point_set[:, 0:3])
            points = point_set[:, 0:3].transpose(1, 0)
            dim=points.shape
            points=points.reshape(1,dim[0],dim[1])
            points = torch.from_numpy(points).cuda()
            classifier = classifier.eval()
            pred,_=classifier(points)
            pred_choice = pred.data.max(1)[1]
            pred_choice=pred_choice.cpu().numpy()
            for i in range(0,dim[1]):
                f.write(str(pred_choice[0])+'\n')
    f.close()

结果(0和6是标签即为分的类):

这里因为做分割的成员还没有结果,所以我暂且使用读取整个文件夹里的文件的输入方式,待结果出来后可能会根据结果有一定改动,而输出方式也会根据写播放器的同学的需求进行一定的改动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值