网络训练生成飞行轨迹
网络训练生成飞行轨迹
介绍
本文是博客的子文。介绍如何对网络进行训练。主要代码文件如下:
整体代码框图如下,本文介绍框图中的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()
网络损失:包含网络轨迹与真实轨迹的差异代价,以及网络轨迹在场景点云中的碰撞代价。
网络训练生成飞行轨迹相关推荐
- 训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器
答: detach的作用是冻结梯度下降,无论是对于判别网络还是生成网络而言,我们更新的都是关于logD(G(z)),对于判别网络而言,冻结G并不影响整体的梯度更新(就是内层函数看成是一个常数,不影响外 ...
- 极性采样:通过奇异值对预训练生成网络的质量和多样性控制
一.前置知识 奇异值分解:奇异值分解(SVD)原理详解及推导_陈靖_的博客-CSDN博客_奇异值分解 雅克布矩阵:雅可比(Jacobian)矩阵 - 笨笨和呆呆 - 博客园 (cnblogs.com) ...
- 超越Facebook、谷歌、微软,百度发布全球首个百亿参数对话预训练生成模型PLATO-XL...
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 和 AI 进行无障碍的对话,是什么样的体验?你或许能够在这篇文章里找到 ...
- 网络训练 (总结5)
网络训练 1.1 网络运算的基本过程 神经网络的参数更新方法是基于一阶导数的梯度下降方法,网络的运算包含两个交替进行的步骤:数据的前向运算和误差的反向传播.在前向运算中,输入数据经过网络逐层变换,形成 ...
- 2020-4-22 深度学习笔记20 - 深度生成模型 5 (有向生成网络--sigmoid信念网络/可微生成器网络/变分自编码器VAE/生产对抗网络GAN/生成矩匹配网络)
第二十章 深度生成模型 Deep Generative Models 中文 英文 2020-4-17 深度学习笔记20 - 深度生成模型 1 (玻尔兹曼机,受限玻尔兹曼机RBM) 2020-4-18 ...
- YOLO系列网络训练数据准备工具—Yolo_mark
项目介绍 Yolo_mark是一个检测任务数据集制作工具,制作完成后的数据格式不是VOC或者COCO的数据格式,从它的名字也可以看出,它是专门为了YOLO系列的网络训练准备数据的,YOLO这一点还是很 ...
- 阿里AAAI2018论文解读:轻量网络训练框架、GAN中文命名实体识别、英俄翻译等...
1. 火箭发射:一种有效的轻量网络训练框架<Rocket Launching: A Universal and Efficient Framework for Training Well-per ...
- 图像超分辨率Super Resolution基本介绍与常用方法:插值、稀疏编码、卷积网络、生成对抗网络
活动地址:CSDN21天学习挑战赛 0.难点 从低分辨率图像生成高分辨率图像,理论上有无数种解 相关的数据集少,一般都是从高清图像去制作模糊图像,然后作为数据集,但不同领域的模糊原因不同,模糊 ...
- RCNN学习笔记——第三篇: 实现FRCNN网络训练、评价与预测(附全部源码)
RCNN学习笔记--第三篇: 实现FRCNN网络训练.评价与预测(附全部源码) 本文是个人根据B站大佬Bubbliiiing的FRCNN系列视频同步完成FRCNN训练,记录心得和遇见的问题. 关于RC ...
最新文章
- 教你如何查看 Git 提交中发生了什么变化
- R语言聚类分析--cluster, factoextra
- Window平台下的Android的环境配置
- 在java中必须要有main吗_在一个Java应用程序中main方法必须被说明为_____。
- 口语语言理解(SLU)最新资源库:综述、数据集、开源论文
- postgis启动_postgresql的安装和启动方法
- 新年第一赛,提交BUG奖励多
- zookeeper的设计猜想-leader选举
- 什么叫开关电源?捏碎了喂给你吃!
- C 语言调用CPU指令,CPU 1214C中 TSEND_C指令 最多可以使用几次-工业支持中心-西门子中国...
- python unittest生成html报告_python unittest--HTMLTestRunner生成报告
- spring boot web_SpringBoot2.x入门:引入web模块
- Android 服务
- 图像下采样 matlab_MATLAB--数字图像处理 图像的采样与量化
- NLP+句法结构(三)︱中文句法结构(CIPS2016、依存句法、文法)
- HTML 盒子模型( box-sizing: border-box)
- python保存快捷键是什么_python中的快捷键
- 文献找不到有什么好办法,运用谷粉学术和sci-hub下载各种文献
- 网络计算机要不要用电脑,电脑连不上网怎么办 电脑连不上网解决方法
- Prometheus+Grafana监控安装及配置JVM实现企业微信告警