Я пытаюсь обучить модель глубокого обучения сверхвысокому разрешению изображения и хочу реализовать оценку PIQE как функция потерь. Поскольку я буду обучать модель с помощью pytorch, я пытался создать собственную реализацию алгоритма Python для вычисления оценки PIQE.
В качестве первого шага я рассмотрел реализацию piqe в MATLAB ( ссылка ведет на главную страницу, но я просматриваю исходный код), чтобы посмотреть, как это делается, а затем адаптировать его для Python. Однако есть одна вещь, которая меня смущает.
Оценка PIQE начинается с расчета нормированных по контрасту коэффициентов среднего вычитания по следующей формуле:
Но код Matlab на этом этапе выглядит так:
mu = imgaussfilt(ipImage,7/6,'FilterSize',7,'Padding','replicate');
sigma = sqrt(abs(imgaussfilt(ipImage.*ipImage,7/6,'FilterSize',7,'Padding','replicate') - mu.*mu));
imnorm = (ipImage-mu)./(sigma+1);
Я озадачен расчетом дисперсии, сигмы. В алгоритме статьи для каждого пикселя вычисляется среднее значение окрестности 7x7, а затем вычитается из каждого значения указанной окрестности 7x7. Затем разности возводятся в квадрат и умножаются на соответствующий гауссовский вес w(k,l)
Вместо этого алгоритм MATLAB умножает взвешивание Гаусса (используя imgausssfilt
) на квадраты значений пикселей, а затем вычитает квадраты средних из этой матрицы, принимая абсолютные значения этой операции. Поправьте меня, если я ошибаюсь, но разве это не случай ошибочного использования (a-b)² = a² - b² ?
В основном мой вопрос заключается в том, не могли бы вы подтвердить, верно ли то, что я сказал ранее, или я неправильно истолковал код MATLAB. Заранее спасибо!
abs
? - person Cris Luengo   schedule 07.12.2020abs
«необходим» для небольших отклонений, когда ошибки округления могут сделать E (X ^ 2) - E (X) ^ 2 отрицательным, поэтому я всегда предпочитаю использовать определение непосредственно при взятии квадрата в конце. - person Nicky Mattsson   schedule 08.12.2020