0

我正在训练各种 CNN(AlexNet、InceptionV3 和 ResNet)。该数据集由游戏的屏幕截图和一个包含 4 个类的数组组成,该数组将给定捕获的输入表示为 [w,a,s,d]。

为了减少我需要收集的数据,我研究了使用出现频率较低的类的镜像捕获。例如,如果我正在镜像左转捕获,我也会更改标签,因此 [0,1,0,0] 将变为 [0,0,0,1]。我不确定镜像是否会起作用,因为原始图像左下角的小地图包含 GPS 路线。

我还没有训练任何模型。

我正在通过opencv镜像图像并调整标签:

if choice[1]:
    new_choice[1] = 0
    new_choice[3] = 1
if choice[3]:
    new_choice[1] = 1
    new_choice[3] = 0

if new_choice != choice:
    cv2.imshow('capture', img)
    print("capture:", choice)

    flip = cv2.flip(img, 1)
    cv2.imshow('flipped', flip)
    print("flipped:", new_choice)

镜像训练数据集会对 CNN 造成什么影响?
即它是否会看不到左下角的小地图,因为它只出现在一半的训练示例中?

示例捕获及其镜像副本

4

1 回答 1

1

实验结果

常数

  • 图书馆:TFLearn
  • 基本型号:Alexnet
  • 输入尺寸:256 x 192 像素
  • 输出大小:4(多标签)
  • 输出激活:Sigmoid
  • 损失函数:二元交叉熵
  • 优化器:动量
  • 时代:30
  • 学习率:1e-3

自变量

  • 原始数据集:10981 个输入/输出对
  • 镜像数据集:20997 个输入/输出对
  • 通道:RGB、灰度、HSV、YCrCb

结果

训练后各种模型的训练精度和损失

╔════════════════════╤══════════════════╤══════════════════╗
║ Dataset x Channels │ Original         │ Mirrored         ║
║                    │ (Accuracy, Loss) │ (Accuracy, Loss) ║
╠════════════════════╪══════════════════╪══════════════════╣
║ RGB                │ 0.7843, 0.5767   │ 0.6966, 0.579    ║
╟────────────────────┼──────────────────┼──────────────────╢
║ Grey               │ 0.8464, 0.576    │ 0.7206, 0.6204   ║
╟────────────────────┼──────────────────┼──────────────────╢
║ HSV                │ 0.7515, 0.563    │ 0.8301, 0.562    ║
╟────────────────────┼──────────────────┼──────────────────╢
║ YCrCb              │ 0.794,  0.6313   │ 0.8536, 0.612    ║
╚════════════════════╧══════════════════╧══════════════════╝

训练的张量板结果 这些结果适用于训练数据集,因为我在验证工作时遇到了问题(使用 categorical_crossentroy 验证工作正常,但在使用 binary_crossentroy 时停止工作)。

概括

  • RGB 和灰度模型在原始数据集上的表现优于在镜像数据集上。
  • HSV 和 YCrCb 模型在镜像数据集上的表现优于在原始数据集上。
  • 除了 YCrCb 之外,所有模型最终都开始失去准确性。
    • 原始数据集上的 YCrCb 保持不变。
    • 镜像数据集上的 YCrCb 开始呈上升趋势。

编辑

我一直在调查为什么在训练开始时准确率约为 80%。

如果真值标签为[1,0,0,0]且预测为[0,0,0,0],则准确度为 75%,因为正确猜测了三个标签...
我目前正在寻找一种更好的方法来计算准确度(hamming_score、混淆矩阵等)。

于 2019-05-04T23:02:58.787 回答