镜像包含锚定数据的 CNN 训练图像有哪些缺点?
What are the disadvantages of mirroring CNN training images that contain anchored data?
我正在训练各种 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 造成什么影响?
IE。它会不会看不到左下角的小地图,因为它只出现在一半的训练样例中?
Example capture and its mirrored counterpart
实验结果
常量
- 图书馆:TFLearn
- 基础模型:Alexnet
- 输入大小:256 x 192 像素
- 输出大小:4(多标签)
- 输出激活:Sigmoid
- 损失函数:二元交叉熵
- 优化器:Momentum
- 纪元:30
- 学习率:1e-3
自变量
- 原始数据集:10981 input/output 对
- 镜像数据集:20997 input/output 对
- 通道: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、混淆矩阵等)。
我正在训练各种 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 造成什么影响?
IE。它会不会看不到左下角的小地图,因为它只出现在一半的训练样例中?
Example capture and its mirrored counterpart
实验结果
常量
- 图书馆:TFLearn
- 基础模型:Alexnet
- 输入大小:256 x 192 像素
- 输出大小:4(多标签)
- 输出激活:Sigmoid
- 损失函数:二元交叉熵
- 优化器:Momentum
- 纪元:30
- 学习率:1e-3
自变量
- 原始数据集:10981 input/output 对
- 镜像数据集:20997 input/output 对
- 通道: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 ║
╚════════════════════╧══════════════════╧══════════════════╝
总结
- RGB 和灰度模型在原始数据集上的表现优于在镜像数据集上的表现。
- HSV 和 YCrCb 模型在镜像数据集上的表现优于在原始数据集上的表现。
- 除 YCrCb 外,所有模型最终都开始失去准确性。
- 原始数据集上的 YCrCb 保持不变。
- 镜像数据集上的 YCrCb 开始呈上升趋势。
编辑
我一直在调查为什么在训练开始时准确率约为 80%。
如果真实标签为 [1,0,0,0]
且预测为 [0,0,0,0]
,则准确率为 75%,因为正确猜出了三个标签...
我目前正在寻找一种更好的方法来计算准确度(hamming_score、混淆矩阵等)。