
简介本资源是一套面向人工智能与无人机控制方向研究者及高年级本科生的端到端视觉自主导航实践方案聚焦于复杂环境下无需GPS的纯视觉避障与飞行控制问题。项目融合液体神经网络LNN动态建模能力与强化学习策略优化机制在AirSim高保真仿真环境中实现从原始图像输入到飞控指令输出的完整闭环训练。压缩包共19个文件57KB含12个Python核心模块涵盖LNN单元实现、AirSim环境封装、视觉智能体训练与推理主流程、2个批处理脚本用于启动TensorBoard与仿真环境、1个Word说明文档与1个Markdown项目指南结构清晰、模块解耦便于理解LNN在时序感知中的优势及RL奖励函数设计逻辑。目前已有118人学习下载读者可直接复现基于视觉-状态融合的轻量级导航智能体训练流程并获得可扩展的代码框架与关键超参配置参考。 从无人机用纯视觉自己飞这个想法落地到一个能跑通的项目中间的坑远比想象中多。这篇博文围绕基于液体神经网络与强化学习的无人机视觉自主导航系统展开完整记录了我如何用AirSim高保真仿真环境搭建端到端无人机控制管线把纯视觉输入和低维状态数据喂给智能体最终在复杂环境下完成自主飞行与避障任务。核心思路、网络设计、奖励函数、训练细节和十余个实战中踩过的坑都会写到适合正在做无人机自主导航、强化学习应用或者对液体神经网络感兴趣的工程师参考。1. 为什么把液体神经网络强化学习放在一起解决无人机视觉导航1.1 纯视觉导航的难点先想清楚要解决什么问题无人机自主导航最经典的做法是感知-建图-规划-控制四段式。视觉SLAM负责定位和建图路径规划算法在栅格地图或拓扑地图上搜索可行路径底层控制器再去跟踪轨迹。这套方案成熟、可解释性强但有个天然瓶颈整套管线延迟高计算链路长在低空、狭小空间、光照剧烈变化等场景下一个环节出错就会级联放大。纯视觉端到端方案想绕开这个瓶颈。输入直接是摄像头图像输出直接是飞行控制量中间不显式建模世界地图让神经网络自己学会看到什么就怎么飞。优点很明显——决策速度快、不需要昂贵建图设备但难点也同样突出它要求网络在连续帧之间保持时空一致性不能把每一帧当作独立图像来处理。这就引出了时序建模的问题。传统做法是把多帧图像摞起来或者用LSTM/GRU这类循环网络去处理时序信息。但实际飞行中无人机的状态变化是连续的、非线性的而且不同环境下对历史信息的依赖程度完全不同。比如在空旷走廊里最近几帧图像已经足够决策但在复杂障碍环境中无人机需要回忆几秒前看到的结构才能判断当前是否应该急转。固定结构的循环网络很难自适应地调整时间记忆的长短。1.2 液体神经网络相比传统循环网络强在哪从记住多少到算得多快液体神经网络Liquid Neural NetworkLNN最初由MIT的团队提出核心思想是把神经元的激活函数替换成一个带时间常数time constant的微分方程系统。普通LSTM的隐藏状态更新是离散的、固定的LNN的每个神经元则是一个连续动力系统它的时间常数本身是网络参数可以被训练。这意味着什么打个比方普通RNN像一个固定秒针速度的时钟无论当前任务需要快还是慢它都以同样的节奏更新记忆LNN则像一个能自己调节走时快慢的时钟在需要快速反应的障碍物规避场景中时间常数会自动变小让网络快速响应在需要稳定悬停或长距离巡航的场景中时间常数会变大让网络保持稳定输出。这个自适应的时间特性对无人机这种动态特性随环境变化而变化的控制对象非常友好。另一个关键特点是LNN的微分方程求解过程本身就是一个隐式的滤波过程对噪声的抑制能力比离散RNN更强。摄像头图像在运动模糊、光照突变时会有大量噪声LNN能在这个连续时间建模过程中自然平滑掉部分噪声这是很多项目选它的重要原因。1.3 强化学习在整个系统里的定位它不是魔法是控制策略的训练器很多人对强化学习有一个误解觉得只要定义了状态、动作、奖励丢进算法里它就能自己学会飞。真正做过项目就知道强化学习本质是一个通过试错来优化策略的训练器。在这个无人机导航任务里策略网络就是视觉图像加上IMU等低维状态数据到控制量的映射函数也就是前面提到的液体神经网络。强化学习负责的事情是让智能体不断在AirSim环境里飞行遇到障碍碰壁了、偏离航线了、飞得太慢被时间惩罚了这些反馈信号通过奖励函数传递回来再用策略梯度算法去更新神经网络的权重。经过几十万步甚至上百万步的探索网络才会逐渐学会前方有大片深色区域意味着可能有障碍物应该转向这样的隐式规则。有一点需要明确强化学习本身不会帮你设计网络结构也不会自动帮你处理传感器噪声。它只是训练手段能力上限由网络结构、状态表示、奖励函数共同决定。这也是我把LNN和RL结合而不是直接用现成CNNLSTM的原因——LNN提供了更合适的时间序列建模能力RL提供了端到端的优化途径。2. AirSim高保真仿真环境项目的地基和实验室2.1 AirSim能提供什么从传感器仿真到真实物理响应AirSim是一个基于Unreal Engine的无人机/自动驾驶仿真平台微软开源。它最大的价值在于提供了高保真的物理模型和传感器模型。物理层面无人机在AirSim里的飞行不是简单的位置插值而是有真实的四旋翼动力学模型螺旋桨推力、阻力、重力、惯性力矩都会参与计算。传感器层面摄像头支持RGB、深度、分割等多种模式还有IMU、GPS、气压计等常用传感器仿真。这意味着在AirSim里训练出来的策略天然就带着传感器噪声和物理动态响应。比如你给网络输入一个前方障碍物的图像网络输出的控制量若是让无人机快速转向AirSim里飞机会因为惯性和姿态控制延迟出现一个短暂的滞后这种滞后在训练过程中会让网络学到提前预判的习惯。这一点对仿真到真机迁移非常重要。2.2 环境搭建与配置我踩过的关键坑AirSim的安装分为两部分一是Unreal Engine环境本身二是AirSim插件。UE我建议直接使用AirSim官方推荐的版本不要盲目追求最新版。我起初用过一个较新的UE版本结果AirSim插件编译报错排查了半天发现是版本兼容性问题后来换回推荐版本一次通过。配置文件settings.json是重点。多旋翼无人机的传感器配置我给出一个可直接参考的模板{ SettingsVersion: 1.2, SimMode: Multirotor, ClockSpeed: 1, CameraDefaults: { CaptureSettings: [ { ImageType: 0, Width: 256, Height: 144, FOV_Degrees: 90 }, { ImageType: 3, Width: 256, Height: 144, FOV_Degrees: 90 } ] }, Vehicles: { Drone1: { VehicleType: SimpleFlight, DefaultVehicleState: Armed, Cameras: { front_center: { CaptureSettings: [ { ImageType: 0, Width: 256, Height: 144, FOV_Degrees: 90 } ], X: 0.15, Y: 0, Z: 0, Pitch: 0, Roll: 0, Yaw: 0 } }, Parameters: { UserConfig: { MaxSpeed: 12, MaxAngle: 30 } } } } }ImageType 0是场景视角RGBImageType 3是分割视角。我在训练初期把分辨率设为256x144这个分辨率足够捕捉障碍物轮廓又能显著降低训练时的显存开销。摄像头FOV我用90度视野大小适中既不会因为视角太窄导致看不到侧方障碍物也不会因为太宽产生严重画面畸变。这里有个容易忽略的坑ClockSpeed默认是1也就是仿真时间和真实时间同步。如果机器性能不够渲染跟不上会导致仿真变慢训练效率大幅下降。我建议在训练阶段把ClockSpeed设为3到5让仿真跑得比真实时间快但不要设得太高我试过10物理引擎的步长会变得不稳定飞行轨迹会出现抖动。2.3 创建训练场景和任务生成器训练场景我选了AirSim自带的Blocks环境以及一个自己用UE搭的简单障碍物环境。Blocks环境的好处是场景复杂度适中有不同形状的障碍物适合算法验证。任务生成器是很多人忽视的环节。为了训练出泛化能力强的策略不能只在固定起点和固定终点之间飞。我写了一个随机任务生成器在环境范围内随机生成起点和目标点起点位置和朝向都随机化目标点用视觉标识物比如一个高饱和度颜色的球形标记放置在障碍物后方逼着无人机学会绕过障碍才能到达。这样每次训练回合的飞行路径都不一样策略才能真正学会避障本身而不是记住某条特定路径。AirSim的Python API提供了覆盖全流程的接口从client.enableApiControl()到client.moveByVelocityAsync()再到图像获取client.simGetImages()。任务生成器的核心逻辑就是组合这些API构建出观测-动作-奖励-下一观测的标准RL数据流。3. 从视觉输入到飞行控制端到端网络架构怎么设计3.1 输入层设计视觉编码器怎么选端到端架构的第一步是把256x144的RGB图像压缩成一个紧凑的特征向量。这一步用什么网络结构非常有讲究。我最早尝试直接用ResNet18的预训练模型做特征提取效果其实不错但有两个问题一是ResNet18参数量太大训练速度慢二是它原本是在ImageNet数据集上训的那些特征跟无人机飞行场景并不完全匹配。后来我改用一个轻量级CNN编码器结构如下Conv2d(3, 32, kernel_size5, stride2, padding2) - BatchNorm2d - ReLU Conv2d(32, 64, kernel_size3, stride2, padding1) - BatchNorm2d - ReLU Conv2d(64, 64, kernel_size3, stride2, padding1) - BatchNorm2d - ReLU Conv2d(64, 128, kernel_size3, stride2, padding1) - BatchNorm2d - ReLU AdaptiveAvgPool2d((4, 4))最后一层全局平均池化后得到128x4x42048维特征再接一个全连接层降到128维。这个编码器参数量只有约50万前向推理在普通GPU上不到1毫秒完全满足在线控制的实时性要求。LNN层我使用了一个PyTorch实现的连续时间循环层。核心思想是把每个隐藏神经元的状态看作一个满足常微分方程dh/dt的函数具体更新公式为h(tΔt) h(t) (Δt / τ) * (f(W * x(t) U * h(t)) - h(t))其中 τ 是时间常数参数每个神经元有独立的 τf 是激活函数。网络训练过程中 τ 也会被梯度更新从而学会自适应调节记忆长度。用伪代码表达LNN前向传播的核心逻辑class LiquidTimeCell(nn.Module): def __init__(self, input_size, hidden_size, dt0.1): super().__init__() self.input_size input_size self.hidden_size hidden_size self.dt dt self.W nn.Linear(input_size, hidden_size) self.U nn.Linear(hidden_size, hidden_size) self.tau nn.Parameter(torch.ones(hidden_size) * 2.0) # 时间常数初始为2.0 self.tau_min torch.tensor(0.1) # 下界防止状态更新过快 def forward(self, x, h): tau torch.clamp(self.tau, minself.tau_min) h_new h (self.dt / tau) * (torch.tanh(self.W(x) self.U(h)) - h) return h_new初始tau设为2.0表示神经元默认记住约两个时间步的历史训练后部分神经元会下降到0.1以下实现快速响应部分神经元会上升到5以上实现长时间记忆。3.2 液体神经网络层微分方程时序建模LNN层在这个项目里的输入序列长度我设定为5帧即每0.5秒采样一帧图像连续5帧组成一个序列。每一帧经过CNN编码器得到128维特征向量然后依次输入LiquidTimeCell序列最后一个时间步的隐藏状态作为整个视觉时序的特征表示。LNN的关键差异在于单层LiquidTimeCell就已经具备连续时间建模能力不需要像LSTM那样堆叠多层来捕获长依赖。我实测用2层LiquidTimeCell效果最好第一层时间常数偏小负责快速响应第二层时间常数偏大负责保持上下文信息。参数量约15万比同规模的LSTM少一个数量级。需要注意LNN对输入序列的采样频率敏感。采样间隔太大网络难以捕捉连续运动中的加速度信息采样间隔太小连续帧之间的差异过小信息冗余度高。0.5秒间隔是我在多个配置中实测效果最好的平衡点。3.3 输出层控制命令空间怎么定义无人机控制有两种常见粒度一是高层控制命令比如速度向量由底层姿态控制器执行二是底层姿态控制量比如油门、横滚、俯仰、偏航速率。我选择了速度控制。原因是速度控制更贴近导航这个语义层级网络只需学会往哪个方向飞、飞多快而不需要关注电机转速和姿态角的复杂动力学。具体来说输出层产生一个4维向量v_x、v_y、v_z机体坐标系下的三轴速度和yaw_rate偏航角速率。这个输出通过AirSim的moveByVelocityAsync接口发送给仿真飞行器。那个经典的最后一层要不要加tanh激活函数的问题我这里明确回答必须加。因为速度控制量有边界不加tanh的话网络可能会在训练初期输出很大的速度值导致无人机直接冲出边界。tanh把输出限制在[-1,1]之间再乘以最大速度系数我设为3m/s就得到了安全的控制量。3.4 端到端还是分模块我为什么选择端到端做视觉导航时最常被问到的就是为什么不把感知、规划、控制分开做各模块独立训练和调优这样更可控、更好调试我的答案是分模块方案的瓶颈不在精度而在延迟和接口损耗。视觉SLAM输出位姿精度受光照影响大路径规划算法的搜索频率低这两个模块的接口一旦出错控制层再优秀也救不回来。端到端方案把整个策略表示为一个单一网络最小化信息传递损耗。但端到端方案也有明显缺陷可解释性差、数据利用率低、训练不稳定。这些问题的缓解方法是合理设计奖励函数和训练流程也就是后面要展开的内容。我的总体判断是在仿真环境下端到端方案的潜力和可行性要高得多。4. 强化学习训练状态空间、动作空间和奖励函数设计细节4.1 状态空间设计纯视觉低维状态数据的融合状态空间的设计决定了智能体能看见什么。纯视觉方案的问题在于有些关键状态信息从图像中很难提取。比如无人机当前的速度虽然可以通过连续帧差分估算但噪声很大再比如电池电量这种非视觉信息摄像头根本感知不到。我设计的状态空间分两部分视觉特征占比约90%和低维状态数据占比约10%。视觉特征就是前面说的LNN序列输出128维低维状态数据包括当前三轴速度、当前三轴加速度、当前相对目标点的方向角。这里相对目标点的方向角是一个人为注入的辅助信息它是通过GPS或位置传感器获取的不是纯视觉信息。这个设计的合理之处在于它模拟了真实无人机上GPS/INS系统提供的低维状态让任务不至于退化成一个纯视觉找路问题。视觉特征和低维状态拼接后经过两个全连接层128维 - 128维 - 64维再分别送入Actor和Critic网络。Critic网络是PPO算法里用来估计状态价值的输入是完整状态输出一个标量价值估计值。4.2 动作空间连续控制 vs 离散控制在这个项目里动作空间的选择直接影响训练稳定性和最终飞行品质。离散动作空间比如前进、左转、右转、悬停四个动作优点是易于实现和训练缺点是控制不平滑无人机飞起来像在走像素格子姿态抖动明显而且离散动作无法对速度做精细调节在狭窄障碍环境中往往撞上刚过去的障碍物。连续动作空间输出4维连续值向量优势是控制平滑、符合真实飞行习惯缺点是策略梯度估计方差大、训练难度高。我选择连续动作空间同时使用Beta分布替代高斯分布作为策略输出的概率分布。Beta分布的好处是输出天然限定在[0,1]区间配合tanh缩放可以实现更好的探索效果避免了高斯分布输出接近边界时的梯度消失问题。4.3 奖励函数这是整个项目最关键的工程奖励函数设计是整个项目里最容易被低估、但影响最大的部分。我迭代了三个版本。第一版我给了到达目标点给10碰撞障碍物给-10每一步给-0.01的稀疏奖励智能体训练了30万步几乎没有任何进步——因为稀疏奖励下智能体从一开始就随机乱飞根本不知道目标在哪里。第二版我加入了密集的距离奖励r_dense -Δdistance_to_target * 0.5即每一步到达目标点的距离变化量作为奖励。如果这一步比上一步更接近目标就给予正奖励反之给予负奖励。再加上碰撞惩罚-5、接近目标点额外奖励。这个版本下智能体开始有学习迹象10万步左右能学会飞向目标点。但出现了奖励黑客问题智能体学会了原地小幅度盘旋来拉低碰撞概率同时因为每步都在靠近目标距离奖励很高形成只前进保护自己但从不真正进入危险区域的保守策略。解决办法是把时间步奖励从常数改成与速度相关的惩罚r_time -0.05 * (1 - v_norm / v_max)也就是说飞得越慢惩罚越大逼着智能体学会在保证安全的前提下提高飞行效率。第三版我加入了平滑奖励和朝向奖励r_smooth -0.2 * ||a_t - a_{t-1}||^2朝向奖励当无人机速度方向指向目标方向时给予奖赏角度偏差越小奖励越高r_heading 0.3 * cos(θ_velocity, θ_target)最终的一步奖励形式为r_total w1 * r_dense w2 * r_collision w3 * r_time w4 * r_smooth w5 * r_heading权重分别为 w10.5, w25, w30.05, w40.2, w50.3。每次训练我都记录奖励曲线、碰撞率曲线和到达成功率的曲线通过观察这些曲线来调整权重。在奖励函数设计上有一个重要原则每个奖励项都应该有明确的语义和可解释性。我见过很多项目把奖励函数堆了一堆项最后训练出一个看起来高分、实际行为完全不符合预期的策略。奖励函数的每个分量都应该对应一个你想要鼓励或抑制的具体行为。4.4 训练算法选择PPO和它的超参数调优算法上我选了PPOProximal Policy Optimization它是目前强化学习领域最稳定的算法之一擅长处理连续状态空间和连续动作空间问题。相比SACSoft Actor-CriticPPO的调参经验更明确、默认参数在大多数环境下表现不错工程落地更省心。PPO核心思想是限制每次策略更新的幅度避免策略剧烈变化导致训练崩溃。它通过clip操作实现这种限制如果新旧策略的比率不在[1-ε, 1ε]范围内就截断对应的梯度更新。ε我默认设为0.2但在训练中期发现策略熵探索性指标下降过快果断把ε降到0.1训练稳定度明显提升。超参数组合是经过多轮实验得到的直接抄作业超参数数值说明学习率3e-4使用线性衰减训练结束时降至初始值的一半GAE gamma0.99折扣因子控制长期回报的权重GAE lambda0.95GAE平滑系数clip epsilon0.2初始值训练中可根据策略熵手动调整到0.1batch_size2048每个PPO epoch采样的轨迹条数minibatch_size256小批次更新数量epochs per batch10每batch重复更新次数熵系数0.01鼓励探索的惩罚项权重隐藏层神经元数128/128Actor和Critic共享的MLP隐藏层训练我用NVIDIA RTX 4090AirSim渲染在CPU端用UE加速整体训练速度约为每秒80到120个仿真步。一个完整的训练流程大约需要80到150万步时间在2到4个小时之间。训练过程中最需要关注的三个信号策略熵、价值损失Value Loss、KL散度。如果策略熵降得过快说明策略过早收敛到了一个局部最优如果价值损失持续不下降需要检查Critic网络是否容量不够如果KL散度突然变大说明clip操作在起作用更新幅度被限制。5. 实际训练中的问题与避坑指南5.1 仿真到现实差距Sim-to-Real Gap从何而来这是所有仿真训练项目绕不开的问题。AirSim虽然高保真但和真实世界的差距主要集中在光照变化、纹理细节、运动模糊、传感器延时、动态响应差异这几个方面。我做了几个针对性处理一是网络输入图像额外做了随机亮度扰动、随机颜色抖动、随机模糊模拟真实摄像头在不同光照条件下的表现二是在训练过程中随机减小控制指令的执行频率模拟底层控制器的响应延迟三是使用域随机化Domain Randomization技术把环境物体的颜色、纹理、形状在一定范围内随机化让智能体学到更泛化的特征。在AirSim里域随机化可以通过simSetObjectMaterial之类的API动态改变物体的材质参数也可以用脚本在每次训练回合开始前随机修改UE场景中的物体属性。后者工程量大但效果好。5.2 训练崩溃、奖励黑客和收敛缓慢训练崩溃是最常见的现象。表现是训练到某个阶段累积奖励从稳步上升突然断崖式下跌。我在前几轮实验中几乎必遇到。原因通常有两种一是学习率过大导致策略更新越过最优区域二是某些随机种子导致训练发散。解决方式一是降低学习率用3e-4不稳定就降到1e-4二是训练中实时监控熵值一旦熵降到某个阈值以下就恢复初始探索噪声三是在固定间隔保存checkpoint这样就可以随时回滚到崩溃之前的状态。奖励黑客需要特别警惕。我遇到过一种极具迷惑性的黑客行为无人机学会了在目标点周围画一个半径不到1米的圆形轨迹在这个轨迹上距离奖励始终在微小波动因为速度始终不为零所以时间惩罚项也小累计奖励还很高。但如果看最终飞行效果它根本没有到达目标点。我用一个严格的到达判定距离目标点小于1.5米且速度小于0.3m/s来规避这个问题同时把到达奖励改为只在严格到达时给予。收敛缓慢往往是奖励函数稀疏造成的。判断方法是看前10万个步的奖励曲线如果几乎平线说明智能体根本没有得到有效的学习信号。这时候需要增加辅助奖励项而不是一味增大学习率。我尝试过引入行为克隆作为辅助训练手段即先采集少量专家演示数据做模仿学习初始化然后再切换到强化学习。这个方法能显著加速训练特别是在任务初期智能体会从模仿阶段学会基本飞行本能。5.3 参数调优观察方法与记录习惯强化学习的训练过程很看运气同一个代码和参数换个随机种子结果可能差很多。所以从第一轮实验开始我建立了严格的实验记录习惯。每次实验用唯一的实验ID命名记录内容包括超参数组合、奖励函数版本、网络结构哈希值、训练步数、成功率曲线、平均碰撞率、策略熵曲线、价值损失曲线。训练完成后把所有的曲线绘制在一张图上方便横向对比。调试过程中发现观察成功率比观察奖励更可靠。奖励是多个加权项的混合信号可能某个实验的累积奖励看起来更高但实际碰撞率反而更高。成功率按严格到达定义计算是一个更直接的评估指标我会把它设为主指标奖励曲线作为辅助指标。6. 从仿真到飞行效果评估6.1 评估指标不只是成功率很多人评估无人机导航系统只盯一个成功率——有多少次飞到了目标点。实话说这远远不够。一个只追求成功率的策略可能飞得极其保守、行动缓慢、路径绕远路实用价值很低。我设计了一套多维评估体系覆盖飞行品质的各个方面指标定义目标值轨迹长度比实际飞行距离 / 最短可行距离越小越好目标1.4平均飞行速度任务过程中速度均值越高越好目标1.2 m/s碰撞率训练中碰撞次数 / 总飞行回合数目标10%控制平滑度相邻时间步控制量的平均变化量目标0.2观测鲁棒性测试阶段加入视觉噪声后的成功率变化下降20%其中轨迹长度比是我最看重的指标。它衡量的是智能体是否学会高效导航而非单纯不撞。我训练的策略在Blocks环境里轨迹长度比大概在1.28左右虽然还不是最理想但已经明显优于用LSTM作为时序层的基线策略1.56。6.2 从仿真到真机的可能性这个项目目前还停留在仿真阶段但设计之初就预留了迁移到真机的接口。原因有二一是AirSim的API接口格式和真实PX4/ArduPilot飞控的控制接口有很高相似度从moveByVelocityAsync切换到MAVROS的setVelocity命令逻辑是相通的二是LNN的强抗噪能力让它有潜力直接处理真实摄像头上的噪声。如果要在真实无人机上复现我认为最需要关注的是部署时的计算资源。当前模型在PC上运行很快但要部署到机载计算机比如Jetson Orin、树莓派加NVIDIA加速模块上需要做模型量化。LNN的动态性决定了它必须用onnxruntime或TensorRT推理引擎实现不能简单用PyTorch的JIT。这部分工作我计划作为下一阶段的目标。6.3 后续扩展方向这个项目目前的结果已经证明LNNRLAirSim的组合在无人机视觉导航上是可行的。后续扩展有几个方向我比较看好一是把LNN层的动态参数可视化分析不同神经元的时间常数在飞行任务中出现什么分工这有助于增强模型可解释性。二是在多智能体编队场景中测试LNN因为液体神经网络的连续时间特性天然适合处理异步事件编队中不同无人机的通信延迟是变动的LNN有望比固定RNN更好地适应这种异步性。三是加入雷达点云或多视角视觉输入让系统在夜间或恶劣天气下也能工作。当前纯视觉方案在光线充足的环境下表现不错但在逆光或黑暗环境中可靠性还有明显下降。这不只是调参能解决的需要在输入层增加多模态融合。四是用更大的场景和更多样化的障碍物布局做更充分的训练。这个项目的训练时间只有几个小时已经展现出了不错的泛化能力如果给足算力和数据性能还有很大提升空间。我的经验是做这种新模型强任务的项目最怕一步到位。先把一个最小可行性系统跑通哪怕导航效果很粗糙也算完成了0到1的突破。之后再逐步加复杂度、调优化目标、做消融实验每一步的改动都保持可回溯、可对比项目才会一步步走向可靠。本文还有配套的精品资源点击获取