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