Skip to content

Object detection preprocessing layer raise ValueError with length of boxes #2518

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
jaytwoCaribou opened this issue Feb 7, 2025 · 1 comment

Comments

@jaytwoCaribou
Copy link

jaytwoCaribou commented Feb 7, 2025

Hi,

The closest issue I found about the problem I mention in this issue is the following. However I use a tf.data pipeline, as recommended in the provided answer.
I have several questions, regarding the description of the issue :

  • May I miss something in my minimal provided code example ?
  • May I miss something in the versions of keras-cv and tf and their cross compatibilities ?
  • Should I upgrade to keras 3 (keras-hub), but I read that ragged tensor are not supported ?

Current Behavior:

I try to follow the tutorial in keras 2 to train a Yolov8 here, but it seems that a ValueError is encountered during the preprocessing layer when I add augmentation. Without augmentation the data pipeline seems to run well. It does raise the error with other preprocessing layer keras_cv.layers.RandomShear or keras_cv.layers.JitteredResize.

ValueError: Expected len(boxes.shape)=2, or len(boxes.shape)=3, got len(boxes.shape)=4
which comes from the following lines
keras_cv/src/bounding_box/utils.py", line 158, in _format_inputs * raise ValueError
It seems that the keras_cv preprocessing layer is adding a dimension in the ragged_tensor of bboxes.

Expected Behavior:

  • pipeline running without error

Steps To Reproduce:

Here is a minimal exemple to reproduce the error I get

import tensorflow as tf
from tensorflow import keras

import keras_cv
import numpy as np

def load_dataset(images, classes, bbox):
    image = images
    bounding_boxes = {
        "classes": tf.cast(classes, dtype=tf.float32),
        "boxes": bbox,
    }
    return {"images": tf.cast(image, tf.float32), "bounding_boxes": bounding_boxes}

classes = [
    [8, 8, 8, 8, 8],         # 5 classes
    [1],                  # 1 class
    [12, 14, 14],     # 3 classes
    ]

bbox = [
    [[199.0, 19.0, 390.0, 401.0],
    [217.0, 15.0, 270.0, 157.0],
    [393.0, 18.0, 432.0, 162.0],
    [1.0, 15.0, 226.0, 276.0],
    [19.0, 95.0, 458.0, 443.0]],     #image 1 has 4 objects
    [[52.0, 117.0, 109.0, 177.0]],   #image 2 has 1 object
    [[88.0, 87.0, 235.0, 322.0],
    [113.0, 117.0, 218.0, 471.0], 
    [113.0, 117.0, 218.0, 471.0]],   #image 3 has 2 objects
    ]

images = np.random.randint(0, 255, (3, 340, 340))

bbox = tf.ragged.constant(bbox)
classes = tf.ragged.constant(classes)
images = tf.ragged.constant(images)

augmenter = keras.Sequential(
    layers=[
        keras_cv.layers.RandomFlip(mode="horizontal", bounding_box_format="rel_xyxy"),
    ]
)


data = tf.data.Dataset.from_tensor_slices((images, classes, bbox))
ds = data.map(load_dataset)
ds = ds.ragged_batch(2, drop_remainder=True)
ds = ds.map(augmenter)

Version:

Here is the package I add in the pyproject.toml:

  • python = ">=3.10,<3.13"
  • tensorflow = "2.13"
  • keras-cv = "0.6.4"

Additional information : I tried many combination with more recent packages (keras-cv 0.9, tf 2.17, tf2.14, ...), this is one of them, I never managed to solve the error.

Anything else:

I find it difficult to find documentation about keras-cv layers as the documentation always redirect to keras-hub, but it may be normal as the migration is ongoing ? Is there a specific documentation page that is maintained during migration ?

Anyway, thank you for this amazing work and futur contributions,

@jaytwoCaribou jaytwoCaribou changed the title Object detection preprocessing layer raise ValueError with lenght of boxes Object detection preprocessing layer raise ValueError with length of boxes Feb 7, 2025
@sachinprasadhs
Copy link
Collaborator

Thanks for reporting the issue! We have consolidated the development of KerasCV into the new KerasHub package, which supports image, text, and multi-modal models. Please read the announcement. KerasHub will support all the core functionality of KerasCV.

KerasHub can be installed with !pip install -U keras-hub. Documentation and guides are available at keras.io/keras_hub.

With our focus shifted to KerasHub, we are not planning any further development or releases in KerasCV. If you encounter a KerasCV feature that is missing from KerasHub, or would like to propose an addition to the library, please file an issue with KerasHub.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants