【深度学习】YOLO_World-SAM-GraspNet机械臂抓取仿真

 项目演示

GraspNet+YOLO

目录

GraspNet计算抓取姿态

YOLO-World目标检测

SAM图像分割

抓取仿真流程

项目实现(以下步骤均在虚拟环境下执行)

1 环境配置

2 编译并安装

3 下载GraspNet-baseline的权重(训练好的)

4 运行manipulator_grasp项目

5 运行YOLO_World-SAM-GraspNet项目


GraspNet计算抓取姿态

GraspNet能够基于点云数据生成抓取点及其对应的夹抓姿态,并输出置信度最高的结果,确保抓取的可靠性。

YOLO-World目标检测

YOLO-World是一种高效的目标检测模型,能够通过用户提供的文本提示识别任意目标类别。与传统的目标检测模型依赖于预定义的类别不同,YOLO-World 可以通过简单的文本提示,如 “检测飞机” 或 “查找街道上的汽车”,来实现对新物体的检测。

YOLO-World目标检测

SAM图像分割

SAM(Segment Anything Model)能够生成高质量的掩码图。是由MetaAI最新发布的一个图像分割领域的预训练模型。SAM的提出突破了分割界限,极大地促进了计算机视觉基础模型的发展。

SAM图像分割

抓取仿真流程

UR5机械臂通过深度相机获取场景的RGB图像和深度图。使用YOLO-World模型对图像中的待抓取物体进行目标检测,定位物体的边界框。然后利用SAM对检测到的物体进行图像分割,生成高精度的掩码图。深度相机提取物体的三维点云数据,基于点云数据,通过GraspNet模型计算抓取点及其对应的夹抓姿态,并选择置信度最高的结果。最后UR5机械臂根据计算出的夹抓姿态执行抓取动作,完成整个抓取任务。

项目实现(以下步骤均在虚拟环境下执行)

1 环境配置

创建虚拟环境

conda env remove -n mujoco_graspnet
conda create -n mujoco_graspnet python=3.9
conda activate mujoco_graspnet

进入虚拟环境后下载开源manipulator_grasp项目

git clone https://gitee.com/chaomingsanhua/manipulator_grasp.git
cd manipulator_grasp

下载graspnet-baseline项目

GraspNet-Baseline 是一个开源的抓取算法基准模型,它是 GraspNet-1Billion 大规模抓取数据集的基线模型。

git clone https://github.com/graspnet/graspnet-baseline.git
cd graspnet-baseline

修改requirements.txt

sudo gedit requirements.txt 

这里要指定numpy的安装版本为1.23.4。删除torch,我们后面自行安装

保存后执行安装指令

pip install -r requirements.txt

安装torch等所需的环境包

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
pip install spatialmath-python==1.1.14
pip install roboticstoolbox-python==1.1.1
pip install modern-robotics==1.1.1
pip install mujoco==3.3.1

2 编译并安装

2.1 编译并安装PointNet++自定义算子

  • PointNet++是处理3D点云的经典神经网络,需要自定义CUDA算子实现高效采样和特征聚合
  • VoteNet是基于PointNet++的3D目标检测框架
cd pointnet2
python setup.py install
cd ../

安装时发现报错:The detected CUDA version mismatches the version that was used to compile PyTorch.具体解决参考这篇文章:

报错解决:The detected CUDA version mismatches the version that was used to compile PyTorch._the detected cuda version (10.1) mismatches the ve-CSDN博客文章浏览阅读239次,点赞3次,收藏2次。Anaconda虚拟环境中,PyTorch版本与系统CUDA版本不匹配时,推荐在Conda虚拟环境中安装CUDA。确认问题已解决,这种方法避免了因Ubuntu版本限制而无法安装低版本CUDA的问题。_the detected cuda version (10.1) mismatches the version that was used to com https://blog.csdn.net/agentssl/article/details/147960670?spm=1001.2014.3001.5502若出现报错“cuda_runtime_api.h: No such file or directory.”参考这篇文章:报错解决:cuda_runtime_api.h: No such file or directory-CSDN博客文章浏览阅读242次,点赞9次,收藏5次。在conda虚拟环境中使用gcc编译依赖CUDA时报错fatal error: cuda_runtime_api.h: No such file or directory:使用conda安装的cuda是的,而精简版的cuda没有办法编译,会缺少头文件。缺少的头文件指的就是这部分提到的。而NVIDIA原版的CUDA Toolkit是完整版的CUDA,可以进行编译,且不缺少头文件。:将系统CUDA库的路径加入系统环境变量,使用系统CUDA的cuda_runtime_api.h(此解决方法同样适合。 https://blog.csdn.net/agentssl/article/details/147989459?spm=1001.2014.3001.5502

编译并安装基于PyTorch CUDA实现的k-最近邻(k-NN)算子:

  • k-NN算子:用于快速计算数据点之间最近邻关系的算法模块
  • CUDA加速:利用NVIDIA显卡进行并行计算加速
  • PyTorch扩展:为深度学习框架添加自定义C++/CUDA操作
cd knn
python setup.py install
cd ../

安装graspnetAPI工具包

git clone https://github.com/graspnet/graspnetAPI.git
cd graspnetAPI

修改setup.py,将sklearn替换为scikit-learn

sudo gedit setup.py

 

修改后开始安装

pip install .
cd ../

3 下载GraspNet-baseline的权重(训练好的)

在manipulator_grasp文件夹新建logs/log_rs文件夹,将下载好的权重checkpoint-rs.tar放进log_rs,如图

4 运行manipulator_grasp项目

进入manipulator_grasp文件夹,运行主函数

python main.py

出现报错

Traceback (most recent call last): File "/home/song/hjx/manipulator_grasp/main.py", line 19, in <module> from graspnet_dataset import GraspNetDataset File "/home/song/hjx/manipulator_grasp/graspnet-baseline/dataset/graspnet_dataset.py", line 12,https://download.pytorch.org/whl/torch_stable.html ModuleNotFoundError: No module named 'torch._six'

修改graspnet-baseline/dataset/graspnet_dataset.py 即可。

# 原代码(旧版PyTorch)
from torch._six import container_abcs
# 修改为(适配PyTorch 2.x)
import collections.abc as container_abcs

修改后再次运行

关闭Open3D窗口,机械臂开始执行抓取,如下图所示

5 运行YOLO_World-SAM-GraspNet项目

安装额外的环境包

pip install ultralytics==8.3.98
pip install git+https://github.com/openai/CLIP.git

下载开源代码

这里感谢大佬分享https://pan.baidu.com/s/1NNeS5C_9irYVFHOGCWR0ZQ 提取码: rri4

运动代码过程中发现苹果抓取效果不是特别好,初步认为是因为位置摆放太远

修改苹果位置:

通过VScode打开项目,修改红框位置即可

进入YOLO_World-SAM-GraspNet文件夹运行:

python main_yoloWorld_sam.py

 在命令终端输入待抓取物体,第一次运行命令会下载模型,如图所示

随后会生成目标检测结果、SAM掩码图以及预测抓取姿态

项目成功运行!

制作不易,对您有帮助的话就点赞收藏支持下,感谢感谢~

参考文章

(二)Graspnet在mujoco的仿真复现(操作记录)_mujoco机器人仿真复现-CSDN博客

### YOLO 结合 SAM 的实现与教程 YOLOSAM 是两种不同的计算机视觉技术,分别专注于目标检测和语义/实例分割。将两者结合起来可以显著提升模型性能并扩展其应用范围。以下是关于如何结合这两种技术的相关信息。 #### 技术背景 YOLO(You Only Look Once)是一种高效的目标检测框架,能够快速识别图像中的对象及其边界框位置[^3]。而 SAM(Segment Anything Model),尤其是最新版本 SAM2,则提供了一种强大的工具来完成复杂的像素级分割任务[^1]。通过集成这两个模型,可以在保持高效率的同时获得更精确的结果。 #### 实现方式概述 一种常见的做法是在使用 YOLO 进行初步的对象定位之后,再利用 SAM 对这些区域执行进一步的精细分割操作。具体来说: - 首先运行 YOLO 来获取感兴趣区域(ROI),即每个预测出来的矩形框坐标; - 接着把这些 ROI 输入给预训练好的 SAM 或者自定义调整后的 SAM 变体作为提示(prompt)数据源之一; - 最终由 SAM 输出对应于原始输入图像上各个物体轮廓更加细致准确得多边形式表示法——掩码(mask)[^4]。 此过程可以通过编写脚本自动化处理大批量文件夹内的所有图片样本,并保存转换后的标注格式供下游机器学习算法继续训练之需所用。 #### 示例代码片段 下面展示了一个简单的 Python 脚本来演示上述流程的一个简化版例子: ```python from ultralytics import YOLO import torch from segment_anything import sam_model_registry, SamAutomaticMaskGenerator def load_yolo(): model = YOLO('yolov8n.pt') # 加载官方提供的轻量化版本权重文件 return model def init_sam(device='cuda'): checkpoint_path = "./sam_vit_h_4b8939.pth" model_type = "vit_h" sam = sam_model_registry[model_type](checkpoint=checkpoint_path).to(device=device) mask_generator = SamAutomaticMaskGenerator(sam) return mask_generator if __name__ == "__main__": yolo = load_yolo() sam_mask_gen = init_sam() img_path = 'test.jpg' results = yolo(img_path) boxes = results[0].boxes.xyxy.cpu().numpy() masks = [] for box in boxes: x_min, y_min, x_max, y_max = map(int,box.tolist()) cropped_img = cv2.imread(img_path)[y_min:y_max,x_min:x_max] generated_masks = sam_mask_gen.generate(cropped_img) masks.append(generated_masks) ``` 注意这段伪代码仅作概念验证用途,在实际部署前可能还需要考虑更多细节因素比如错误捕获机制等等[^5]。 #### 性能考量 当把两个独立开发出来各自擅长不同方面的深度神经网络组合起来的时候,不可避免会遇到一些挑战,例如计算资源消耗增加以及潜在的时间延迟等问题。因此建议开发者们根据自己的项目需求权衡利弊后再决定是否采用这种方法论[^6]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八宝粥行动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值