项目背景

本项目旨在探索如何使用卷积神经网络(ResNet)提取图像空间特征,并结合LSTM对时序依赖进行建模,从而预测车辆在自动驾驶中的转向角度。

此任务属于端到端自动驾驶建模的一部分,重点在于将连续图像帧映射为连续控制输出(方向盘角度)。

模型结构概览

整体结构采用两阶段:

  1. ResNet 特征提取:对每帧输入图像进行空间编码,提取每一帧的空间语义信息,如车道线、前车位置等。
  2. LSTM 序列建模:将序列化的图像特征送入LSTM,实现对短期历史状态的记忆和对当前状态的连续预测,预测未来1~N帧的角度

模型结构图

模型结构

数据与预处理

数据来源为模拟驾驶场景中的中心摄像头图像,标签为方向盘角度。

  • 输入帧尺寸统一为 224x224
  • 标签为每帧角度(可选包含扭矩、车速)
  • 图像预处理:resize → normalize → batch
  • 标签标准化:使用均值/方差归一化角度值
  • 损失函数:MSE 均方误差损失
  • 优化器:Adam, 学习率 = 1e-4
  • 序列长度:T = 5(即每个样本为连续5帧)

实验结果

在测试集上,MSE 误差为 0.06,对应角度误差约为
模型在直线段表现稳定,在连续转弯段有一定预测延迟

loss_curve

关键代码片段:

class ResNetLSTMModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.resnet = resnet18(pretrained=True)
        self.lstm = nn.LSTM(input_size=512, hidden_size=128, batch_first=True)
        self.fc = nn.Linear(128, 1)

    def forward(self, x_seq):
        batch, seq_len, C, H, W = x_seq.shape
        feats = [self.resnet(x_seq[:, i]) for i in range(seq_len)]
        feats = torch.stack(feats, dim=1)  # [B, T, D]
        out, _ = self.lstm(feats)
        return self.fc(out[:, -1])

模型选择与对比分析

为什么选择 ResNet 而不是简单 CNN:

预训练权重可加快收敛

ResNet 的残差结构对特征提取更加稳健

为什么用 LSTM 而不是 FC:

能捕捉时间上的上下文依赖

适合处理图像序列任务(比 RNN 收敛更稳定)

我的思考

  • ResNet 有效提取空间特征,但模型在连续转弯区域仍存在滞后

  • 真正部署前还需加入控制平滑性约束、sensor fusion、时延补偿等;

  • 若加入车辆状态如速度、上帧角度,效果可能进一步优化。

  • 可扩展方向包括: 使用 Transformer 替代 LSTM

    引入 attention 模块

    增加辅助状态输入(车速、扭矩等)

延伸阅读


下一篇预告:
LSTM在连续控制任务中的优势,以及与Transformer的对比。