如何用AirSim生成深度学习训练数据?录制与API自定义日志完整指南

发布时间:2026/9/18 18:59:55
如何用AirSim生成深度学习训练数据?录制与API自定义日志完整指南
如何用AirSim生成深度学习训练数据录制与API自定义日志完整指南【免费下载链接】AirSimOpen source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI Research项目地址: https://gitcode.com/gh_mirrors/ai/AirSimAirSim训练数据生成是微软开源自动驾驶/无人机模拟器 AirSim 最实用的能力之一你既可以通过内置的一键录制功能按 R 键或 API 控制自动保存图像位姿日志也可以调用AirSim Python API自定义采集流程把深度图、分割图、LiDAR 点云等任意传感器数据按自己想要的格式落盘直接喂给 PyTorch / TensorFlow 做深度学习训练。本文完整讲清这两种数据生成方式 。一、两种数据生成方式先搞清楚选哪种方式适用场景控制方式输出格式① 内置录制Recording快速批量收集图像位置/姿态数据settings 配置 R 键 /startRecording()airsim_rec.txt制表符日志 images/图像文件夹② API 自定义采集需要深度、分割、LiDAR、自定义命名/格式自己写 Python 脚本循环调用 API完全由你的代码决定 新手建议先用方式①跑通需要更复杂的标签或传感器组合时再迁移到方式②。二、方式①配置AirSim录制参数一键开始采集2.1 录制功能在哪里配置打开你项目的settings.json通常在Unreal/Environments/Blocks/Blocks/settings.json找到Recording配置节完整说明见 docs/settings.md。核心参数速查Enabled设为true时模拟器一启动就自动开始录制适合挂机跑长数据RecordInterval相邻两帧图像的最小间隔秒控制数据密度RecordOnMove设为true时车辆位置和姿态没变化就不记录避免堆积大量重复帧Folder录制数据保存的父目录需绝对路径每次录制会按时间戳年-月-日-时-分-秒建子文件夹不设置时默认存到Documents/AirSimCameras指定采集哪些相机、哪种图像类型、是否压缩甚至可以为多辆车分别指定不同相机。2.2 为多辆车配置不同相机深度学习常用配置Cameras是 JSON 数组可以为每辆车指定不同的 ImageType。比如下面这段配置Car1同时采集场景图ImageType 0和语义分割图ImageType 5Car2只采场景图——这对做目标检测/语义分割训练非常关键分割图就是现成的像素级标签Recording: { Enabled: true, RecordInterval: 0.1, Folder: /home/user/airsim_data, Cameras: [ { CameraName: 0, ImageType: 0, VehicleName: Car1, Compress: true }, { CameraName: 0, ImageType: 5, VehicleName: Car1, Compress: true }, { CameraName: 0, ImageType: 0, VehicleName: Car2, Compress: true } ] }⚠️ 注意Cameras留空数组[]表示只记录物理数据、不存图像外部相机暂不支持录制。2.3 开始与停止R 键 三个录制API手动模拟运行时按R键或点击右下角红色录制按钮即可开始/停止API通过 PythonClient 客户端 在脚本中控制详见 docs/apis.mdimport airsim client airsim.MultirotorClient() client.confirmConnection() client.startRecording() # 开始录制按settings里的参数执行 # ... 执行飞行/驾驶任务 ... client.isRecording() # 查询当前是否正在录制 client.stopRecording() # 停止录制API 与 R 键是联动的用 R 开启的录制可以用 API 停止反之亦然视口左上角还会弹出提示日志。2.4 录出来的数据长什么样每次录制生成一个时间戳文件夹内含airsim_rec.txt制表符分隔的日志。多旋翼记录车辆名 时间戳 POS_X POS_Y POS_Z Q_W Q_X Q_Y Q_Z 图像文件名汽车额外包含油门、转向、刹车、档位、转速、车速等列images/与日志逐行对应的图像文件默认压缩 PNG。这个日志行 ↔ 图像文件一一对应的结构天然就是训练集的格式配合 LogViewer 还能可视化回放检查数据质量。三、方式②用API自定义采集拿到深度、点云等任意数据内置录制只保存 settings 里声明的内容。如果你的训练任务需要深度图Ground Truth 距离标签、LiDAR 点云、自定义文件命名等推荐直接用 API 循环采集。3.1 核心套路设置位姿 → 取图 → 存盘以最常见的随机位姿批量采图为例完整可运行的 C 参考实现见 Examples/DataCollection/DataCollectorSGM.h它一次性采集左/右 RGB 图 深度图 视差图并自动建好训练目录结构import airsim, cv2, numpy as np client airsim.MultirotorClient() client.confirmConnection() reqs [ airsim.ImageRequest(front, airsim.ImageType.Scene, False, False), airsim.ImageRequest(front, airsim.ImageType.DepthPlanar, True, False), ] for i in range(1000): # 1) 随机摆一个位姿也可用你自己的轨迹生成器 pose client.getVehiclePose().kinematics_estimated client.simSetVehiclePose(pose, True) client.simWaitForKey( ) if False else client.simSleep(0.5) # 2) 一次RPC同时取RGB深度 resp client.simGetImages(reqs) # 3) 按训练集格式落盘 cv2.imwrite(fdata/{i:06d}.png, np.frombuffer(resp[0].image_data_uint8, np.uint8).reshape(resp[0].height, resp[0].width, 4)[..., :3]) # 深度数据(浮点)建议存pfm格式避免0-255量化损失 airsim.write_pfm_image(fdata/depth_{i:06d}.pfm, np.frombuffer(resp[1].image_data_float, np.float32).reshape(resp[1].height, resp[1].width))几个关键技巧一次simGetImages传多个请求比多次调用省 RPC 开销深度图用DepthPlanarpixels_as_floatTrue拿到浮点距离再存成 PFM 格式AirSim 自带 读写工具不要用 PNG 存深度否则会量化成 0–255 丢失精度采集前检查simGetCollisionInfo()撞上就换位姿重采参考 DataCollectorSGM 的做法需要 LiDAR 点云的话调用simGetLidarData()即可效果如下3.2 现成的采集示例脚本仓库里有一批可直接改造的 Python 示例都在 PythonClient 目录下示例用途PythonClient/computer_vision/cv_capture.py批量采集多种类型相机图像PythonClient/computer_vision/ground_truth.py采集 Ground Truth 数据PythonClient/multirotor/survey.py无人机航拍式巡线采图PythonClient/imitation_learning/cook_data.py模仿学习驾驶数据采集训练全流程PythonClient/reinforcement_learning/DQN 强化学习完整环境封装四、进阶修改录制日志加入GPS/IMU等自定义字段默认录制的字段太少AirSim 允许你从源码级扩展airsim_rec.txt的每一行内容方法见 docs/modify_recording_data.md核心方法是PawnSimApi::getRecordFileLine汽车已在 CarPawnSimApi.cpp 中覆写追加了油门/刹车等字段给多旋翼加字段如 GPS 经纬度、气压计、IMU 加速度只需在 MultirotorPawnSimApi.cpp 里覆写同名方法在表头和数据行末尾追加vehicle_api_-getBarometerData()、getImuData()等 API 的返回值即可改完需要从源码重新编译可参考 docs/build_linux.md。五、批量采集的效率优化清单 关掉主画面渲染把 settings 中ViewMode设为NoDisplay冻结主屏渲染但录制/API 采集照常工作省 GPU 资源、还能提升采集 FPSRecordOnMove: true静止不录帧显著减少无效数据Compress: true图像存压缩 PNG只有深度等浮点数据才用PixelsAsFloat PFMTimeOfDay开启动态光照见 docs/settings.md一次跑完就能拿到不同时段光照的训练样本增强模型鲁棒性多车并行Cameras配置里用VehicleName区分车辆一套场景同时采集多辆车的视角数据质检采集结束后用 LogViewer 打开airsim_rec.txt回放快速排查丢帧、撞机异常等坏样本。常见问题FAQQ1录制的图像是逐帧对齐的吗是。airsim_rec.txt每行末尾的ImageFile列直接指向对应图像时间戳精确到采样时刻可严格对齐。Q2能同时采 RGB、分割、深度三种图吗内置录制可以在Cameras数组里为同一CameraName添加多条不同ImageType的记录即可用 API 方式则把多个ImageRequest放进同一次simGetImages调用。Q3深度图为什么推荐 PFM 而不是 PNGPNG 像素只有 0–255 整数量程深度值会被压缩失真PFM 以浮点存储像素是保存深度/视差 Ground Truth 的标准格式。Q4想要真机-仿真联合训练数据怎么办可以用 MavLinkTest 录制真实无人机的操纵日志再用 Playback 功能 在 AirSim 中重放同样的动作对比生成仿真数据集。小结快速收集图像位姿就用Recording 配置 startRecording()API需要深度、点云、自定义格式就用API 循环自定义采集参考 DataCollectorSGM.h日志字段不够就改getRecordFileLine。掌握这三层递进AirSim 就能成为你的深度学习数据工厂 ⚙️。【免费下载链接】AirSimOpen source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI Research项目地址: https://gitcode.com/gh_mirrors/ai/AirSim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考