Невозможно обработать некоторые изображения для обнаружения лица с помощью метода mtcnn, реализованного с использованием mxnet и python - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь обработать несколько изображений для распознавания лиц.

У меня есть несколько наборов изображений, которые я пытаюсь обработать, некоторые из них обрабатываются нормально, но в определенном наборе есть некоторые изображения, которыене в состоянии обработать и выдает эту конкретную ошибку: could not broadcast input array from shape

Я использую MTCNN, который реализован с использованием mxnet и python , вот ссылка на оригиналrepo.

Эта ошибка появляется на втором этапе детектора mtcnn, здесь код:

#############################################
# second stage
#############################################
        num_box = total_boxes.shape[0]

        # pad the bbox
        [dy, edy, dx, edx, y, ey, x, ex, tmpw, tmph] = self.pad(total_boxes, width, height)
        # (3, 24, 24) is the input shape for RNet
        input_buf = np.zeros((num_box, 3, 24, 24), dtype=np.float32)

        for i in range(num_box):
            tmp = np.zeros((tmph[i], tmpw[i], 3), dtype=np.uint8)
            tmp[dy[i]:edy[i]+1, dx[i]:edx[i]+1, :] = img[y[i]:ey[i]+1, x[i]:ex[i]+1, :]
            input_buf[i, :, :, :] = adjust_input(cv2.resize(tmp, (24, 24)))

        output = self.RNet.predict(input_buf)

        # filter the total_boxes with threshold
        passed = np.where(output[1][:, 1] > self.threshold[1])
        total_boxes = total_boxes[passed]

        if total_boxes.size == 0:
            return None

В цикле for, когда он пытается изменить форму, он выдает ошибку.

Если кому-то нужно просмотреть больше кода или получить точное изображение, сообщите мне.

1 Ответ

0 голосов
/ 10 апреля 2019

Следующий ответ дает juliojj в https://www.ctolib.com/article/comments/20418:

Большое спасибо за то, что поделились вашим кодом.Я делюсь с вами тем, как мне удалось исправить две ошибки при запуске вашего кода.Может быть, это поможет тем, кто сталкивается с такими же проблемами.По некоторым причинам, только два изображения в моем наборе данных сгенерировали эти ошибки, в файле mtcnn_detector.py:

error 1) не удалось преобразовать входной массив из формы (0,63,3) в форму (58,63,3), где «63» может быть любым другим значением ...

ошибка 2) tmp = np.zeros ((tmph [i], tmpw [i], 3), dtype = np.uint8)ValueError: отрицательные измерения недопустимы.

Два новых условия ниже исправлены (временная, поскольку я не отслеживал их источник) проблема:

(строка 280 вmtcnn_detector.py)

# pad the bbox 
[dy, edy, dx, edx, y, ey, x, ex, tmpw, tmph] = self.pad(total_boxes, width, height)
# (3, 24, 24) is the input shape for RNet
input_buf = np.zeros((num_box, 3, 24, 24), dtype=np.float32)

for i in range(num_box):
    if(tmph[i]>0):         # << WARNING (bug fixed)
        tmp = np.zeros((tmph[i], tmpw[i], 3), dtype=np.uint8)
        if(edy[i]>=0):     # << WARNING (bug fixed)
            tmp[dy[i]:edy[i]+1, dx[i]:edx[i]+1, :] = img[y[i]:ey[i]+1, x[i]:ex[i]+1, :]
            input_buf[i, :, :, :] = adjust_input(cv2.resize(tmp, (24, 24)))

output = self.RNet.predict(input_buf)

Это решило мою проблему, и я верю, что это решит и вашу.

...