目标

sklearn库里面的kmeans算法默认运行在gpu上,运行效率较低。有时候需要在网络内动态的对特征进行分聚类。如果有基于Pytorch Tensor的kmeans实现则可以极大提升效率。

经过检索发现ContrastiveSceneContexts有类似实现,可以参考该实现:

环境

pytorch, pykeops

pip install pykeops  -i https://pypi.tuna.tsinghua.edu.cn/simple

代码

import os
import torch
import numpy as np
import glob
import time
import argparse
import pykeops
from pykeops.torch import LazyTensor
pykeops.clean_pykeops() def kmeans(pointcloud, k=10, iterations=10, verbose=True):n, dim = pointcloud.shape  # Number of samples, dimension of the ambient spacestart = time.time()clusters = pointcloud[:k, :].clone()  # Simplistic random initializationpointcloud_cuda = LazyTensor(pointcloud[:, None, :])  # (Npoints, 1, D)# K-means loop:for _ in range(iterations):clusters_previous = clusters.clone()clusters_gpu = LazyTensor(clusters[None, :, :])  # (1, Nclusters, D)distance_matrix = ((pointcloud_cuda - clusters_gpu) ** 2).sum(-1)  # (Npoints, Nclusters) symbolic matrix of squared distancescloest_clusters = distance_matrix.argmin(dim=1).long().view(-1)  # Points -> Nearest cluster# #points for each clusterclusters_count = torch.bincount(cloest_clusters, minlength=k).float()  # Class weightsfor d in range(dim):  # Compute the cluster centroids with torch.bincount:clusters[:, d] = torch.bincount(cloest_clusters, weights=pointcloud[:, d], minlength=k) / clusters_count# for clusters that have no points assignedmask = clusters_count == 0clusters[mask] = clusters_previous[mask]end = time.time()if verbose:print("K-means example with {:,} points in dimension {:,}, K = {:,}:".format(n, dim, k))print('Timing for {} iterations: {:.5f}s = {} x {:.5f}s\n'.format(iterations, end - start, iterations, (end-start) / iterations))# nearest neighbouring search for each clustercloest_points_to_centers = distance_matrix.argmin(dim=0).long().view(-1)return cloest_points_to_centers

Reference

  • Ji Hou, Benjamin Graham, Matthias Nießner, Saining Xie:
    Exploring Data-Efficient 3D Scene Understanding With Contrastive Scene Contexts. CVPR 2021: 15587-15597
  • https://github.com/facebookresearch/ContrastiveSceneContexts/blob/83515bef4754b3d90fc3b3a437fa939e0e861af8/downstream/semseg/lib/sampling_points.py#L28

Kmeans聚类 使用Pytorch和GPU加速相关推荐

  1. Pytorch使用GPU加速

    1.    可以在cmd窗口输入nvidia-smi命令来确认自己的显卡是否有CUDA. 没有的话,需要安装.(搜CUDA官网按照步骤来) 2.    然后安装pythorch. 必须安装的有torc ...

  2. Ubuntu18.04下安装深度学习框架Pytorch(GPU加速)

    前面我们已经在windows10环境下成功安装了CPU版本的Pytorch,推荐的是利用Anaconda安装. 经过接近一天的奋战,博主成功在linux系统安装GPU加速的pytorch,博主使用的发 ...

  3. Pytorch之GPU加速计算问题以及model=model.to(device)

    文章目录 model=model.to(device) GPU加速计算问题 技巧一 model=model.to(device) model=model.to(device) 这个有什么用,其实就是把 ...

  4. pytorch采用GPU加速方法

    在进行深度学习训练模型时,对于计算量小一些的模型,是可以在CPU上进行的.但是当计算量比较大时,我们希望利用GPU并行计算的能力去加快训练的速度. 查看GPU版本号 import torchprint ...

  5. 在Pytorch中使用GPU加速模型训练

    CPU->GPU 当我们需要训练一个复杂模型的时候,使用CPU来进行训练往往会花费非常多的时间.因此,一般情况下,我们都会选择在GPU (Graphics Process Unit)环境下进行训 ...

  6. Pytorch使用GPU训练模型加速

    Pytorch使用GPU训练模型加速 深度学习神经网络训练经常很耗时,耗时主要来自两个部分,数据准备和自参数迭代. 当数据准备是主要耗时原因时,采用多进程准备数据.当迭代过程是训练耗时主力时,采用GP ...

  7. 基于GPU的K-Means聚类算法

    聚类是信息检索.数据挖掘中的一类重要技术,是分析数据并从中发现有用信息的一种有效手段.它将数据对象分组成为多个类或簇,使得在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别很大.作为统计学的 ...

  8. kmcuda: GPU加速 Kmeans

    文章目录 1.kmcuda简介 2.安装 1. 查询gcc版本 2. 查询GPU算力 3. 配置GPU路径 3.完整安装命令 4.安装遇到的问题 1. 使用pip安装 2. 未指定GPU算力或使用默认 ...

  9. (最新最全)windows使用anaconda安装pytorch进行深度学习并使用GPU加速

    本篇文章记录下自己安装pytorch的过程,由于我装过3~4次了,所以还算是比较有经验了. 文章目录 1.检查电脑配置 2.Anaconda的准备工作-添加国内镜像源 3.下载 3.测试 1.检查电脑 ...

最新文章

  1. asp.net mvc5 分析器错误消息: 未能加载类型“XXX.MvcApplication”
  2. 从玉农业谋定塞外-丰收节交易会·林裕豪:巴彦淖尔深圳签约
  3. 我的cookie读写
  4. .NET6 中的 PriorityQueue
  5. linux中的信号1——信号概述
  6. Apache网站服务
  7. 为什么不能把CSS放到html中,为什么我的CSS代码不能在我的HTML文件中工作?
  8. 2岁男童入住自如后患白血病离世 自如回复:道歉做不到
  9. python 类(1)
  10. 一个号支持多个移动运营商
  11. 计算机硬盘容量分配,电脑磁盘分区容量大小怎么调整
  12. 周围剃光头顶留长发型_为什么很多秃顶的人,宁可留周围一圈头发,也不直接剃成光头?...
  13. Microsoft Live Account for Mail, space, onecare
  14. 计算机Web书籍推荐
  15. 云服务器虚拟化搭建,虚拟化搭建云服务器
  16. 界面相当华丽HTC G11西安报价2450元
  17. 【附源码】计算机毕业设计java智慧灭火器管理系统设计与实现
  18. 区块链论语:付币看真相是一个应用
  19. 在VMware10下安装VxWorks6.6虚拟机教程(上篇——准备环节)
  20. Python微信打飞机游戏编程学习笔记01

热门文章

  1. 基于JAVA恩施茶多芬网店系统设计与实现2021计算机毕业设计源码+系统+lw文档+部署
  2. 日历生成算法-中国公历
  3. 关于presentation 中连接词的 使用
  4. “低代码”将干掉70%的软件开发工作
  5. 微波消解仪的工作原理是什么?
  6. cocos2djs棋牌手游加密逆向,万物皆可Hook
  7. 国内最早的区块链公司6年来做了什么?
  8. 电脑鼠原理与实践学习笔记
  9. 技术好远远不够,寻找这三个不可替代性才最重要!
  10. JAVA 设计模式—————— 命令模式和职责链模式