Здравствуйте, стоит задача поиска объекта с помощью полносверточной нейронной сети, используя Keras, theano, на языке python. На данный момент используется вот такая конфигурация сети:
def create_encoding_layers(): keel = 3 filter_size = 64 pad = 1 pool_size = 2 retu [ ZeroPadding2D(padding=(pad,pad)), Convolution2D(filter_size, keel, keel, border_mode='valid'), BatchNormalization(), Activation('relu'), MaxPooling2D(pool_size=(pool_size, pool_size)), ZeroPadding2D(padding=(pad,pad)), Convolution2D(32, keel, keel, border_mode='valid'), BatchNormalization(), Activation('relu'), MaxPooling2D(pool_size=(pool_size, pool_size)), ZeroPadding2D(padding=(pad,pad)), Convolution2D(32, keel, keel, border_mode='valid'), BatchNormalization(), Activation('relu'), MaxPooling2D(pool_size=(pool_size, pool_size)), ZeroPadding2D(padding=(pad,pad)), Convolution2D(64, keel, keel, border_mode='valid'), BatchNormalization(), Activation('relu'), ] def create_decoding_layers(): keel = 3 filter_size = 64 pad = 1 pool_size = 2 retu[ ZeroPadding2D(padding=(pad,pad)), Convolution2D(64, keel, keel, border_mode='valid'), BatchNormalization(), UpSampling2D(size=(pool_size,pool_size)), ZeroPadding2D(padding=(pad,pad)), Convolution2D(32, keel, keel, border_mode='valid'), BatchNormalization(), UpSampling2D(size=(pool_size,pool_size)), ZeroPadding2D(padding=(pad,pad)), Convolution2D(32, keel, keel, border_mode='valid'), BatchNormalization(), UpSampling2D(size=(pool_size,pool_size)), ZeroPadding2D(padding=(pad,pad)), Convolution2D(filter_size, keel, keel, border_mode='valid'), BatchNormalization(), ZeroPadding2D(padding=(0,pad+1)), ] segnet_basic = models.Sequential() segnet_basic.add(Layer(input_shape=(120, 420, 1))) segnet_basic.encoding_layers = create_encoding_layers() for l in segnet_basic.encoding_layers: segnet_basic.add(l) segnet_basic.decoding_layers = create_decoding_layers() for l in segnet_basic.decoding_layers: segnet_basic.add(l) segnet_basic.add(Convolution2D(1, 1, 1, border_mode='valid',)) segnet_basic.summary() segnet_basic.add(Reshape((120,420,1)))На вход подается фотография и маска(область, где находится объект заполнена единицами, а остальная область нулями). Как я понимаю, на выходе мы должны получить такую же маску. Пробовал разные функции потерь. На выходе получается ерунда. Собственно вопрос: что нужно исправить, чтобы получить на выходе аналогичную маску ? Какую функцию потерь и optimizer использовать? На картинке пример работы уже обученной сети. image - изображение, которое подается сети, label - ожидаемый результат, который я для вывода умно��ил на 255, result - то, что выдает сеть.Так же умножил на 255 для вывода
question@mail.ru
·