返回列表

2d-CNN for sparse heatmap images and MLP (1st stage 45th, 2nd stage 42nd place)

356. NFL Big Data Bowl | nfl-big-data-bowl-2020

开始: 2019-10-09 结束: 2020-01-06 赛事预测 数据算法赛
2d-CNN for sparse heatmap images and MLP

摘要:

用于稀疏热力图图像的 2d-CNN(卷积神经网络)和用于表格数据的 MLP(多层感知机)。

CNN 的输入张量

生成了 30 x 54 码网格(四舍五入为整数)的热力图式场地图像,范围是 ((YardLine - 10) <= X < (YardLine + 20)) 和 (0 <= Y < 54)。

经过多次实验,以下 18 个通道(= 3 x 3 x 2)的组合效果最好。

3 种球员类别:

  • 11 名防守球员
  • 10 名进攻球员(不包括持球跑卫)
  • 持球跑卫(持球者)

3 种变量:

  • A(加速度)
  • S_X(X 轴速度)
  • S_Y(Y 轴速度)

2 帧:

通过加上速度计算 1 秒后的另一张快照。(也尝试了加上加速度,但没有提高性能。)

CNN 架构

  • 4 层
  • 保留 X 方向直到全连接层,仅在 Y 方向进行压缩 (stride=[1, 2]),因为 X 方向与结果变量(码数)相关。
  • 连接不同大小的卷积核,如 Inception 架构所介绍
  • CELU 激活函数(训练速度比 ReLU 略快)

CNN 部分的架构在 PyTorch 的 YAML 中配置如下。

(关于语法请参阅 PipelineX

  =: torch.nn.Sequential
  _:
    - {=: pipelinex.TensorSlice, end: 18}
    - =: pipelinex.ModuleConcat
      _:
        - {=: pipelinex.TensorConv2d, in_channels: 18, out_channels: 10, kernel_size: [3, 3]}
        - {=: pipelinex.TensorConv2d, in_channels: 18, out_channels: 10, kernel_size: [7, 7]}
        - {=: pipelinex.TensorConv2d, in_channels: 18, out_channels: 10, kernel_size: [3, 9]}
    - {=: torch.nn.CELU, alpha: 1.0}
    - =: pipelinex.ModuleConcat
      _:
        - {=: pipelinex.TensorAvgPool2d, stride: [1, 2], kernel_size: [3, 3]}
        - {=: pipelinex.TensorConv2d, stride: [1, 2], in_channels: 30, out_channels: 10, kernel_size: [3, 3]}
        - {=: pipelinex.TensorConv2d, stride: [1, 2], in_channels: 30, out_channels: 10, kernel_size: [7, 7]}
        - {=: pipelinex.TensorConv2d, stride: [1, 2], in_channels: 30, out_channels: 10, kernel_size: [3, 9]}
    - {=: torch.nn.CELU, alpha: 1.0}
    - =: pipelinex.ModuleConcat
      _:
        - {=: pipelinex.TensorAvgPool2d, stride: [1, 2], kernel_size: [3, 3]}
        - {=: pipelinex.TensorConv2d, stride: [1, 2], in_channels: 60, out_channels: 20, kernel_size: [3, 3]}
        - {=: pipelinex.TensorConv2d, stride: [1, 2], in_channels: 60, out_channels: 20, kernel_size: [7, 7]}
        - {=: pipelinex.TensorConv2d, stride: [1, 2], in_channels: 60, out_channels: 20, kernel_size: [3, 9]}
      # -> [N, 120, 30, 14]
    - {=: torch.nn.CELU, alpha: 1.0}
    - =: pipelinex.ModuleConcat
      _:
        - =: torch.nn.Sequential
          _:
            - {=: torch.nn.AvgPool2d, stride: [1, 2], kernel_size: [3, 14]}
            # -> [N, 120, 28, 1]
            - {=: pipelinex.TensorConv2d, in_channels: 120, out_channels: 20, kernel_size: [