Проблемы и сбои в обнаружении нескольких классов с YOLO v2, тогда как обнаружение в одном классе почти точно
Для курсового проекта я обучаю однопроходную сеть для обнаружения нескольких символов инструментов на изображении. Очень небольшое подмножество этих классов показано ниже.
Image_Class_1 Image_Class_2 Image_Class_3 Image_Class_4
Я использую YOLO v2 для обучения и обнаружения нескольких классов в изображении. Поскольку набор данных для таких символов не существует, я выполнил увеличение данных следующими двумя способами для четырех символов, показанных выше.
- Вращение каждого типа символа с шагом 0,5 градуса, что обеспечивает 720 изображений для каждого класса.
- Кроме того, полученные 720 изображений были пропущены через размытие по Гауссу (фильтр 5х5).
Это увеличивает набор данных до 1440 изображений на класс.
Файл конфигурации для YOLO v2 был изменен только в следующих строках:
- Строка 3: партия = 64
- Строка 4: подразделение = 64 (размер подразделения 8 приводит к нехватке памяти в CUDA).
- Строка 244: классы = 4
- Строка 237: фильтры =(классы + 5)*5 = 45.
Размер изображения, используемый для обучения, составляет 500x500, а весь набор данных делится на 80% и 20% для обучения и тестирования.
Обучение сети продолжалось до 3100 итераций, а средняя потеря составляла 0,048.
Тем не менее, результаты обучения меня немного смутили, так как результаты довольно неожиданны в случае обнаружения нескольких классов. В классификации с одним классом на тестовом изображении сеть работает как ожидалось (хотя и не очень хорошо для двух классов, которые, возможно, могут быть улучшены), как показано ниже:
Обнаружение class_2_image (вероятность = 78%) Обнаружение class_1_image (вероятность = 98%) Обнаружение class_3_image (вероятность = 98%)
Тем не менее, когда я попытался выполнить мультиклассовое обнаружение на тестовых изображениях, обнаружение и классификация не удаются полностью, как можно видеть на полученных изображениях ниже:
Обнаружение мультикласса смещено для класса_3
Если я изменю пространственное расстояние между символами в тестовом изображении, тогда ограничивающие рамки и предсказание класса станут еще более случайными. Следовательно, у меня есть несколько вопросов относительно этой проблемы:
- Поскольку YOLO также выполняет неявное увеличение данных, мешает ли мой процесс увеличения данных обучению?
- Нужно ли изменять размер изображения до точного 416X416 в качестве входных данных, необходимых для YOLO v2?
- Я понимаю, что YOLO v2 - это очень тяжелая архитектура CNN, которая, возможно, не предназначена для таких изображений, но результаты классификации для одного класса слишком многообещающие, чтобы их игнорировать. Так может кто-то выяснить, почему он не работает полностью для обнаружения нескольких классов?
- Должен ли я использовать YOLO v2 как есть или изменить его, чтобы обнаружить эти символы на изображениях? Я предполагаю, что, если я изменю, я рискую потерять больше и ухудшить обнаружение далее.