Как обучить CNN для удаления шума из изображений с помощью Matlab - PullRequest
0 голосов
/ 31 января 2019

В настоящее время я работаю над моим проектом, в котором я хочу использовать сверточные нейронные сети для удаления шума из изображений.Я говорю об устранении шума Пуассона.Программное обеспечение, которое я использую, - Matlab 2018b.Однако, следуя всем инструкциям с этого сайта, я получаю плохие результаты.Теперь я в общих чертах объясню свою реализацию и также опубликую свой исходный код в надежде, что кто-то может указать, где я делаю ошибку.

  1. Сначала я создал папку с небольшимколичество тренировочных изображений, взятых из набора данных PASCAL VOC.Учебный набор состоит из 40 изображений, и я использую такой небольшой набор данных, чтобы посмотреть, способна ли сеть дать какой-либо значимый результат, прежде чем тренировать его с полным набором данных.

  2. Iиспользовал ранее созданную папку с обучающими изображениями для создания imageDataStore, поэтому у меня есть легкий доступ ко всем изображениям

  3. Затем, используя цикл for, я изменил размеры всех изображений в хранилище данных,применил ко всем из них пуассоновский шум и сохранил их в папке с именем X. Нетронутые изображения были сохранены в папке с именем Y.

  4. Используя цикл for, я сохранял зашумленные изображения в4D массив с именем X, с размерами высота х ширина х каналов х Количество изображений.Я сделал то же самое с нетронутыми изображениями, вызвав 4D массив Y.

  5. Сделал проверку 4D массивов, содержащих десять изображений из исходного обучающего набора 40.

  6. Определял слои ConvNet с помощью функции dnCNNLayers из matlab.Я пошел на сеть из 11 слоев.Слои, которые он дает, можно найти здесь .

  7. Для опций обучения я установил решатель 'sgdm', начальная скорость обучения 1e-7, макс. Эпохдо 500, частота проверки - до 5, и я настроил ее на тренировку с помощью моего графического процессора.

  8. Процесс обучения начинается с выполнения следующей команды netPoisson=trainNetwork(X,Y,layers,options);.Здесь X - это массив 4D, содержащий зашумленные изображения, а Y содержит все нетронутые изображения.

  9. Вот снимок из завершенного процесса обучения.Обратите внимание, насколько абсурдно велика RMS для валидации.enter image description here

  10. На этом шаге я проверяю сеть на образце изображения из набора данных с помощью следующей команды denoisedI=denoiseImage(noisyI, netPoisson); Здесь мы можем увидеть нетронутое изображение, шумный образ, и образ, который должен был быть шумным.enter image description here

  11. Вычитание зашумленного изображения и предположительно зашумленного изображения позволяет получить изображение без шума, но это не имеет никакого смысла.

    Код Matlab для всего этого здесь .Будем благодарны за любую помощь.

С уважением, Эмир.

...