Двумерная целевая переменная из CNN

#deep-learning #object-detection #keras-layer #yolo

#глубокое обучение #обнаружение объекта #keras-layer #yolo

Вопрос:

Я пытаюсь построить модель обнаружения объекта только с 3 классами. Входными данными являются изображения с формой (64,28,28,3), а выходной формой является (64,9,8), а выборкой выходной переменной является:

 array([[0.24, 0.06, 0.56, 0.44, 1.  , 1.  , 0.  , 0.  ],
       [0.31, 0.54, 0.56, 0.44, 1.  , 1.  , 0.  , 0.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ],
       [0.21, 0.18, 0.54, 0.44, 1.  , 0.  , 0.  , 1.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ]])
  

Изображение разделено на 9 сеток, то есть на 9 строк. Первые 4 значения каждой строки являются координатами поля, созданного для объекта, пятое значение — флаг 0/1. Если в конкретной сетке нет объекта, отличного от 0 или 1, 6-8 — это значение класса, поскольку существует только 3 класса.

Я использую keras framework. Я попробовал некоторый код, нужна помощь для изменения по мере необходимости:

 x = Flatten()(vgg.output)
x1 = Dense(4,activation='sigmoid')(x)
x2 = Dense(1,activation='softmax')(x)
x3 = Dense(3,activation='sigmoid')(x)
y = Concatenate()([x1,x2,x3])
model = Model(vgg.input,y)
  

Мой вопрос в том, как я могу построить последний слой CNN. До сих пор я работал только над проблемой классификации, которая представляет собой одномерный вывод. Любая помощь будет оценена.