pybullet-GGCNN神经网络搭建及训练(四)

目录

环境配置

torch安装 

再安装tensorboard

 还有tensorboardX

还有torchsummary

 scipy

程序介绍

 主程序理解

超参数部分 

保存器

 数据集加载

grasp.data

加载网络

ggcnn2

优化器

打印网络结构

训练前运行

 训练前运行结果

训练

train

进到train函数里看一下 

损失计算

统计损失

 反向传播

 日志

 测试

 评估

保存模型 

 运行

 tensrboard使用

tensorboard运行

tensorboard报错解决

 总结


环境配置

或者直接看这这篇用github上的ggcnn环境也可以

 pybullet 康奈尔数据集转换(四+)训练前看_啥也不是的py人的博客-CSDN博客

推荐配置

py3.7

torch安装 

 Anaconda+Torch(gpu版)极速下载安装方法 - 知乎

进入pytorch官网选择对应环境用命令行安装 

PyTorch

 我找的是这个用的是cpu版本

# CPU Only
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cpuonly -c pytorch

再安装tensorboard

pip install tensorboard==2.9.0

 还有tensorboardX

pip install tensorboardX

还有torchsummary

pip install torchsummary

 scipy

我是已经安装过了scipy但是还是出现了报错问题

 

 google后找到了一个方法

第一步

conda remove icc_rt --force

第二步

conda install icc_rt --no-deps

程序介绍

文件主体包含几个文件夹和两个编码文件

 

主程序就是train_ggcnn.py

就是用它来训练

ckpt保存的是训练好的模型

data是保存用来测试平面抓取的图像

models是存储的网络

common.py是一个后处理文件

utils主要是数据加载类的编码 

 

 其中

该文件处理的是cornell数据集的内容

因为cornell没有提供.tiff格式的文件而是点云形式的.txt文件

 见下图(其实就是点云文件)

 该程序就是把点云格式文件转换成.tiff格式文件

以及评估性能的文件

 主程序理解

 下图为主程序

 看run()函数

def run():
    # 设置随机数种子
    # setup_seed(2)

可以设置随机数种子方便复现

这里注释掉了

Python seed() 函数 | 菜鸟教程

超参数部分 

 然后读取超参数

args = parse_args()

网络架构选择 

 可以选择读取ggcnn或者ggcnn2

设置之前标注好的数据集路径

数据集制作如下 

pybullet-GGCNN数据集制作(三)_啥也不是的py人的博客-CSDN博客

我的存放在这个路径

 

    # 训练超参数
    parser.add_argument('--batch-size', type=int, default=2, help='Batch size')
    parser.add_argument('--epochs', type=int, default=1000, help='Training epochs')
    parser.add_argument('--lr', type=float, default=1e-3, help='学习率')
    parser.add_argument('--weight-decay', type=float, default=0, help='权重衰减 L2正则化系数')
    parser.add_argument('--num-workers', type=int, default=2, help='Dataset workers')  # pytorch 线程

batch size就是把数据分成几批的意思 

机器学习中的batch_size是什么?_勤奋的大熊猫的博客-CSDN博客_batch size是什么意思

 weight-decay就是正则化系数防止过拟合

【神经网络】权重衰减(weight-decay)_ZSYL的博客-CSDN博客_权重衰减

 用于把矩形图像修改为正方形图像

--num-workers是pytorch的线程数,线程数越多训练也就越快

    # 抓取表示超参数
    parser.add_argument('--output-size', type=int, default=360, help='output size')

 以下是设置的保存地址

   # 保存地址
    parser.add_argument('--outdir', type=str, default='output', help='Training Output Directory')
    parser.add_argument('--modeldir', type=str, default='models', help='model保存地址')
    parser.add_argument('--logdir', type=str, default='tensorboard', help='summary保存文件夹')
    parser.add_argument('--imgdir', type=str, default='img', help='中间预测图保存文件夹')
    parser.add_argument('--max_models', type=int, default=3, help='最大保存的模型数')

tensorboard是可视化训练工具 

注:因为每一个epoch都会有一个模型如果都保存的话就太大了

这里设置成只保存三个 最新的epoch的模型结果

 这里选择跑的设备

    # device
    parser.add_argument('--device-name', type=str, default='cpu', choices=['cpu', 'cuda:0'], help='是否使用GPU')
    # description

这里改成用gpu跑,cuda后改成1或者2

 这里是设置保存文件夹的名字

    # description
    parser.add_argument('--description', type=str, default='hx_test', help='Training description')

 这里是防止突发情况,可以选择之前的网络进行训练

    # 从已有网络继续训练
    parser.add_argument('--goon-train', type=bool, default=False, help='是否从已有网络继续训练')
    parser.add_argume
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
抓取数据集使用康奈尔数据集以及提花数据集;基于kinova机器人搭建实际抓取环境;进行机械臂的手眼标定(Eye-in-Hand);基于pybullet平台仿真实现多个目标… 卷积神经网络(Convolutional Neural Network, CNN)是一种专门针对图像、视频等结构化数据设计的深度学习模型,它在计算机视觉、语音识别、自然语言处理等多个领域都有广泛应用。CNN的核心设计理念源于对生物视觉系统的模拟,尤其是大脑皮层中视觉信息处理的方式,其主要特点包括局部感知、权重共享、多层级抽象以及空间不变性。以下是CNN技术的详细介绍: ### **1. 局部感知与卷积操作** **卷积层**是CNN的基本构建块,它通过使用一组可学习的滤波器(或称为卷积核)对输入图像进行扫描。每个滤波器在图像上滑动(卷积),并以局部区域(感受野)内的像素值与滤波器权重进行逐元素乘法后求和,生成一个输出值。这一过程强调了局部特征的重要性,因为每个滤波器仅对一小部分相邻像素进行响应,从而能够捕获图像中的边缘、纹理、颜色分布等局部特征。 ### **2. 权重共享** 在CNN中,同一滤波器在整个输入图像上保持相同的权重(参数)。这意味着,无论滤波器在图像的哪个位置应用,它都使用相同的参数集来提取特征。这种权重共享显著减少了模型所需的参数数量,增强了模型的泛化能力,并且体现了对图像平移不变性的内在假设,即相同的特征(如特定形状或纹理)不论出现在图像的哪个位置,都应由相同的滤波器识别。 ### **3. 池化操作** **池化层**通常紧随卷积层之后,用于进一步降低数据维度并引入一定的空间不变性。常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和池化层堆叠在一起,形成深度网络结构。随着网络深度的增加,每一层逐渐提取更复杂、更抽象的特征。底层可能识别边缘、角点等低级特征,中间层识别纹理、部件等中级特征,而高层可能识别整个对象或场景等高级语义特征。这种层级结构使得CNN能够从原始像素数据中自动学习到丰富的表示,无需人工设计复杂的特征。 ### **5. 激活函数与正则化** CNN中通常使用非线性激活函数(如ReLU、sigmoid、tanh等)来引入非线性表达能力,使得网络能够学习复杂的决策边界。为了防止过拟合,CNN常采用正则化技术,如L2正则化(权重衰减)来约束模型复杂度,以及Dropout技术,在训练过程中随机丢弃一部分神经元的输出,以增强模型的泛化性能。 ### **6. 应用场景** CNN在诸多领域展现出强大的应用价值,包括但不限于: - **图像分类**:如识别图像中的物体类别(猫、狗、车等)。 - **目标检测**:在图像中定位并标注出特定对象的位置及类别。 - **语义分割**:对图像中的每个像素进行分类,确定其所属的对象或背景类别。 - **人脸识别**:识别或验证个体身份。 - **图像生成**:通过如生成对抗网络(GANs)等技术创建新的、逼真的图像。 - **医学影像分析**:如肿瘤检测、疾病诊断等。 - **自然语言处理**:如文本分类、情感分析、词性标注等,尽管这些任务通常结合其他类型的网络结构(如循环神经网络)。 ### **7. 发展与演变** CNN的概念起源于20世纪80年代,但其影响力在硬件加速(如GPU)和大规模数据集(如ImageNet)出现后才真正显现。经典模型如LeNet-5用于手写数字识别,而AlexNet、VGG、GoogLeNet、ResNet等现代架构在图像识别竞赛中取得突破性成果,推动了CNN技术的快速发展。如今,CNN已经成为深度学习图像处理领域的基石,并持续创新,如引入注意力机制、残差学习、深度可分离卷积等先进思想。 综上所述,卷积神经网络通过其独特的局部感知、权重共享、多层级抽象等特性,高效地从图像数据中提取特征并进行学习,已成为解决图像和视频处理任务不可或缺的工具,并在众多实际应用中取得了卓越的效果。
pybullet中,可以使用`applyExternalForce()`函数将一个力矢量施加到一个物体上。该函数的第一个参数是物体的ID,第二个参数是施加力的作用点的世界坐标系下的位置,第三个参数是施加的力矢量的大小,第个参数是施加力的方向向量。如果想要在特定方向上施加位移,可以将力矢量的大小设置为位移的大小,方向向量设置为位移方向的单位向量。 例如,假设想要将物体沿着其x轴正方向上移动1个单位,可以使用以下代码: ```python import pybullet as p import numpy as np # 创建物体 object_id = p.loadURDF("path/to/urdf/file.urdf", [0, 0, 0]) # 获取物体当前位姿 position, orientation = p.getBasePositionAndOrientation(object_id) # 计算沿着x轴正方向的位移向量 direction_vector = np.array([1, 0, 0]) rotation_matrix = np.array(p.getMatrixFromQuaternion(orientation)).reshape(3, 3) displacement_vector = np.dot(rotation_matrix, direction_vector) # 施加位移 p.applyExternalForce(object_id, position, displacement_vector, [0, 0, 0]) ``` 在此示例中,`getBasePositionAndOrientation()`函数用于获取物体的当前位置和方向。然后,使用`getMatrixFromQuaternion()`函数将元数表示的方向转换为旋转矩阵表示,以便可以将位移向量旋转到物体的本地坐标系中。最后,使用`applyExternalForce()`函数将位移向量施加到物体上。 注意,施加的力矢量的大小应该根据需要施加的位移大小进行调整。如果需要施加更大或更小的位移,请调整力矢量的大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值