Вопрос или проблема
Я использую PyTorch для создания модели, которая обнаруживает определенные объекты на изображении. Я представил свою задачу как регрессию на ограничительные рамки, без какой-либо задачи классификации. Причина заключается в том, что мне не нужно знать класс, мне просто нужно, чтобы моя модель локализовала объект на изображении, если он существует.
Каждое изображение может содержать до 2 объектов с их ограничительными рамками, поэтому моя цель – матрица размером 2×2, или скорее тензор PyTorch с формой [2,4]
У меня есть 2 блока Conv2d и MaxPool2d, после которых у меня 3 блока Linear-ReLU-Dropout, и, наконец, Unflatten, чтобы изменить форму выходных данных модели для соответствия расчету функции потерь. Вот фрагмент из класса модели
Sequential(
Conv2d(3, 32, kernel_size = (7,7)),
MaxPool2d(kernel_size = (4,4)),
Conv2d(32,16 , kernel_size = (3,3)),
MaxPool2d(kernel_size=(2,2)),
ReLU(),
Flatten()
)
Sequential(
Linear(19600, 256),
ReLU(),
Dropout(0.2),
Linear(256, 64),
ReLU(),
Dropout(0.2),
Linear(64,8),
Unflatten(1,(2,4))
)
Метки выглядят так.
- Если в изображении нет объектов – это нулевой тензор формы [2,4]
- Если в изображении один объект – это тензор формы [2,4], где первая строка – это координаты ограничительной рамки в формате (xmin,ymin,xmax,ymax), а вторая строка – нули
- Если в изображении два объекта – это тензор формы [2,4], где обе строки содержат координаты ограничительных рамок в формате (xmin, ymin, xmax, ymax)
Я использую функцию потерь DIoU со средним уменьшением. Что я замечаю, это следующее:
- Мои потери на валидационном наборе постоянны на протяжении всех эпох
- Мои потери на тренировочном наборе уменьшаются до определенного момента, после которого они также становятся постоянными.
- Даже с такими переделанными моделями я все же пробовал делать выводы, чтобы увидеть, какие предсказания я получаю на тестовом наборе, и я получаю предсказания ограничительных рамок, которые являются очень большими положительными или отрицательными целыми числами, находящимися за пределами области моего изображения.
Независимо от используемой техники регуляризации (а я пробовал Dropout, а также декомпозицию весов) или выбора скорости обучения, которую я пытался установить на более высокое значение, чтобы, возможно, избежать застревания в локальном минимуме, мои потери просто не уменьшаются, и я не могу получить качественные предсказания на выводе.
У меня складывается впечатление, что я упускаю что-то довольно фундаментальное, но не могу понять, что это может быть. Я новичок в pytorch, поэтому у кого-нибудь есть идеи, что я могу попробовать, чтобы это начало что-то учить? Рад предоставить больше фрагментов кода в комментариях.
Спасибо!
Удалите конечные нули для случаев без объектов и с одним объектом. Кодируйте только там, где находится объект, а не то, что другого объекта нет. Это сбивает обучение. Если на изображении нет ограничительных рамок, это нормально. Поэтому, если на определенном изображении нет объектов, просто не включайте соответствующие этому изображению ограничительные рамки в файл.
Ответ или решение
Для решения задачи регрессии ограничительных рамок без задачи классификации в контексте нейронных сетей на базе PyTorch, необходимо учесть несколько ключевых моментов.
Постановка задачи
Цель вашего проекта заключается в локализации объектов на изображении, не учитывая их классификацию. Модель должна предсказывать координаты ограничительных рамок, что представлено тензором формы [2,4]
. Эта архитектура означает, что вы ожидаете, что на изображении может находиться до двух объектов, каждый из которых описывается четырехзначным вектором: (xmin, ymin, xmax, ymax)
.
Проблемы и их причины
-
Проблемы с потерей на валидационном этапе: Постоянная валидационная потеря может указывать на отсутствие генерализации модели или на проблемы с обучением, такие как несоответствие структуры данных или способы предобработки данных с самим тегированием.
-
Некорректные предсказанные значения ограничительных рамок: Проблемы с чрезмерно большими или отрицательными координатами могут возникнуть из-за отсутствия нормализации данных или неправильной архитектуры сети.
Предложения по улучшению
-
Обработка меток:
- Убедитесь, что метки данных правильно интерпретируются. Если на изображении нет объектов, представление метки должно быть пустым, а не тензором с нулями. Используйте только те тензоры, которые действительно описывают присутствующие на изображении объекты.
-
Архитектура сети:
- Проверьте соответствие архитектуры модели задаче и распределению входных данных. Возможно, стоит пересмотреть выбор гиперпараметров, таких как количество слоёв, размер плоских слоев, или реализацию активации, применяемую в скрытых слоях.
- Убедитесь, что используемые потери (DIoU) настроены для работы с текущим масштабом данных и предсказываемых значений.
-
Предобработка данных:
- Убедитесь, что данные изображений и метки предсказываемых значений должным образом нормализованы, и это соответствует реалиям предобработки тренингового набора.
-
Стратегии обучения:
- Рассмотрите использование адаптивной стратегии обучения, такой как использование динамического изменения скорости обучения или применения техники ранней остановки.
- Исследуйте возможность ускорения выхода из локального минимума, такие как начальная предварительная тренировка с нагреваемым стартом.
Резюме
Ваша задача сложна, так как комбинирует аспекты регрессии с использованием нейронных сетей. Чтобы добиться успеха, важно обеспечить как эффективную обработку входных данных, так и соответствующую инфраструктуру нейронной модели. Подробное понимание структуры данных и настроек модели, чтобы они соответствовали изменениям, также будет важным ключом к улучшению производительности, что демонстрирует уровень профессионализма и знания PyTorch.
SEO Оптимизация
Учитывая специфику вашего запроса, я предложил детальные рекомендации по улучшению процесса обучения модели, описав ключевые моменты проблемы и методологию их решения. Это должно помочь в оптимизации поиска решений в подобных случаях и обеспечить качественную локализацию объектов на изображениях без классификации.