Предварительная обработка изображений в глубоком обучении
Я экспериментирую с глубоким изучением изображений. У меня около ~ 4000 изображений с разных камер с различными условиями освещения, разрешениями изображения и углом обзора.
Мой вопрос: Какая предварительная обработка изображения была бы полезной для улучшения обнаружения объектов? (Например: нормализация контраста/цвета, шумоподавление и т.д.)
Ответы
Ответ 1
Для предварительной обработки изображений перед подачей их в нейронные сети. Лучше сделать данные по центру нуля. Затем попробуйте метод нормализации. Это, безусловно, повысит точность, поскольку данные масштабируются в диапазоне, превышающем произвольно большие значения или слишком малые значения.
Пример изображения будет: -
![enter image description here]()
Вот объяснение этого из лекций Stanford CS231n 2016 года.
*
Нормализация относится к нормализации измерений данных таким образом, чтобы они имели приблизительно одинаковый масштаб. Для данных изображений Есть два распространенных способа достижения этой нормализации. Один из них состоит в том, чтобы разделить каждое измерение на его стандартное отклонение, как только оно будет центрировано по нулю:
(X /= np.std(X, axis = 0))
. Другая форма этой предварительной обработки нормализует каждое измерение, так что min и max вдоль измерения составляют -1 и 1 соответственно. Имеет смысл применять эту предварительную обработку только в том случае, если у вас есть основания полагать, что разные входные функции имеют разные шкалы (или единицы измерения), но они должны иметь приблизительно одинаковое значение для алгоритма обучения. В случае изображений относительные масштабы пикселей уже приблизительно равны (и находятся в диапазоне от 0 до 255), поэтому нет необходимости выполнять этот дополнительный этап предварительной обработки.
*
Ссылка для вышеупомянутой выдержки: - http://cs231n.github.io/neural-networks-2/
Ответ 2
Это конечно поздний ответ на этот пост, но, надеюсь, поможет кто наткнулся на этот пост.
Вот статья, которую я нашел в Интернете Предварительная обработка данных изображения для нейронных сетей, хотя я, конечно же, хорошо написал статью о том, как следует обучать сеть.
Основная суть статьи гласит:
1) В качестве данных (изображений), немногочисленных в NN, следует масштабировать в соответствии с размером изображения, на которое рассчитан NN, обычно это квадрат, т.е. 100x100,250x250
2) Учитывайте значения MEAN(левое изображение) и STANDARD DEVIATION(правое изображение) для всех входных изображений в вашей коллекции определенного набора изображений
![enter image description here]()
3) Нормализация входных данных изображения выполняется путем вычитания среднего значения из каждого пикселя, а затем деления результата на стандартное отклонение, что ускоряет сходимость при обучении сети. Это будет похоже на гауссову кривую с центром в нуле
![enter image description here]()
4)Уменьшение размерности Изображение из RGB в градациях серого, производительность нейронной сети может быть неизменной по отношению к этому измерению или сделать задачу обучения более удобной для решения.
![enter image description here]()
Ответ 3
Прочитайте этот, надеюсь, это будет полезно. Идея состоит в том, чтобы разбить входное изображение на части. Это называется R-CNN (здесь - некоторые примеры). Для этого процесса существуют два этапа: обнаружение объектов и сегментация. Обнаружение объекта - это процесс, когда определенные объекты на переднем плане обнаруживаются путем наблюдения за изменениями в градиенте. Сегментация - это процесс, когда объекты объединяются в изображение с высокой контрастностью. Высококачественные детекторы изображений используют байесовскую оптимизацию, которая может обнаружить, что может произойти дальше, используя локальную точку оптимизации.
В принципе, в ответ на ваш вопрос все параметры предварительной обработки, которые вы указали, кажутся хорошими. Поскольку контрастность и нормализация цвета заставляют компьютер распознавать разные объекты, а шумоподавление сделает градиенты более легко различимыми.
Я надеюсь, что вся эта информация вам полезна!
Ответ 4
В дополнение к тому, что упомянуто выше, отличным способом улучшения качества изображений с низким разрешением (LR) было бы создание суперразрешения с использованием глубокого обучения. Это означало бы создание модели глубокого обучения, которая преобразовывала бы изображение с низким разрешением в высокое разрешение. Мы можем преобразовать изображение с высоким разрешением в изображение с низким разрешением, применяя функции ухудшения качества (фильтры, такие как размытие). По существу это будет означать LR = ухудшение (HR), где функция ухудшения будет преобразовывать изображение с высоким разрешением в низкое разрешение. Если мы можем найти обратную функцию, то мы преобразуем изображение с низким разрешением в высокое разрешение. Это можно рассматривать как контролируемую проблему обучения и решать с помощью глубокого обучения, чтобы найти обратную функцию. Наткнулся на эту интересную статью о введении в супер-разрешение с использованием глубокого обучения. Надеюсь, это поможет.