GG-CNN vs GG-CNN2:转置卷积与空洞卷积在抓取网络中的完整对比
【免费下载链接】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
GG-CNN(Generative Grasping CNN,生成式抓取卷积神经网络)是一个轻量级的全卷积机器人抓取网络,输入一张深度图,就能为图像中每个像素同时预测抓取质量和抓取位姿,从而支持实时闭环抓取。本文完整对比项目中实现的 GG-CNN 与 GG-CNN2 两个版本:前者用"步幅卷积下采样 + 转置卷积上采样"的经典编码器-解码器结构,后者则引入空洞卷积扩大感受野,并改用双线性插值上采样,帮助你在训练自己的抓取网络前做出正确选择。
一、先认识 GG-CNN:为什么需要"生成式"抓取网络?
传统抓取方案通常分两步:先检测物体位姿,再基于几何模型规划抓取点。一旦物体遮挡或位姿估计失败,抓取就失败。
GG-CNN(出自 RSS 2018 论文Closing the Loop for Robotic Grasping)换了一种思路:不做目标检测,而是像语义分割一样做逐像素回归。网络直接输出 4 张特征图:
- pos:该位置作为抓取中心的"质量分"(越高越好)
- cos / sin:抓取方向角(用正弦-余弦编码,避免角度跳变)
- width:两指张开的宽度
因为网络极轻、单帧推理,机器人可以在抓取过程中不断刷新预测——即使物体被抓的过程中移动了,也能"边抓边修正",这就是所谓的闭环抓取。
📌 项目是对 RSS 2018 原始 Keras 代码的 PyTorch 重构版,支持 Cornell 和 Jacquard 两个数据集,安装依赖见 requirements.txt 中的
requirements.txt。
二、GG-CNN 架构解析:转置卷积如何把分辨率"送回来"
GG-CNN 的完整定义在models/ggcnn.py中,结构是一条典型的对称"漏斗":
编码器(3 层卷积,逐级降分辨率)
| 层 | 通道数 | 卷积核 | 步幅 | 输入 300×300 时特征尺寸 |
|---|---|---|---|---|
| conv1 | 32 | 9×9 | 3 | 100×100 |
| conv2 | 16 | 5×5 | 2 | 50×50 |
| conv3 | 8 | 3×3 | 2 | 25×25 |
解码器(3 层转置卷积,逐级升分辨率)
| 层 | 通道数 | 卷积核 | 步幅 | 输出尺寸 |
|---|---|---|---|---|
| convt1 | 8 | 3×3 | 2 | 50×50 |
| convt2 | 16 | 5×5 | 2 | 100×100 |
| convt3 | 32 | 9×9 | 3 | 301×301 |
转置卷积(ConvTranspose2d)可以理解为卷积的"逆操作":用 5×5 的核在低分辨率特征上"摊"出高分辨率特征,配合output_padding=1精确对齐目标尺寸。最后 4 个 2×2 的 1 通道小卷积头分别输出 pos/cos/sin/width,得到 295×295 的预测图,再经models/common.py中的高斯平滑后处理即可提取最佳抓取框。
它的特点:
- 结构最忠实于原始论文,是最小的复现基线;
- 转置卷积是可学习的上采样,参数多,且容易引入棋盘格伪影(checkerboard artifacts)——不过 GG-CNN 输出的是平滑的质量图,伪影影响不大;
- 步幅下采样让深层感受野较大,但代价是细节分辨率损失。
三、GG-CNN2 架构解析:空洞卷积带来的大感受野
GG-CNN2 定义在models/ggcnn2.py,是项目作者提出的改进版,核心变化有三处:
1. 空洞卷积(Dilated Convolution)扩大感受野
骨干中部的两层 5×5 卷积分别使用膨胀率dilation=2和dilation=4:
- 膨胀率 2 的 5×5 卷积,等效感受野约 17×17
- 膨胀率 4 的 5×5 卷积,等效感受野约 33×33
也就是说,不损失空间分辨率、不增加计算量,就能"看到"更大范围——而抓取质量判断恰恰需要大范围上下文(比如物体轮廓、遮挡关系)。这正是空洞卷积相对普通卷积的最大优势。
2. 用 MaxPool + 双线性插值替代转置卷积
GG-CNN2 只用两层 2×2 最大池化下采样(300×300 → 75×75),在空洞卷积层保持 75×75 的分辨率完成"看全局",然后:
75×75 →(UpsamplingBilinear2d ×2)→ 150×150 → 3×3 卷积 150×150 →(UpsamplingBilinear2d ×2)→ 300×300 → 3×3 卷积双线性插值上采样零参数、无棋盘格伪影,后面再跟一个小卷积"精修"。相比 GG-CNN 的大核转置卷积,参数更少、上采样行为更稳定。
3. 更细的输出头
4 个输出头改为1×1 卷积(逐像素独立映射),配合通道数[16, 16, 32, 16]的紧凑配置,进一步压缩参数量。
四、两者关键差异速查表
| 对比维度 | GG-CNN | GG-CNN2 |
|---|---|---|
| 上采样方式 | 转置卷积(可学习,大核 3/5/9) | 双线性插值 + 3×3 卷积 |
| 感受野策略 | 步幅下采样获得 | 空洞卷积(dilation 2、4)获得 |
| 最大特征分辨率 | 25×25(下采样 12 倍) | 75×75(下采样 4 倍) |
| 输出头 | 2×2 卷积 | 1×1 卷积 |
| 通道配置 | 32→16→8→8→16→32 | 16→16→32→16 |
| 定位 | 论文原版复现,最小基线 | 项目改进版,精度更高 |
| 源码位置 | models/ggcnn.py | models/ggcnn2.py |
💡 一句话总结:GG-CNN 是"缩小再看、放大回细节",GG-CNN2 是"保持分辨率、用空洞卷积看远"。后者细节保留更好,更适合逐像素回归这类对空间精度敏感的任务。
五、如何训练和评估两种网络?
两个网络通过统一的get_network工厂函数(models/__init__.py)加载,训练入口是train_ggcnn.py,只需切换--network参数:
# 训练 GG-CNN(Cornell 数据集) python train_ggcnn.py --description run1 --network ggcnn --dataset cornell --dataset-path /path/to/cornell # 训练 GG-CNN2(Jacquard 数据集) python train_ggcnn.py --description run2 --network ggcnn2 --dataset jacquard --dataset-path /path/to/jacquard训练过程使用 Adam 优化器,损失是 4 个输出的 MSE 之和(各自compute_loss实现),模型按验证集 IoU 自动保存到output/models。
评估与可视化统一由eval_ggcnn.py完成,几个常用开关:
--iou-eval:用抓取框与真值的 IoU 判定成功,是最常用的指标--vis:把 RGB、深度图与预测的质量图/角度图/抓取框画出来直观检查--jacquard-output:导出 Jacquard 数据集仿真测试所需格式
例如评估训练好的模型:
python eval_ggcnn.py --network output/models/xxx/epoch_20_iou_0.80 --dataset cornell --dataset-path /path/to/cornell --iou-eval如果不想从头训练,项目提供在 Cornell 数据集上训练好的 GG-CNN / GG-CNN2 预训练权重,可直接加载对比两种网络在同一输入上的质量图输出差异。
六、怎么选?给你的实操建议
- 想复现论文、理解生成式抓取原理→ 用 GG-CNN。它结构经典(编码-解码 + 转置卷积),是学习"转置卷积上采样"用法的最佳样例,代码在
models/ggcnn.py中不足 70 行,非常好读。 - 想拿到更好的抓取成功率→ 用 GG-CNN2。空洞卷积 + 高分辨率特征是项目推荐的改进方案,尤其适合需要精细逐像素输出的抓取场景。
- 想继续做研究→ GG-CNN2 暴露了
filter_sizes、l3_k_size、dilations等超参(见models/ggcnn2.py构造函数),可以方便地做消融实验,比如调整空洞率观察 IoU 变化。
七、总结
- GG-CNN 展示了转置卷积在语义分割式抓取网络中的经典用法:步幅卷积下采样提特征,转置卷积上采样恢复分辨率;
- GG-CNN2 展示了空洞卷积的价值:在不降分辨率的前提下把感受野扩展到 33×33 以上,再用零参数的双线性插值替代转置卷积,结构更稳、细节更准;
- 两套网络共享同一套训练(
train_ggcnn.py)与评估(eval_ggcnn.py)流程,--network ggcnn/--network ggcnn2一键切换,是理解"上采样方案"与"感受野设计"对抓取精度影响的绝佳对照实验。
掌握这两种设计思想后,你基本可以读懂并改进大多数"逐像素回归"类机器人感知网络了。🚀
【免费下载链接】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),仅供参考