前言

    由于毕设还有横向的需要,在导师的推荐下开始复现这篇基于VoteNet的焊接平板识别网络PanelNet,这个网络主要解决的问题是采用VoteNet网络根据三维点云对焊接过程中的焊接平板进行识别。由于实验室的显卡是RTX3080,最低只能装CUDA11和pytorch1.7,所以在搭建VoteNet和PanelNet过程中有各种bug,也比较麻烦,特开此文记录。


一、代码下载

github链接:

GitHub - ikh-innovation/roboweldar-weld-seam-detection: Proposal of candidate weld seams from 3D models of welding panel configurations


二、操作步骤

1.简要介绍

    VoteNet在2019年于论文“Deep Hough Voting for 3D Object Detection in Point Clouds“中提出,由于之前的方法受2D目标检测影响很大,但是三维点云和图片原始感知到的数据形式是不同的,所以该方法回归第一性原则解决问题。PanelNet对VoteNet进行改进,用于焊接平板的识别

论文链接

2.环境配置

2.1GPU环境配置

Anaconda 环境配置(五)——Linux下 anaconda 安装与python环境配置_微知girl的博客-CSDN博客

Nvidia Driver

ubuntu18.04 安装mx250显卡驱动(超详细) - 灰信网(软件开发博客聚合)

这里多提一嘴,ubuntu20.04 RTX 3080 显卡安装建议选择“软件和更新”里“附加驱动”的“使用NVIDIA driver metapackage 来自 nvidia-driver-515(专有)” 安装,简单快捷,安装官网的驱动可能会黑屏。

CUDA(这里选择CUDA11.0)

CUDA Toolkit 11.0 Update 2 Downloads | NVIDIA Developer

安装cuDNN8.0.5:

ubuntu18.04卸载cuda和cudnn, 重装10.2版本cuda和cudnn_太阳下大黄花的博客-CSDN博客_ubuntu卸载cudnn

Ubuntu20.04下CUDA、cuDNN的详细安装与配置过程,亲测试可用(图文)_这个昵称叫什么好呢的博客-CSDN博客_ubuntu cuda安装

2.2 VoteNet虚拟环境配置

conda create -n ikh_weldrobot python=3.6
conda activate ikh_weldrobot
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

重点是要用pip安装,不要用conda安装!因为用conda安装会安装ninja并且卸载不掉。

RTX3080算力太高,和cuda11.0不匹配,需要修改一下:

sudo gedit ~/.bashrc

添加如下命令:

export TORCH_CUDA_ARCH_LIST="8.0"

    VoteNet是PointNet类方法的延续,简单高效,直接处理点云,所以为了实现VoteNet需要首先实现PointNet2。

由于PointNet2原始搭建环境在低版本pytorch,因此在pytorch1.7复现需要修改一些函数的用法,参照下文:

pointnet2.pytorch(pointnet++)运行 python setup.py install 相关报错解决办法:_张无忌忌的博客-CSDN博客

进入votenet文件夹下的pointnet2文件夹,运行如下命令:

python setup.py install
pip install -r requirements
pip install matplotlib opencv-python plyfile 'trimesh>=2.35.39,<2.35.40' 'networkx>=2.2,<2.3'
下面这个应该不需要
# pip install numpy>=1.18.5 open3d>=0.10.0.0 trimesh>=2.35.39 matplotlib>=2.2.5 plyfile>=0.7.2 scipy>=1.4.1 tensorflow==2.2.0 opencv-python>=4.3.0.36 setuptools>=49.2.0 pillow>=6.2.2

至此,VoteNet的相关依赖已经基本配置完成,运行下列代码可以测试配置是否成功。

cd ..
python models/votenet.py

成功输出的前几行应该是这样的:

Dataset has not been prepared. Use a random sample.
sa1_inds tensor([[    0, 18378,  2760,  ..., 10087,  9941,  6935]], device='cuda:0',dtype=torch.int32)
sa1_xyz tensor([[[0.5433, 0.9419, 0.0351],[0.0507, 0.0205, 0.9666],[0.9723, 0.5971, 0.9659],...,[0.2278, 0.0654, 0.2796],[0.2423, 0.6431, 0.5632],[0.7706, 0.7663, 0.7406]]], device='cuda:0')

下载预训练模型和样例点云放在votenet文件夹(/votenet/demo_files),并运行demo:

python demo.py

这里会报错

Traceback (most recent call last):File "demo.py", line 100, in <module>pred_map_cls = parse_predictions(end_points, eval_config_dict)File "/home/lin/welding_robot/ikh-innovation/roboweldar-weld-seam-detection-master/votenet/models/ap_helper.py", line 103, in parse_predictionsif len(pc_in_box) < config_dict['min_points_2b_empty']:
KeyError: 'min_points_2b_empty'

翻了一下代码,发现config_dict这个字典变量压根就没定义过min_points_2b_empty这个键,于是翻了翻github其它votenet的代码,解决方案如下:

if len(pc_in_box) < config_dict['min_points_2b_empty']:
改成:
if len(pc_in_box) < 5:

这样就可以运行了,原作者可能没改掉这个bug,虽然我也懒得留在github留issues了,原谅my poor English。

点云分割结果存储在demo_files/sunrgbd_results文件夹下,新建一个python文件visualization.py用Open3d进行可视化,写入如下代码(记得修改路径,最好是绝对路径):

import open3d as o3d
import numpy as np
pcd=o3d.io.read_point_cloud("/path/to/project/demo_files/sunrgbd_results/0000_pc.ply",format='ply')
ppoints=np.asarray(pcd.points)
pcolors=np.asarray(pcd.colors)
o3d.visualization.draw_geometries([pcd])

运行后得到如下结果:

2.3PanelNet测试

下面开始测试PanelNet效果,在测试之前要改个bug,

打开votenet/panelnet/panel_data.py文件:

mesh, labelboxes = generate_welding_area(panels_num=np.random.randint(2, 5), hpanels_num=np.random.randint(1, 3))
改成:
pcd, mesh, labelboxes = generate_welding_area(panels_num=np.random.randint(2, 5), hpanels_num=np.random.randint(1, 3))

在votenet文件夹下运行如下代码对焊接环境进行三维点云分割:

python inference_old.py --checkpoint_dir=weights_checkpoint
# inference.py 有个变量未定义,可以自己手动输入,不得不说这个作者心很大。

分割结果生成在votenet/panelnet_inference_results文件夹下,利用visualization.py文件修改文件路径进行可视化(目标结果为0000_pc.ply)。

原图:

分割结果:

至此,PanelNet的复现基本完成了,之后进一步的操作就是下载训练集以及自己制作训练集进行训练,这里就跳过了,毕竟数据集采集有点麻烦。


总结

本文基本介绍了焊接平板识别网络PanelNet的配置,主要包括VoteNet和PointNet的配置,实现了在复杂环境中分割焊接平板点云。

RTX3080复现基于VoteNet的焊接平板识别网络PanelNet相关推荐

  1. 基于MobileNet的人脸表情识别系统(MATLAB GUI版+原理详解)

    摘要:本篇博客介绍了基于MobileNet的人脸表情识别系统,支持图片识别.视频识别.摄像头识别等多种形式,通过GUI界面实现表情识别可视化展示.首先介绍了表情识别任务的背景与意义,总结近年来利用深度 ...

  2. 经典论文复现 | 基于标注策略的实体和关系联合抽取

    过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含"伪代码".这是今年 AAAI ...

  3. 基于深度神经网络的中药材识别

    摘 要 近年来,受到我国国民经济发展与社会财富积累增速加快的影响,人们对自己的身体健康也越来越重视,很多的人都选择在服用中草药来治疗疾病.改善体质,因此,我国的中药材行业在这一段时间内也迎来了蓬勃的发 ...

  4. 基于matlab的蓝色车牌识别(绪论)

    目录 绪论 一 车牌识别系统的工作原理详解 二 实现的内容 三 实现的依据 转载请注明出处,谢谢! 绪论 光阴荏苒,岁月如歌,三年的读研时间已过去了两年,马上就要面临找工作,是时候写点技术博客备着了. ...

  5. 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习

    这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Web渗透的第一步工作,涉及网站信息.域名信息.端口信息.敏感信息及指纹 ...

  6. 基于深度学习的人脸识别综述

    本文转载自 https://xraft.github.io/2018/03/21/FaceRecognition/ (作者:Caleb Ge (葛政)),如有侵权请告知删除. (下文中的"我 ...

  7. 基于多粒度语义交互理解网络的幽默等级识别

    论文阅读 2020 1. 解决问题 将幽默等级识别为自然语言推理任务,将幽默文本划分为铺垫和笑点两部分,提出对两者之间的关系进行建模可以显著提升模型识别幽默等级的性能. 2. 创新点(贡献) 本文基于 ...

  8. 基于javaGUI的文档识别工具制作

    基于javaGUI的文档识别工具制作 对于某些文本,其中富含了一些标志,需要去排除,以及去获得段落字数,以下是我个人写的一个比较简单的文档识别工具,含导入文件.导出文件以及一个简单的识别功能. 1.功 ...

  9. 基于深度学习的口罩识别与检测PyTorch实现

    基于深度学习的口罩识别与检测PyTorch实现 1. 设计思路 1.1 两阶段检测器:先检测人脸,然后将人脸进行分类,戴口罩与不戴口罩. 1.2 一阶段检测器:直接训练口罩检测器,训练样本为人脸的标注 ...

最新文章

  1. R可视化绘制指数分布(Exponential Distribution)
  2. Discuz x3论坛使用CDN后获取真实IP的解决方法
  3. linux c 定时器
  4. 一个SQL Server Sa密码破解的存储过程
  5. Spring Cloud 微服务架构的五脏六腑!
  6. SQL Server 装载 msxmlsql.dll 失败的解决办法
  7. GCC 用 C++ 来编译(酷壳)
  8. Solartimes共识——PowerDesigner设计——引用的命名
  9. python报表自动化系列 - 拆分一个字符串中的数字和字母
  10. aria-hidden读屏
  11. php study 后门,phpStudy后门简要分析
  12. jqgrid 获取所有行数据
  13. python appium 并行多设备_appium 多个设备同时执行
  14. wireshark分析UDP数据包
  15. anaconda 安装Mosek
  16. 基于新浪微博api的微博分享功能实现
  17. Windows开机自动运行.py文件
  18. 2020.10-2021.01前端开发部分总结
  19. 初学者如何选购入门民谣吉他
  20. 新手小白适合学习什么编程语言

热门文章

  1. 后盾vip织梦万能仿站系列视频教程
  2. 3.5、点对点协议 PPP
  3. Max Sum Plus Plus(dp解题)
  4. 单变量微积分笔记23——部分分式
  5. Linux虚拟机获取不到ip地址的解决办法
  6. 用牛顿法求正数的开方值
  7. I love English
  8. 重定向与请求转发的具体讲解
  9. 【Android-Java】随机数产生,使用SecureRandom替代Random
  10. 常见的中小型UPS机房一体监控及告警解决方案