Как выполнить пакетную обработку с несколькими ограничивающими рамками в imgaug - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь настроить конвейер увеличения данных с помощью imgaug . Преобразование изображений работает и не вызывает ошибок. Во второй попытке я попытался преобразовать N ограничивающих прямоугольников для каждого изображения и получил постоянную ошибку.

def image_batch_augmentation(batch_images, batch_bbox, batch_image_shape):

    def create_BoundingBox(bbox):
        return BoundingBox(bbox[0], bbox[1], bbox[2], bbox[3], bbox[4])

    bbox = [[create_BoundingBox(bbox) for bbox in batch if sum(bbox) != 0]for batch in batch_bbox]

    bbox = [BoundingBoxesOnImage(batch, shape=(h,w)) for batch, w, h in zip(bbox,batch_image_shape[0], batch_image_shape[1]) ]

    seq_det = seq.to_deterministic()
    aug_image = seq_det.augment_images(image.numpy())
    aug_bbox = [seq_det.augment_bounding_boxes(batch) for batch in bbox]

    return aug_image, aug_bbox

В следующей строке возникает следующая ошибка: aug_bbox = seq_det.augment_bounding_boxes (bbox)

Exception has occurred: InvalidArgumentError
cannot compute Mul as input #1(zero-based) was expected to be a double tensor but is a int64 tensor [Op:Mul] name: mul/

Я уже пробовал несколько разных подходов, но не могу продолжить . Более того, я не нашел никакой информации в документации или на других известных платформах, которая помогла бы мне запустить код.

1 Ответ

0 голосов
/ 19 июня 2020

Проблема постоянная, как видно из сообщения об ошибке для типов данных. Их корректировка привела к успеху.

Вот соответствующий код, который фактически выполняется:

def image_batch_augmentation(batch_images, batch_bbox, batch_image_shape):

    def create_BoundingBox(bbox, w, h):
        return BoundingBox(bbox[0]*h, bbox[1]*w, bbox[2]*h, bbox[3]*w, tf.cast(bbox[4], tf.int32))



    bbox = [[create_BoundingBox(bbox, float(w), float(h)) for bbox in batch if sum(bbox) != 0] for batch, w, h in zip(batch_bbox, batch_image_shape[0], batch_image_shape[1])]

    bbox = [BoundingBoxesOnImage(batch, shape=(int(w),int(h))) for batch, w, h in zip(bbox,batch_image_shape[0], batch_image_shape[1]) ]

    seq_det = seq.to_deterministic()
    images_aug = seq_det.augment_images(image.numpy())
    bbsoi_aug = seq_det.augment_bounding_boxes(bbox)

    return images_aug, bbsoi_aug
...