4

Я работаю над ограниченным количеством изображений большого размера, каждый из которых может содержать 3072*3072 пикселей. Чтобы обучить семантическую модель сегментации с использованием FCN или U-net, я создаю большую выборку обучающих наборов, каждый обучающий образ 128*128.Семантическая сегментация для больших изображений

На этапе прогнозирования я должен нарезать большое изображение на мелкие кусочки, как и набор для тренировки 128*128, и подавать эти маленькие кусочки в обученную модель, получать прогнозируемую маску. Впоследствии я просто сшиваю эти маленькие патчи, чтобы получить маску для всего изображения. Является ли это правильным механизмом для выполнения семантической сегментации против больших изображений?

+0

Почему бы вам не подобрать модель прямо на изображениях '3072' напрямую? – drpng

+1

Имеет только 100 изображений около 3072 изображений. Кроме того, обучение по большим изображениям кажется слишком медленным. Я пробовал обучать модель с 256 * 256, 128 * 128 и 64 * 64. Время обучения увеличивается очень быстро, так как размер патча увеличивается. – user288609

ответ

1

Данные входного изображения: Я бы не советовал подавать большое изображение (3072x3072) прямо в кофе. Пакет небольших изображений будет лучше вписываться в память, и параллельное программирование тоже вступит в игру. Усовершенствование данных также будет возможно.

Выход для большого изображения: Что касается вывода большого изображения, лучше всего изменить размер входного сигнала FCN на 3072x3072 во время фазы тестирования. Поскольку слои FCN могут принимать входы любого размера. Затем вы получите 3072x3072 сегментированное изображение в качестве выходного.

+0

Привет, Кишен, спасибо за ответ. Что вы имеете в виду «переделать» в «пересчитать размер ввода FCN до 3072x3072 во время тестовой фазы». Нужно ли мне менять архитектуру FCN (в частности, форма первого слоя) даже после завершения учебного процесса? Я использую Keras, обычно он загружает обученный вес на этапе прогнозирования. Если архитектура будет изменена, вес нагрузки не будет работать. – user288609

+0

Попробуйте это http://stackoverflow.com/questions/39814777/can-keras-deal-with-input-images-with-different-size – curio1729

+0

Спасибо за это, вот что я ищу.Кстати, кажется, что мы можем кормить процесс обучения разным размером изображений, верно? – user288609

0

Ваше решение часто используется для решения этой проблемы. Тем не менее, я бы сказал, что это зависит от данных, если это действительно имеет смысл. Позвольте мне привести два примера, которые вы все еще можете найти в kaggle.

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

Если вы хотите сегментировать автомобиль на своем фоне, не хотелось бы разбивать его на пятна. На нескольких уровнях сеть узнает глобальное распределение автомобиля в кадре. Очень вероятно, что маска положительна в середине и отрицательна в углах изображения.

Поскольку вы не указали какой-либо специфики, что вы пытаетесь решить, я могу дать только общую рекомендацию: Постарайтесь сохранить входные изображения настолько большими, насколько позволяет ваше оборудование. Во многих ситуациях я предпочел бы уменьшить исходные изображения, чем разбивать их на патчи.

Что касается рекомендации curio1729, я могу посоветовать только обучение на небольших участках и тестирование исходных изображений. Хотя это технически возможно благодаря полностью сверточным сетям, вы меняете данные до предела, что может сильно повредить производительность. CNN известны тем, что они извлекают локальные функции, но есть большая часть глобальной информации, которая изучается над абстракцией нескольких слоев.