网络训练生成飞行轨迹

介绍

本文是博客的子文。介绍如何对网络进行训练。主要代码文件如下:

整体代码框图如下,本文介绍框图中的B模块:

网络结构

网络结构定义代码在 nets.py中,模型名称为 PlaNet.
参考整体框图中的B模块。代码中_internal_call函数,实现了B模块的流程。
网络默认不输入RGB图像,仅输入SGM深度图像和飞机的位姿,以及给定轨迹方向。
因此,_internal_call函数分别对输入数据进行处理:

  • 首先处理飞机的位姿和期望方向,对应B框图中的States Backbone
    imu_embeddings = self._imu_branch(imu_obs)。
  • 再处理输入的图像数据,对应B框图中的Depth Backbone
    img_embeddings = self._preprocess_frames(inputs)
  • 整合飞机位姿和图像数据,
    total_embeddings = tf.concat((img_embeddings, imu_embeddings), axis=-1)
  • 网络计算
    output = self._plan_branch(total_embeddings)
    def _internal_call(self, inputs):if self.config.use_position:imu_obs = inputs['imu']else:# always pass zimu_obs = inputs['imu'][:, :, 3:]if (not self.config.use_attitude):if self.config.use_position:print("ERROR: Do not use position without attitude!")returnelse:imu_obs = inputs['imu'][:, :, 12:] # velocity and optionally body ratesimu_embeddings = self._imu_branch(imu_obs)img_embeddings = self._preprocess_frames(inputs)if img_embeddings is not None:total_embeddings = tf.concat((img_embeddings, imu_embeddings), axis=-1)  # [B, modes, MxM + 64]else:total_embeddings = imu_embeddingsoutput = self._plan_branch(total_embeddings)return output

网络输入数据预处理

网络需要特定格式的数据,因此需要把飞机的位姿,图像和期望的方向,按照一定的方式整合起来。核心代码对应 data_loader.py中的 _dataset_map 函数。

  • 彩色图像预处理 decode_img_cv2
    主要是处理图像大小,并转换为array.
    img = cv2.resize(img, dim)img = np.array(img, dtype=np.float32)
  • 深度图像预处理 decode_depth_cv2
    除了处理图像大小,转换为array之外,还扩展了维度。
        depth = cv2.resize(depth, dim)depth = np.array(depth, dtype=np.float32)depth = depth / (80)  # depth in (0.255)depth = np.expand_dims(depth, axis=-1)depth = np.tile(depth, (1, 1, 3))
  • 彩色图像和深度图像整合 frame_seq = (img_seq, depth_seq)
  • 飞机位姿数据和期望轨迹方向处理 imu_seq.append(imu_o)
    imu_o有22x1维,内容包含飞机的姿态,根据期望方向,计算的目标方向goal_dir, 以及 rollout_id , 具体如下:
 imu_o = ["pos_x","pos_y","pos_z","r_0","r_1","r_2","r_3","r_4","r_5","r_6","r_7","r_8","vel_x","vel_y","vel_z","omega_x","omega_y","omega_z","goal_dir_x","goal_dir_y","goal_dir_z","rollout_id"]
  • 真值轨迹处理,直接进行轨迹加载。 load_trajectory
 gt_traj = tf.py_function(func=self.load_trajectory,inp=[sample_num],Tout=tf.float32)

训练流程

核心训练流程代码在 plan_learner.py中 ( def train(self): ) 。主要步骤如下:

  • create_dataset
    参考博客,在 agile_autonomy_ws/src/agile_autonomy/planner_learning/data/train/路径下,已经生成了仿真训练数据。
    读取该路径下的数据,通过plan_learner.py中调用 create_dataset 函数,生成特定格式的网络训练数据集和网络验证数据集。即上文中《网络输入数据预处理》。

  • add_pointclouds
    加载真实的场景点云,用于后续计算网络轨迹的碰撞损失。

  • gradients = self.train_step(features, label)
    给定网络输入features和真实轨迹label, 输出网路梯度。并应用到下一次的train_step中。

  • 网络损失计算
    self.val_step(features, label)
    val_space_loss = self.val_space_loss.result()
    val_cost_loss = self.val_cost_loss.result()
    网络损失:包含网络轨迹与真实轨迹的差异代价,以及网络轨迹在场景点云中的碰撞代价。

网络训练生成飞行轨迹相关推荐

  1. 训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器

    答: detach的作用是冻结梯度下降,无论是对于判别网络还是生成网络而言,我们更新的都是关于logD(G(z)),对于判别网络而言,冻结G并不影响整体的梯度更新(就是内层函数看成是一个常数,不影响外 ...

  2. 极性采样:通过奇异值对预训练生成网络的质量和多样性控制

    一.前置知识 奇异值分解:奇异值分解(SVD)原理详解及推导_陈靖_的博客-CSDN博客_奇异值分解 雅克布矩阵:雅可比(Jacobian)矩阵 - 笨笨和呆呆 - 博客园 (cnblogs.com) ...

  3. 超越Facebook、谷歌、微软,百度发布全球首个百亿参数对话预训练生成模型PLATO-XL...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 和 AI 进行无障碍的对话,是什么样的体验?你或许能够在这篇文章里找到 ...

  4. 网络训练 (总结5)

    网络训练 1.1 网络运算的基本过程 神经网络的参数更新方法是基于一阶导数的梯度下降方法,网络的运算包含两个交替进行的步骤:数据的前向运算和误差的反向传播.在前向运算中,输入数据经过网络逐层变换,形成 ...

  5. 2020-4-22 深度学习笔记20 - 深度生成模型 5 (有向生成网络--sigmoid信念网络/可微生成器网络/变分自编码器VAE/生产对抗网络GAN/生成矩匹配网络)

    第二十章 深度生成模型 Deep Generative Models 中文 英文 2020-4-17 深度学习笔记20 - 深度生成模型 1 (玻尔兹曼机,受限玻尔兹曼机RBM) 2020-4-18 ...

  6. YOLO系列网络训练数据准备工具—Yolo_mark

    项目介绍 Yolo_mark是一个检测任务数据集制作工具,制作完成后的数据格式不是VOC或者COCO的数据格式,从它的名字也可以看出,它是专门为了YOLO系列的网络训练准备数据的,YOLO这一点还是很 ...

  7. 阿里AAAI2018论文解读:轻量网络训练框架、GAN中文命名实体识别、英俄翻译等...

    1. 火箭发射:一种有效的轻量网络训练框架<Rocket Launching: A Universal and Efficient Framework for Training Well-per ...

  8. 图像超分辨率Super Resolution基本介绍与常用方法:插值、稀疏编码、卷积网络、生成对抗网络

    ​ ​ 活动地址:CSDN21天学习挑战赛 0.难点 从低分辨率图像生成高分辨率图像,理论上有无数种解 相关的数据集少,一般都是从高清图像去制作模糊图像,然后作为数据集,但不同领域的模糊原因不同,模糊 ...

  9. RCNN学习笔记——第三篇: 实现FRCNN网络训练、评价与预测(附全部源码)

    RCNN学习笔记--第三篇: 实现FRCNN网络训练.评价与预测(附全部源码) 本文是个人根据B站大佬Bubbliiiing的FRCNN系列视频同步完成FRCNN训练,记录心得和遇见的问题. 关于RC ...

最新文章

  1. 教你如何查看 Git 提交中发生了什么变化
  2. R语言聚类分析--cluster, factoextra
  3. Window平台下的Android的环境配置
  4. 在java中必须要有main吗_在一个Java应用程序中main方法必须被说明为_____。
  5. 口语语言理解(SLU)最新资源库:综述、数据集、开源论文
  6. postgis启动_postgresql的安装和启动方法
  7. 新年第一赛,提交BUG奖励多
  8. zookeeper的设计猜想-leader选举
  9. 什么叫开关电源?捏碎了喂给你吃!
  10. C 语言调用CPU指令,CPU 1214C中 TSEND_C指令 最多可以使用几次-工业支持中心-西门子中国...
  11. python unittest生成html报告_python unittest--HTMLTestRunner生成报告
  12. spring boot web_SpringBoot2.x入门:引入web模块
  13. Android 服务
  14. 图像下采样 matlab_MATLAB--数字图像处理 图像的采样与量化
  15. NLP+句法结构(三)︱中文句法结构(CIPS2016、依存句法、文法)
  16. HTML 盒子模型( box-sizing: border-box)
  17. python保存快捷键是什么_python中的快捷键
  18. 文献找不到有什么好办法,运用谷粉学术和sci-hub下载各种文献
  19. 网络计算机要不要用电脑,电脑连不上网怎么办 电脑连不上网解决方法
  20. Prometheus+Grafana监控安装及配置JVM实现企业微信告警

热门文章

  1. 2021年国内具备10年行业开发经验的低代码平台汇总
  2. 如何避免新车开发项目中的风险管理?
  3. VDA标准在汽车行业的应用
  4. linux ftp主动模式和被动模式切换,FTP应该使用主动模式还是被动模式?
  5. 单边正弦信号拉斯变换 matlab
  6. SteamVR 2.x 手柄射线与3D物体交互(9)
  7. rfc2459:Internet X.509 公钥基础设施:证书和 CRL 简介
  8. 【Flask和Docker部署Pytorch深度学习模型】
  9. [C陷阱]getchar的返回值是int而不是char
  10. 基于javaweb的机械零件管理系统