逐行阅读GG-CNN抓取网络架构:编码器-解码器6层卷积与4个输出头解析

📅 2026/8/22 14:30:46
逐行阅读GG-CNN抓取网络架构:编码器-解码器6层卷积与4个输出头解析
逐行阅读GG-CNN抓取网络架构编码器-解码器6层卷积与4个输出头解析【免费下载链接】ggcnnGenerative Grasping CNN from Closing the Loop for Robotic Grasping: A Real-time, Generative Grasp Synthesis Approach (RSS 2018)项目地址: https://gitcode.com/gh_mirrors/gg/ggcnnGG-CNNGenerative Grasping CNN生成式抓取卷积神经网络是一个轻量级、全卷积的机器人抓取网络输入一张深度图它会在每个像素上同时预测抓取质量、抓取角度和夹爪宽度从而实现对抓取的实时闭环控制。本文基于开源仓库 gg/ggcnn 的 PyTorch 实现带你逐行读懂 GG-CNN 抓取网络架构——编码器-解码器的 6 层卷积、4 个输出头分别做什么以及原始输出如何变成一条真正的抓取指令。一分钟了解 GG-CNN 抓取网络 传统抓取算法通常先生成大量候选抓取再逐个检测评分速度很慢。GG-CNN 的做法是一步到位生成式Generative一次前向推理直接输出整张抓取质量图单通道深度图输入对 RGB 相机依赖低对深度相机友好全卷积结构无全连接层任意尺寸输入都能处理单次推理仅几毫秒级它的核心思想在深度图的每一个像素上都回答三个问题——这里好不好抓往哪个方向抓夹爪开多大。网络整体结构3 层编码器 3 层解码器打开 models/ggcnn.py 文件整个网络只有几十行代码结构一目了然filter_sizes [32, 16, 8, 8, 16, 32] kernel_sizes [9, 5, 3, 3, 5, 9] strides [3, 2, 2, 2, 2, 3]三组超参数数组恰好对应 6 个卷积层前 3 个是编码器下采样后 3 个是解码器上采样呈对称的 U 型结构。编码器3 层卷积逐步压缩特征层名类型输出通道卷积核步长作用conv1Conv2d329×93大图快速降采样提取边缘轮廓conv2Conv2d165×52继续压缩通道减半conv3Conv2d83×32压缩到 1/12 分辨率捕捉高层语义以 300×300 的深度图为例经过 3 次下采样步长 3、2、2特征图缩小到25×25感受野则覆盖几乎整张图——这正是每个像素的质量分都需要看全局的关键。 注意padding参数与步长严格配合如 stride3 配 padding3保证输出尺寸是向下取整的可预测值便于解码器恢复。解码器3 层转置卷积恢复原始分辨率层名类型输出通道卷积核步长作用convt1ConvTranspose2d83×32特征图 ×2convt2ConvTranspose2d165×52特征图 ×2convt3ConvTranspose2d329×93特征图 ×3回到输入分辨率解码器用转置卷积ConvTranspose2d逐级上采样output_padding1用来补齐卷积下采样时丢掉的那个像素最终输出与输入深度图同尺寸——这样才能保证每个像素都有预测值。每个卷积层后面都跟了一个 ReLU 激活x F.relu(self.conv1(x)) x F.relu(self.conv2(x)) # ... 共 6 层另外所有卷积层权重都使用Xavier 均匀分布初始化nn.init.xavier_uniform_让训练从一开始就处于健康状态。4 个输出头质量、角度、宽度各管一件事解码器输出 32 通道的特征图后网络分叉出 4 个独立的 2×2 卷积头各输出 1 通道输出头预测内容后处理含义pos_output抓取质量 Q像素值越大越适合在此中心位置抓取cos_output角度余弦值与 sin 配合恢复抓取方向sin_output角度正弦值避免角度不连续问题0°/360° 跳变width_output夹爪宽度后处理乘以 150 得到像素单位两个值得注意的设计为什么用 sin/cos 而不是直接回归角度角度是环形量直接回归会让 179° 和 -179° 两个几乎相同的姿态在数值上相差 358°。拆成正弦/余弦两个通道网络学习平滑得多。为什么宽度要乘 150训练时把宽度归一化到 [0,1]推理时再乘回物理尺度约 150 像素的夹爪范围。从原始输出到抓取指令后处理三步走网络的 4 张原始输出图还不能直接给机械臂用需要 models/common.py 中的post_process_output做后处理合成角度图atan2(sin, cos) / 2.0——除以 2 是因为夹爪抓握方向与镜像方向等价180° 周期宽度换算乘以 150 恢复真实尺度高斯滤波对质量、角度、宽度图分别做平滑σ2.0 或 1.0消除孤立的毛刺尖峰之后由 utils/dataset_processing/grasp.py 中的detect_grasps完成最后一步在质量图上用局部极大值检测peak_local_max最小间距 20 像素、阈值 0.2找到峰值点从角度图、宽度图中读取对应像素的值组装成Grasp对象中心点 角度 夹爪宽度至此一张深度图变成了一条机械臂可直接执行的抓取指令。关键文件导读清单文件路径内容阅读优先级models/ggcnn.pyGG-CNN 主网络仅 70 行含 6 层卷积与 4 个输出头⭐⭐⭐ 核心models/common.py输出后处理角度合成、宽度换算、高斯滤波⭐⭐⭐models/ggcnn2.py改进版 GG-CNN2空洞卷积扩大感受野⭐⭐train_ggcnn.py训练入口支持 Cornell / Jacquard 数据集⭐⭐eval_ggcnn.py评估入口支持 IoU 指标与可视化⭐⭐utils/dataset_processing/grasp.py抓取矩形、抓取检测局部极大值⭐⭐utils/data/cornell_data.pyCornell 数据集加载⭐其中 models/ggcnn2.py 是改进版把编码器换成MaxPool 下采样 两层空洞卷积dilation2、4以相同参数量获得更大感受野是研究如何改进抓取网络的好对照样本。快速上手训练与评估入口训练以 Cornell 数据集为例python train_ggcnn.py --description my_run --network ggcnn \ --dataset cornell --dataset-path 数据集路径训练日志和模型默认保存在output/models/并可通过 TensorBoard 查看 loss 曲线四个输出头的 MSE 分量分别记录方便诊断是哪个头学得慢。评估与可视化python eval_ggcnn.py --network 模型路径 --dataset cornell \ --dataset-path 数据集路径 --iou-eval --vis--vis会把 RGB 图、深度图、质量图和预测的抓取矩形画在一起是直观检验网络到底学到了什么的最好方式。总结GG-CNN 架构的 3 个设计精髓对称的 U 型结构3 层卷积下采样 3 层转置卷积上采样输出与输入同尺寸实现每个像素都有抓取预测4 个轻量输出头质量、sin、cos、宽度各自独立回归用 sin/cos 参数化优雅地解决了角度回归的周期性问题极简到可逐行阅读整个网络不到 100 行代码没有 BatchNorm、没有残差连接——这正是它能实时运行、适合部署到机器人上的原因如果你想继续深入建议阅读顺序models/ggcnn.py→models/common.py→utils/dataset_processing/grasp.py三篇读完你就完整掌握了从深度图到抓取指令的整条链路。【免费下载链接】ggcnnGenerative Grasping CNN from Closing the Loop for Robotic Grasping: A Real-time, Generative Grasp Synthesis Approach (RSS 2018)项目地址: https://gitcode.com/gh_mirrors/gg/ggcnn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考