Для курсового проекта я обучаю однопроходную сеть для обнаружения нескольких символов инструментов на изображении.Очень небольшое подмножество этих классов показано ниже.
Image_Class_1 Image_Class_2 Image_Class_3 Image_Class_4
Я использую YOLO v2 для обучения и обнаружения нескольких классов на изображении.Так как набор данных для таких символов не существует, я выполнил увеличение данных следующими двумя способами для четырех символов, показанных выше.
- Поворот каждого типа символа с шагом 0,5 градуса, что обеспечивает 720изображений для каждого класса.
- Кроме того, полученные 720 изображений были пропущены через размытие по Гауссу (фильтр 5x5).
Это увеличивает набор данных до 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%)
Однако, когда я пытался выполнить многоклассовое обнаружение на тестовых изображенияхобнаружение и классификация завершаются неудачно полностью, как видно на следующих изображениях:
Обнаружение мультикласса смещено для class_3
Если я изменяю пространственное расстояние между символами втестовое изображение, тогда ограничивающие рамки и классовые предсказания становятся еще более случайными.Поэтому у меня есть несколько вопросов относительно этой проблемы:
- Поскольку YOLO также выполняет неявное увеличение данных, мешает ли мой процесс увеличения данных обучению?
- Нужно ли изменять размер изображения до точного 416X416 в качестве входных данных, необходимых для YOLO v2?
- Я понимаю, что YOLO v2 - это очень тяжелая архитектура CNN, которая, возможно, не предназначена для таких изображений, но результаты классификации по одному классу слишком многообещающие, чтобы их игнорировать.Так может кто-то выяснить, почему он не работает полностью для обнаружения нескольких классов?
- Должен ли я использовать YOLO v2 как есть или изменить его, чтобы обнаружить эти символы на изображениях?Я предполагаю, что, если я изменяю, я рискую потерять больше и ухудшить обнаружение далее.