anygrap复现结果

本文介绍了GraspNet-1Billion数据集,包含大量RGB-D图像,用于训练和评估物体抓取模型。文章详细描述了数据集特点、模型加载和处理过程,以及如何进行碰撞检测和可视化。此外,还提到了在实际应用中可能需要进行目标检测来适应特定场景的要求。
摘要由CSDN通过智能技术生成

https://graspnet.net/

https://github.com/graspnet/graspnet-baseline

https://blog.csdn.net/weixin_48319333/article/details/129640460

0.论文

graspnet

https://www.bilibili.com/video/BV1av411A7wN/?spm_id_from=333.337.search-card.all.click&vd_source=3aec03706e264c240796359c1c4d7ddc 作者视频b站

GraspNet-1Billion 数据集

  • 规模:这个数据集包含了超过 10 亿个抓取姿态,得名“1Billion”。它由 97,280 张 RGB-D 图像组成,这些图像是从 190 多个不同的杂乱场景中捕获的。
  • 内容:数据集中的图像涵盖了从不同视角观察的各种物体组合。88 个不同的物体被精确地建模为 3D 网格模型,并在每个场景中密集标注了物体的 6D pose(位置和方向)以及抓取姿态。
  • 多样性:物体集合包括从 YCB 数据集中选取的适合抓取的物体、DexNet 2.0 中的对抗性物体,以及 GraspNet 研究者自行收集的物体,涵盖了各种日常物品。

demo复现

自己的数据集测试demo

parser = argparse.ArgumentParser()
parser.add_argument('--checkpoint_path', required=True, help='Model checkpoint path')
parser.add_argument('--num_point', type=int, default=20000, help='Point Number [default: 20000]')
parser.add_argument('--num_view', type=int, default=300, help='View Number [default: 300]')
parser.add_argument('--collision_thresh', type=float, default=0.01, help='Collision Threshold in collision detection [default: 0.01]')
parser.add_argument('--voxel_size', type=float, default=0.01, help='Voxel Size to process point clouds before collision detection [default: 0.01]')
cfgs = parser.parse_args()


def get_net():
    # 模型初始化+读取权重
    net = GraspNet(input_feature_dim=0, num_view=cfgs.num_view, num_angle=12, num_depth=4,
            cylinder_radius=0.05, hmin=-0.02, hmax_list=[0.01,0.02,0.03,0.04], is_training=False)
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    net.to(device)
    # Load checkpoint
    checkpoint = torch.load(cfgs.checkpoint_path)
    net.load_state_dict(checkpoint['model_state_dict'])
    start_epoch = checkpoint['epoch']
    print("-> loaded checkpoint %s (epoch: %d)"%(cfgs.checkpoint_path, start_epoch))
    # set model to eval mode
    net.eval()
    return net

def get_and_process_data(data_dir):
    # 读取数据:rgb,dep,mask,meta,内参,深度因子
    color = np.array(Image.open(os.path.join(data_dir, 'color.png')), dtype=np.float32) / 255.0
    depth = np.array(Image.open(os.path.join(data_dir, 'depth.png')))
    workspace_mask = np.array(Image.open(os.path.join(data_dir, 'workspace_mask.png')))
    meta = scio.loadmat(os.path.join(data_dir, 'meta.mat'))
    intrinsic = meta['intrinsic_matrix']
    factor_depth = meta['factor_depth']

    # generate cloud
    camera = CameraInfo(1280.0, 720.0, intrinsic[0][0], intrinsic[1][1], intrinsic[0][2], intrinsic[1][2], factor_depth)
    cloud = create_point_cloud_from_depth_image(depth, camera, organized=True)

    # get valid points
    mask = (workspace_mask & (depth > 0))
    cloud_masked = cloud[mask]
    color_masked = color[mask]

    # sample points
    if len(cloud_masked) >= cfgs.num_point:
        idxs = np.random.choice(len(cloud_masked), cfgs.num_point, replace=False)
    else:
        idxs1 = np.arange(len(cloud_masked))
        idxs2 = np.random.choice(len(cloud_masked), cfgs.num_point-len(cloud_masked), replace=True)
        idxs = np.concatenate([idxs1, idxs2], axis=0)
    cloud_sampled = cloud_masked[idxs]
    color_sampled = color_masked[idxs]

    # convert data
    cloud = o3d.geometry.PointCloud()
    cloud.points = o3d.utility.Vector3dVector(cloud_masked.astype(np.float32))
    cloud.colors = o3d.utility.Vector3dVector(color_masked.astype(np.float32))
    end_points = dict()
    cloud_sampled = torch.from_numpy(cloud_sampled[np.newaxis].astype(np.float32))
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    cloud_sampled = cloud_sampled.to(device)
    end_points['point_clouds'] = cloud_sampled
    end_points['cloud_colors'] = color_sampled

    return end_points, cloud

def get_grasps(net, end_points):
    # 前向传播
    with torch.no_grad():
        end_points = net(end_points)
        grasp_preds = pred_decode(end_points)
    gg_array = grasp_preds[0].detach().cpu().numpy()
    gg = GraspGroup(gg_array)
    return gg

def collision_detection(gg, cloud):
    mfcdetector = ModelFreeCollisionDetector(cloud, voxel_size=cfgs.voxel_size)
    collision_mask = mfcdetector.detect(gg, approach_dist=0.05, collision_thresh=cfgs.collision_thresh)
    gg = gg[~collision_mask]
    return gg

def vis_grasps(gg, cloud):
    gg.nms()
    gg.sort_by_score()
    gg = gg[:50]
    grippers = gg.to_open3d_geometry_list()
    o3d.visualization.draw_geometries([cloud, *grippers])

def demo(data_dir):
    net = get_net()                                           # 模型初始化+读取权重
    end_points, cloud = get_and_process_data(data_dir)        # 读取数据+预处理
    gg = get_grasps(net, end_points)                          # 前向传播
    if cfgs.collision_thresh > 0:                             # 碰撞检测
        gg = collision_detection(gg, np.array(cloud.points)) 
    vis_grasps(gg, cloud)                                     # 可视化

if __name__=='__main__':
    data_dir = 'doc/example_data'
    demo(data_dir)

他有一个mask,把结果限定在桌面内部

好像抓不了小目标

还得先做个目标检测才行,应该是去背景检测,或者提前限定要物体在图里面的范围,因为他们的相机是在手上的,我们是胸口

分数top10:

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ms09-001是指2009年发布的微软安全公告编号为MS09-001的漏洞。该漏洞存在于Windows操作系统中的一种文件传输协议服务中,黑客可以利用该漏洞来执行恶意代码或者拒绝服务攻击。 复现结果是指通过模拟攻击条件,重新演示并验证该漏洞的存在。在ms09-001复现过程中,首先需要构建一个与漏洞相关的实验环境。这个环境通常是在实验室或虚拟机中搭建的,其中包括运行受影响版本的Windows操作系统以及相关的文件传输协议服务。 接下来,我们需要利用已经公开的漏洞利用代码或工具来进行攻击。这些工具可能是通过网络发送特定的恶意请求或者经过精心设计的恶意文件。攻击工具利用漏洞中的缺陷,向目标系统发送恶意数据,从而实现攻击的目标。 在成功攻击目标系统后,我们应该能够观察到系统行为的变化。这可能包括系统崩溃、服务停止响应、关键数据泄漏等。此外,我们还可以通过检查系统的日志文件或使用安全监测工具来确认漏洞攻击的成果。 最后,我们需要对攻击进行报告和分析。通过记录攻击的过程和结果,我们可以更好地了解该漏洞的工作原理,并采取相应的安全措施来修补漏洞或缓解其可能带来的风险。 总之,通过ms09-001复现,我们可以验证该漏洞的存在,并更好地了解其可能对系统安全造成的影响。这有助于我们及时采取措施来保护系统免受恶意攻击的威胁。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值