Вычесть среднее из изображения

Я использую CNN с Theano. В этой статье я должен сделать этот предварительный процесс изображения перед поездкой CNN

We extracted RGB patches of 61x61 dimensions associated with each poselet activation, subtracted the mean and used this data to train the convnet model shown in Table 1

Можете ли вы сказать мне, что это значит, "вычитал среднее"? Скажите, правильны ли эти шаги (это то, что я понял) 1) Вычислить среднее значение для красного канала, зеленого канала и синего канала для всего изображения 2) Для каждого пикселя вычитайте из красного значения среднее значение красного канала, от зеленого значения среднее зеленого канала и то же самое для синего канала 3) Правильно ли иметь отрицательное значение или я использую абс?

Спасибо всем!

Ответ 1

Вы должны внимательно прочитать бумагу, но наиболее вероятно, что они означают средние патчи, поэтому у вас есть N матрицы 61x61 пикселей, что эквивалентно вектору length 61^2 (если есть три канала, тогда 3*61^2). Что они делают - они просто вычисляют среднее для каждого измерения, поэтому они вычисляют среднее значение по этим векторам N по отношению к каждому из измерений 3*61^2. В результате они получают средний вектор длины 3*61^2 (или средний матричный/средний патч, если вы предпочитаете), и они вычитают его из всех этих патчей N. Полученные патчи будут иметь отрицательные значения, это прекрасно, вы не должны принимать значение abs, нейронные сети предпочитают такие данные.

Ответ 2

Я бы предположил, что среднее значение, упомянутое в статье, - это среднее значение для всех изображений, используемых в обучающем наборе (вычисленное отдельно для каждого канала).

Несколько указаний:

Это, конечно, только косвенные доказательства, так как я не могу объяснить вам, почему это происходит. На самом деле я наткнулся на этот вопрос, пытаясь понять именно это.

//EDIT:

В то же время я обнаружил источник, подтверждающий мое требование (выделение добавлено мной):

Существуют три распространенные формы предварительной обработки данных матрицы X [...]

Среднее вычитание является наиболее распространенной формой предварительной обработки. Это включает вычитание среднего значения для каждой отдельной функции в данных, и имеет геометрическую интерпретацию центрирования облака данные вокруг начала координат вдоль каждого измерения. В numpy эта операция будет выполняться как: X - = np.mean(X, ось = 0). С изображениями в частности, для удобства можно вычесть одно значение из всех пикселей (например, X - = np.mean(X)) или сделать это отдельно через три цветовых канала.

Как мы видим, все данные используются для вычисления среднего значения.