成功在windows系统上安装OpenPCDet-踩坑无数版

先上图

在网上看了无数帖子,终于集百家之长后,安装成功了。事实证明是可以安装成功的,希望还在挣扎的兄弟们不要放弃。
在这里插入图片描述

关键配置(版本问题很致命)

#有的差一个小版本号都会出问题
操作系统 : win10
cuda版本 : 11.7[cuda安装参考](https://blog.csdn.net/weixin_43848614/article/details/117221384))
python : 3.8
torch : 1.13.1+cu116(OpenPCDet要求在1.10.0以下,但是在安装C++ build tools与cuda的的时候遇到了很多版本不兼容的问题)
torchaudio : 0.13.1+cu116
torchvision :  0.14.1+cu116
numpy : 1.20.0
scikit-image : 0.15.0
scipy : 1.9.1
setuptools : 58.2.0
spconv : spconv-cu117
cumm : cumm-cu117(很关键,否则会导致以下错误)
 from cumm.core_cc import tensorview_bind
ImportError: DLL load failed while importing core_cc: 找不到指定的模块。

创建虚拟环境开始安装

问题1 windows无法直接pip install SharedArray

创建过程就不废话了,按照requirements.txt,配置环境就可以,注意我标注的版本号。
主要说一下SharedArray的安装。
首先新建一个文件夹,不要和OpenPCDet项目放在一起,不然import可能会出现问题(切记)
然后 在新建的目录下面把SharedArray的安装包下载下来,或者在当前目录打开终端
git clone https://github.com/imaginary-friend94/SharedNumpyArray.git

cd SharedNumpyArray ,即到SharedNumpyArray目录下。
python setup develop
参考这篇文章

问题2 ERROR: Could not build wheels for SharedArray, which is required to install pyproject.toml-based projects

这是由于没有cmake工具造成的
下载C++build tools
在这里插入图片描述
安装
在这里插入图片描述

问题3 error: command ‘D:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64\cl.exe’ failed with exit code 2

在环境变量PATH中,添加

D:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.35.32215\bin\HostX86\x64

重新python setup develop,截止到这SharedArray安装完毕,所需环境基本搭建完成。
进入OpenPCDet的项目里进行python setup develop之前。

1、对pcdet\ops\iou3d_nms\src里面的文件进行修改

iou3d_nms.cpp

/*
3D Rotated IoU Calculation (CPU)
Written by Shaoshuai Shi
All Rights Reserved 2020.
*/#include <stdio.h>
#include <math.h>
#include <torch/serialize/tensor.h>
#include <torch/extension.h>
#include <vector>
#include <cuda.h>
#include <cuda_runtime_api.h>
#include "iou3d_cpu.h"#define CHECK_CUDA(x) do { \if (!x.type().is_cuda()) { \fprintf(stderr, "%s must be CUDA tensor at %s:%d\n", #x, __FILE__, __LINE__); \exit(-1); \} \
} while (0)
#define CHECK_CONTIGUOUS(x) do { \if (!x.is_contiguous()) { \fprintf(stderr, "%s must be contiguous tensor at %s:%d\n", #x, __FILE__, __LINE__); \exit(-1); \} \
} while (0)
#define CHECK_INPUT(x) CHECK_CUDA(x);CHECK_CONTIGUOUS(x)inline float min(float a, float b){return a > b ? b : a;
}inline float max(float a, float b){return a > b ? a : b;
}const float EPS = 1e-8;
struct Point {float x, y;__device__ Point() {}__device__ Point(double _x, double _y){x = _x, y = _y;}__device__ void set(float _x, float _y){x = _x; y = _y;}__device__ Point operator +(const Point &b)const{return Point(x + b.x, y + b.y);}__device__ Point operator -(const Point &b)const{return Point(x - b.x, y - b.y);}
};inline float cross(const Point &a, const Point &b){return a.x * b.y - a.y * b.x;
}inline float cross(const Point &p1, const Point &p2, const Point &p0){return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);
}inline int check_rect_cross(const Point &p1, const Point &p2, const Point &q1, const Point &q2){int ret = min(p1.x,p2.x) <= max(q1.x,q2.x)  &&min(q1.x,q2.x) <= max(p1.x,p2.x) &&min(p1.y,p2.y) <= max(q1.y,q2.y) &&min(q1.y,q2.y) <= max(p1.y,p2.y);return ret;
}inline int check_in_box2d(const float *box, const Point &p){//params: (7) [x, y, z, dx, dy, dz, heading]const float MARGIN = 1e-2;float center_x = box[0], center_y = box[1];float angle_cos = cos(-box[6]), angle_sin = sin(-box[6]);  // rotate the point in the opposite direction of boxfloat rot_x = (p.x - center_x) * angle_cos + (p.y - center_y) * (-angle_sin);float rot_y = (p.x - center_x) * angle_sin + (p.y - center_y) * angle_cos;return (fabs(rot_x) < box[3] / 2 + MARGIN && fabs(rot_y) < box[4] / 2 + MARGIN);
}inline int intersection(const Point &p1, const Point &p0, const Point &q1, const Point &q0, Point &ans){// fast exclusionif (check_rect_cross(p0, p1, q0, q1) == 0) return 0;// check cross standingfloat s1 = cross(q0, p1, p0);float s2 = cross(p1, q1, p0);float s3 = cross(p0, q1, q0);float s4 = cross(q1, p1, q0);if (!(s1 * s2 > 0 && s3 * s4 > 0)) return 0;// calculate intersection of two linesfloat s5 = cross(q1, p1, p0);if(fabs(s5 - s1) > EPS){ans.x = (s5 * q0.x - s1 * q1.x) / (s5 - s1);ans.y = (s5 * q0.y - s1 * q1.y) / (s5 - s1);}else{float a0 = p0.y - p1.y, b0 = p1.x - p0.x, c0 = p0.x * p1.y - p1.x * p0.y;float a1 = q0.y - q1.y, b1 = q1.x - q0.x, c1 = q0.x * q1.y - q1.x * q0.y;float D = a0 * b1 - a1 * b0;ans.x = (b0 * c1 - b1 * c0) / D;ans.y = (a1 * c0 - a0 * c1) / D;}return 1;
}inline void rotate_around_center(const Point &center, const float angle_cos, const float angle_sin, Point &p){float new_x = (p.x - center.x) * angle_cos + (p.y - center.y) * (-angle_sin) + center.x;float new_y = (p.x - center.x) * angle_sin + (p.y - center.y) * angle_cos + center.y;p.set(new_x, new_y);
}inline int point_cmp(const Point &a, const Point &b, const Point &center){return atan2(a.y - center.y, a.x - center.x) > atan2(b.y - center.y, b.x - center.x);
}inline float box_overlap(const float *box_a, const float *box_b){// params: box_a (7) [x, y, z, dx, dy, dz, heading]// params: box_b (7) [x, y, z, dx, dy, dz, heading]//    float a_x1 = box_a[0], a_y1 = box_a[1], a_x2 = box_a[2], a_y2 = box_a[3], a_angle = box_a[4];
//    float b_x1 = box_b[0], b_y1 = box_b[1], b_x2 

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

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

相关文章

图片速览 OOD用于零样本 OOD 检测的 CLIPN:教 CLIP 说不

PAPERCODEhttps://arxiv.org/pdf/2308.12213v2.pdfhttps://github.com/xmed-lab/clipn 文章创新 以往由CLIP驱动的零样本OOD检测方法&#xff0c;只需要ID的类名&#xff0c;受到的关注较少。 本文提出了一种新的方法&#xff0c;即CLIP说“不”&#xff08;CLIPN&#xff09;…

nacos使用注册中心—springcloud使用

nacos——springcloud使用 nacos注册中心 文章目录 nacos——springcloud使用nacos注册中心1.Windows安装1.1.下载安装包1.2.解压1.3.端口配置1.4.启动1.5.访问 服务注册到NacosNacos分级存储Nacos的负载均衡服务实例的权重配置环境隔离nacos和Eureka对比 1.Windows安装 开发…

【ros2 control 机器人驱动开发】简单双关节机器人学习-example 1

【ros2 control 机器人驱动开发】简单双关节机器人学习-example 1 文章目录 前言一、RR机器人创建description pkg创建demos pkg 二、创建controller相关创建example pkg 三、测试运行总结 前言 本系列文件主要有以下目标和内容&#xff1a; 为系统、传感器和执行器创建 Har…

【Java不看后悔系列】|面向对象编程|[继承、封装、多态全覆盖]

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏:Java学习系列专栏&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 1.Judging right from wrong (inheritance) 1.A child class inherits everything from its parent class. 2.A child class canno…

web之CSS悬停效果页面设计

参考小米商城的“手机”页面&#xff0c;做出一个“手机”的标签&#xff0c;实现当鼠标悬停在“手机”上时&#xff0c;出现手机系列菜单&#xff1b;当鼠标移走时&#xff0c;菜单页面消失的效果&#xff01; 参考图&#xff1a; 实现代码&#xff1a; <!DOCTYPE html&g…

失业无忧!掌握这四个网站,年收入10-20万!

大家好&#xff01;在职场中&#xff0c;失业可能是每个人都会面临的一种情况。当然&#xff0c;失业并不是终点&#xff0c;而是重新出发的起点。在这个充满机遇的数字时代&#xff0c;利用网络资源来提升自己是再合适不过了。今天&#xff0c;我将介绍四个非常有用的网站&…

Achronix提供由FPGA赋能的智能网卡(SmartNIC)解决方案来打破智能网络性能极限

作者&#xff1a;Achronix 随着人工智能/机器学习&#xff08;AI/ML&#xff09;和其他复杂的、以数据为中心的工作负载被广泛部署&#xff0c;市场对高性能计算的需求持续飙升&#xff0c;对高性能网络的需求也呈指数级增长。高性能计算曾经是超级计算机这样一个孤立的领域&a…

自动化测试知识总结(含资料)

一、自动化测试 自动化测试的定义&#xff1a;使用一种自动化测试工具来验证各种软件测试的需求&#xff0c;它包括测试活动的管理与实施、测试脚本的开发与执行。 自动化测试只是测试工作的一部分&#xff0c;是对手工测试的一种补充; 自动化测试绝不能代替手工测试;多数情况…

世微 APS54085 22W高辉度调光降压恒流芯片 LED驱动IC

产品描述 APS54085 是一款 PWM 工作模式,简单、内置功率 MOS 管&#xff0c;适用于 5-100V输入的高精度降压 LED 恒流驱动芯片。电流2.0A。APS54085 可实现线性调光和 PWM 调光&#xff0c;线性调光有效电压范围 0.52-2.55V.PWM 调光频率范围 100HZ-30KHZ。APS54085 工作频率可…

文件包含的提升刷题

上一篇文章&#xff1a;一篇文章带你入门文件包含-CSDN博客 已经开始入门了文件包含&#xff0c;那现在开始拔高提升刷题&#xff01; 1. 拿到题目后啥也没有&#xff0c;所以也不知道要读取啥文件&#xff0c;那就查看源代码。 直接看if的条件就可以知道一定要设置cookie&a…

花生壳使用记录

添加内网穿透 花生壳升级后&#xff0c;配置内网穿透时提示只能使用https。但其实赠送的两个域名有一个是可以免费配置https的&#xff0c;可以挨个试试 IP指向异常 配置完成内网穿穿透后&#xff0c;提示链接失败&#xff0c;如下 出现上面的原因&#xff0c;是因为我在ap…

如何通过ssh管道传输文件到ubuntu

如何在window系统中&#xff0c;通过ssh将指定的文件传输到ubuntu中呢&#xff1f; 比较常用的有以下种方式&#xff1a; 共享文件夹借助工具&#xff0c; FileZillaMobaxtermWinSCPXshell XFTP samba互传PuTTY pscp 今天主要分享一个使用python脚本搭建的一个&#xff0c;…