Я использую картинку лица FDDB, чтобы обучить mtcnn распознавать лица. В pnet для регрессии ограничивающего прямоугольника акк остается около 60%. Что-то не так?
Эпоха 397/400 1200/1200 [=============================]- 0 с 131 мкс / выборка - потеря: 0,5068 - потеря conv4_1_: 5,4316e-06 - потеря conv4_2_: 0,5052 - точность conv4_1_: 1,0000 - точность conv4_2_acchracy: 0,5850 эпоха 398/400 1200/1200 [=============================] - 0s 131us / выборка - потеря: 0,4350 - conv4_1_loss: 3.8598e-06 - conv4_2_loss: 0.4358 - conv4_1_accoracy: 1.0000 - conv4_2_accuracy: 0.5950 Epoch 399/400 1200/ 1200 [=====================================] - 0 с 131 мкс / выборка - потери: 0,8905 - conv4_1_loss: 5,0222e-06- conv4_2_loss: 0.8863 - conv4_1_ точность: 1.0000 - conv4_2_ точность: 0.5817 Epoch 400/400 1200/1200 [====================================] - 0s 124us / выборка - потеря: 1,8505 - conv4_1_loss: 3.0373e-04 - conv4_2_loss: 1.8358 - conv4_1_accuracy: 1.0000 - conv4_2_accraracy: 0.5817
class P_Net(keras.Model):
def __init__(self):
super(P_Net, self).__init__(name="P_Net")
# Define layers here.
self.conv1 = keras.layers.Conv2D(10, (3, 3), name="conv1")
self.prelu1 = keras.layers.PReLU(tf.constant_initializer(0.25), shared_axes=[1, 2], name="prelu1")
self.pool1 = keras.layers.MaxPooling2D((2, 2), name="pool1")
self.conv2 = keras.layers.Conv2D(16, (3, 3), name="conv2")
self.prelu2 = keras.layers.PReLU(tf.constant_initializer(0.25), shared_axes=[1, 2], name="prelu2")
self.conv3 = keras.layers.Conv2D(32, (3, 3), name="conv3")
self.prelu3 = keras.layers.PReLU(tf.constant_initializer(0.25), shared_axes=[1, 2], name="prelu3")
self.cls_output = keras.layers.Conv2D(2, (1, 1), activation="softmax", name="conv4_1")
self.bbox_pred = keras.layers.Conv2D(4, (1, 1), name="conv4_2")
#self.landmark_pred = keras.layers.Conv2D(10, (1, 1), name="conv4_3")
def call(self, inputs):
# Define your forward pass here,
# using layers you previously defined (in `__init__`).
x = self.conv1(inputs)
x = self.prelu1(x)
x = self.pool1(x)
x = self.conv2(x)
x = self.prelu2(x)
x = self.conv3(x)
x = self.prelu3(x)
return [self.cls_output(x), self.bbox_pred(x)]#, self.landmark_pred(x)]
def get_summary(self, input_shape):
inputs = keras.Input(input_shape)
model = keras.Model(inputs, self.call(inputs))
return model
Для ограничивающего поля, в положительном поезде, iиспользуйте метки x1, y1 x2, y2, которые предоставили данные FDDB, просто измените их размер в зависимости от масштаба рис. это неправильно? Отрицательный train_set, я установил поле lebal [0,0,0,0]
примерно так: ['./pos/20020816bigimg_932.jpg', 1, ['0.2857142857142857', '2.2857142857142856', '12 .285714285714286', '14 .285714285714286']]