Разработка нейросети для поиска объектов

Здравствуйте. Появилась задача построить нейросеть для поиска окружностей и эллипсов на изображении.
Целевой объект будет и черным. Понятно что крайне мало особенностей но все же.

Делаю на C# поскольку затем сеть надо встроить в существующий проект.
ИСпользовал либы Tensorflow и CNTK. но поскольку тензор жутко тормознутый как при построении сетей так и при их расчетах то взял CNTK. Там наверное не шибко много разницы.

Так вот. Самый главный вопрос. Как сконфигурировать сеть для правильной работы??
Сгенерировал кучу картинок с разными эллипсами и окружностями.
Также сгенерировал ответы в виде структуры RoundedRect которая содержит координаты центра объекта X,Y, длину и ширину прямоугольника объекта W,H и угол поворота Angle. Итого 5 значений.

Все 5 значений при подаче в сеть я привожу к значениям от 0 до 1 путем деления на ширину и высоту кадра соответственно. Угол делю на 360.

47

0

11

32

Вот код сети:

     int labels_count = 5;
            NDShape inputDim = NDShape.CreateNDShape(new int[] { 320, 240, 1 }); // подается массив для входного изображения в ЧБ
            NDShape outputDim = NDShape.CreateNDShape(new int[] { labels_count }); // выходной массив параметров прямоугольник объекта X Y W H

            // входной слой данных
            Variable input_shape = CNTKLib.InputVariable(inputDim, DataType.Float, "features");
            Variable output_shape = CNTKLib.InputVariable(outputDim, DataType.Float, "labels");
            // создаем слои

            double convWScale = 0.26;

            var view = new NDArrayView(NDShape.CreateNDShape(new int[] { 3, 3, 1 }), new double[] { -1, 0, 1, -2, 0, 2, -1, 0, 1 }, DeviceDescriptor.CPUDevice, false);
             
            var scaledInput = CNTKLib.ElementTimes(Constant.Scalar<float>(1.0f / 255.0f, DeviceDescriptor.CPUDevice), input_shape); // слой масштабирования 

            int kernelWidth1 = 5, kernelHeight1 = 5, numInputChannels1 = 1, outFeatureMapCount1 = 4;
            var conv1 = CNTKHelper.ConvolutionWithMaxPooling(scaledInput, DeviceDescriptor.CPUDevice, kernelWidth1, kernelHeight1, numInputChannels1, outFeatureMapCount1, 2, 2, 3, 3);
             
            var layer2 = CNTKHelper.Dense(conv1, 64, DeviceDescriptor.CPUDevice, CNTKHelper.Activation.ReLU, "layer2"); 
            var classifierOutput = CNTKHelper.Dense(layer2, labels_count, DeviceDescriptor.CPUDevice, CNTKHelper.Activation.Sigmoid, "classifierOutput"); // конечная сеть

Сутки стояла на тренировке но значение PreviousMinibatchLossAverage не падает ниже 30.
Может кто знает как можно подобрать слои правильно??
Можно ли каким то образом решить эту задачу?