Каковы недостатки зеркального отображения обучающих изображений CNN, которые содержат привязанные данные? - PullRequest
0 голосов
/ 25 апреля 2019

Я тренирую различные 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 окажет зеркальный набор обучающих данных?
Т.е. не будет ли отображена миникарта в левом нижнем углу, как это было толькотам в половине обучающих примеров?

Пример захвата и его зеркальный аналог

1 Ответ

1 голос
/ 05 мая 2019

Экспериментальные результаты

Константы

  • Библиотека: TFLearn
  • Базовая модель: Alexnet
  • Размер ввода: 256 на 192 px
  • Размер вывода: 4 (мульти-метка)
  • Активация выхода: сигмоид
  • Функция потерь: двоичная кросс-энтропия
  • Оптимизатор: Импульс
  • Эпохи:30
  • Скорость обучения: 1e-3

Независимые переменные

  • Исходный набор данных: 10981 пар ввода / вывода
  • Зеркальный набор данных:20997 пар ввода / вывода
  • Каналы: RGB, Greyscale, 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    ║
╚════════════════════╧══════════════════╧══════════════════╝

The tensorboard result of training Эти результаты относятся к набору данных обучения, так как у меня возникли проблемы с получением проверки на работу (проверка работала нормально с categoryorical_crossentroy, но перестала работать при использованииbinary_crossentroy).

Резюме

  • Мод RGB и GreyscaleEls работали лучше на исходном наборе данных, чем на зеркальном наборе данных.
  • Модели HSV и YCrCb работали лучше на зеркальном наборе данных, чем на исходном наборе данных.
  • Все модели в конечном итоге начали терять точность, кромеYCrCb.
    • YCrCb в исходном наборе данных остается постоянным.
    • YCrCb в зеркальном наборе данных начинает расти вверх.

EDIT

Я исследовал, почему точность составляла ~ 80% в начале обучения.

Если метка истины была [1,0,0,0], а прогноз составлял [0,0,0,0], то точность равна 75% как три изметки были правильно угаданы ...
В настоящее время я ищу лучший способ вычислить точность (Hamming_score, путаница матрица и т. д.).

...