Tensorflow Архитектура SegNet
Найти полного описания архитектуры SegNet для сегментации изображений мне не удалось (а именно слоёв декодера). Поэтому хотелось бы уточнить жизнеспособность моей реализации (схематично):
Input(x, x, 3)
Conv2d(64)+BatchNormalization+ReLU
Conv2d(64)+BatchNormalization+ReLU
MaxPoolWithArgMax
Conv2d(128)+BatchNormalization+ReLU
Conv2d(128)+BatchNormalization+ReLU
MaxPoolWithArgMax
Conv2d(256)+BatchNormalization+ReLU
Conv2d(256)+BatchNormalization+ReLU
Conv2d(256)+BatchNormalization+ReLU
MaxPoolWithArgMax
Conv2d(512)+BatchNormalization+ReLU
Conv2d(512)+BatchNormalization+ReLU
Conv2d(512)+BatchNormalization+ReLU
MaxPoolWithArgMax
Conv2d(512)+BatchNormalization+ReLU
Conv2d(512)+BatchNormalization+ReLU
Conv2d(512)+BatchNormalization+ReLU
MaxPoolWithArgMax
Conv2dTranspose(512)+BatchNormalization+ReLU
MaxUnpoolWithArgMax
Conv2dTranspose(512)+BatchNormalization+ReLU
Conv2dTranspose(512)+BatchNormalization+ReLU
Conv2dTranspose(512)+BatchNormalization+ReLU
MaxUnpoolWithArgMax
Conv2dTranspose(512)+BatchNormalization+ReLU
Conv2dTranspose(512)+BatchNormalization+ReLU
Conv2dTranspose(256)+BatchNormalization+ReLU
MaxUnpoolWithArgMax
Conv2dTranspose(256)+BatchNormalization+ReLU
Conv2dTranspose(256)+BatchNormalization+ReLU
Conv2dTranspose(128)+BatchNormalization+ReLU
MaxUnpoolWithArgMax
Conv2dTranspose(128)+BatchNormalization+ReLU
Conv2dTranspose(64)+BatchNormalization+ReLU
MaxUnpoolWithArgMax
Conv2dTranspose(64)+BatchNormalization+ReLU
Conv2dTranspose(1)+Softmax
В обучающей выборке представлены изображения разных разрешений и соотношений сторон (но не более 512x512, т.к. обработка бОльшего размера занимает очень много времени). Так же приходится следить, чтобы длина каждой стороны была кратна 32, иначе в каком-нибудь слое MaxUnpoolWithArgMax может не сойтись размерность выхода предыдущего слоя и размерность тензора с индексами вершин (выход соответствующего слоя подвыборки). Следует проводить нормализацию датасета в целом (всех изображений) или можно положиться на слои пакетной нормализации? Сеть будет обучаться 1 классу и в обучающих масках будет только 2 значения: 0 и 1 (для каждого пикселя входного изображения соответственно). Следует как то дополнительно обрабатывать маску? При обработке выхода сети подходит ли 0.5 как пороговое значение для активации (то есть >=0.5 - этот пиксель входного изображения относится к классу, в противном случае - нет)? Возможно кто то подскажет как можно облегчить конкретно эту сеть, ведь распознавать нужно всего 1 класс, а не несколько десятков или сотен.
Можно ли инициализировать веса слоёв энкодера весами ImageNet для ускорения обучения? В так случае потребуется преобразовать обучающую выборку в соответствии с обучающей выборкой этой сети, но не станет ли проблемой разница входного размера изображений (для ImageNet он был фиксирован 224x224)?