Как построить CNN, чтобы правильно классифицировать ребра четырехугольника? - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь реализовать CNN для правильного определения краев четырехугольника в двоичном изображении 322x322 , т.е. в белом четырехугольнике на черном фоне, например

enter image description here

сетевой выход предназначен для представления x и y, помещенных вместе, так что для любого данного изображения из набора данных четыре (4) соответствующих пары нейронов x и y должны быть запущены / возбуждены так, чтобымои метки для обучения - это кодирование одной горячей меткой (мультиклассовая классификация) для каждой пары xy ребер для четырехстороннего egsay. Мое изображение - 10x10, если первый квад имеет следующие ребра ( x, y ) где это возможно (x, y) -значения от [ 0-9 ] => (1, 2) (3, 8) (4, 3) (5, 7) моя метка выглядит как

[image] [enter image description here] 2

для каждого четырехугольника.Вот конфигурация для моей сети в Java с использованием deeplearning4j.

         MultiLayerConfiguration EDGE_PERCEPTRON = new NeuralNetConfiguration.Builder()
                    .seed(seed)
                    .l2(0.0005)
                    .weightInit(WeightInit.XAVIER)
                    .updater(new Nesterovs(new MapSchedule(ScheduleType.ITERATION, lrSchedule)))
                    .list()
                    .layer(0, new ConvolutionLayer.Builder(8, 8)
                            .stride(2, 2)
                            .padding(0, 0)
                            .nIn(channels)
                            .nOut(filtersize10)
                            .activation(Activation.IDENTITY)
                            .build())
                    .layer(1, new ConvolutionLayer.Builder(4, 4)
                            .stride(2, 2)
                            .padding(0, 0)
                            .nOut(filtersize20)
                            .activation(Activation.IDENTITY)
                            .build())
                    .layer(2, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX)
                            .kernelSize(2, 2)
                            .stride(1, 1)
                            .padding(0, 0)
                            .build())
                    .layer(3, new DenseLayer.Builder().activation(Activation.SIGMOID)
                            .nOut(outputSize).build())
                    .layer(4, new OutputLayer.Builder(LossFunctions.LossFunction.XENT)
                            .nOut(outputSize)
                            .activation(Activation.SIGMOID)
                            .build())
                    .setInputType(InputType.convolutionalFlat(height, width, channels))
                    .backprop(true).pretrain(false).build();

Вот это графическое представление

enter image description here

Что-то не так с моей конфигурацией или, скорее, что вы думаете, яделать неправильно.Сеть ничего не изучает из набора данных, все прогнозы единообразны и все меньше 0,1.Как правильно настроить сеть, чтобы дать правильные прогнозы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...