def from_data_frame(
        cls,
        input_field: str,
        target_fields: Optional[Union[str, Sequence[str]]] = None,
        train_data_frame: Optional[pd.DataFrame] = None,
        train_images_root: Optional[str] = None,
        train_resolver: Optional[Callable[[str, str], str]] = None,
        val_data_frame: Optional[pd.DataFrame] = None,
        val_images_root: Optional[str] = None,
        val_resolver: Optional[Callable[[str, str], str]] = None,
        test_data_frame: Optional[pd.DataFrame] = None,
        test_images_root: Optional[str] = None,
        test_resolver: Optional[Callable[[str, str], str]] = None,
        predict_data_frame: Optional[pd.DataFrame] = None,
        predict_images_root: Optional[str] = None,
        predict_resolver: Optional[Callable[[str, str], str]] = None,
        target_formatter: Optional[TargetFormatter] = None,
        input_cls: Type[Input] = ImageClassificationDataFrameInput,
        transform: INPUT_TRANSFORM_TYPE = ImageClassificationInputTransform,
        transform_kwargs: Optional[Dict] = None,
        **data_module_kwargs: Any,
    ) -> "ImageClassificationData":
        """Load the :class:`~flash.image.classification.data.ImageClassificationData` from pandas DataFrame objects
        containing image files and their corresponding targets.

        Input images will be extracted from the ``input_field`` in the DataFrame.
        The supported file extensions are: ``.jpg``, ``.jpeg``, ``.png``, ``.ppm``, ``.bmp``, ``.pgm``, ``.tif``,
        ``.tiff``, ``.webp``, and ``.npy``.
        The targets will be extracted from the ``target_fields`` in the DataFrame and can be in any of our
        :ref:`supported classification target formats <formatting_classification_targets>`.
        To learn how to customize the transforms applied for each stage, read our
        :ref:`customizing transforms guide <customizing_transforms>`.

        Args:
            input_field: The field (column name) in the DataFrames containing the image file paths.
            target_fields: The field (column name) or list of fields in the DataFrames containing the targets.
            train_data_frame: The pandas DataFrame to use when training.
            train_images_root: The root directory containing train images.
            train_resolver: Optionally provide a function which converts an entry from the ``input_field`` into an image
                file path.
            val_data_frame: The pandas DataFrame to use when validating.
            val_images_root: The root directory containing validation images.
            val_resolver: Optionally provide a function which converts an entry from the ``input_field`` into an image
                file path.
            test_data_frame: The pandas DataFrame to use when testing.
            test_images_root: The root directory containing test images.
            test_resolver: Optionally provide a function which converts an entry from the ``input_field`` into an image
                file path.
            predict_data_frame: The pandas DataFrame to use when predicting.
            predict_images_root: The root directory containing predict images.
            predict_resolver: Optionally provide a function which converts an entry from the ``input_field`` into an
                image file path.
            target_formatter: Optionally provide a :class:`~flash.core.data.utilities.classification.TargetFormatter` to
                control how targets are handled. See :ref:`formatting_classification_targets` for more details.
            input_cls: The :class:`~flash.core.data.io.input.Input` type to use for loading the data.
            transform: The :class:`~flash.core.data.io.input_transform.InputTransform` type to use.
            transform_kwargs: Dict of keyword arguments to be provided when instantiating the transforms.
            data_module_kwargs: Additional keyword arguments to provide to the
                :class:`~flash.core.data.data_module.DataModule` constructor.

        Returns:
            The constructed :class:`~flash.image.classification.data.ImageClassificationData`.

        Examples
        ________

        .. testsetup::

            >>> import os
            >>> from PIL import Image
            >>> rand_image = Image.fromarray(np.random.randint(0, 255, (64, 64, 3), dtype="uint8"))
            >>> os.makedirs("train_folder", exist_ok=True)
            >>> os.makedirs("predict_folder", exist_ok=True)
            >>> _ = [rand_image.save(os.path.join("train_folder", f"image_{i}.png")) for i in range(1, 4)]
            >>> _ = [rand_image.save(os.path.join("predict_folder", f"predict_image_{i}.png")) for i in range(1, 4)]

        .. doctest::

            >>> from pandas import DataFrame
            >>> from flash import Trainer
            >>> from flash.image import ImageClassifier, ImageClassificationData
            >>> train_data_frame = DataFrame.from_dict(
            ...     {
            ...         "images": ["image_1.png", "image_2.png", "image_3.png"],
            ...         "targets": ["cat", "dog", "cat"],
            ...     }
            ... )
            >>> predict_data_frame = DataFrame.from_dict(
            ...     {
            ...         "images": ["predict_image_1.png", "predict_image_2.png", "predict_image_3.png"],
            ...     }
            ... )
            >>> datamodule = ImageClassificationData.from_data_frame(
            ...     "images",
            ...     "targets",
            ...     train_data_frame=train_data_frame,
            ...     train_images_root="train_folder",
            ...     predict_data_frame=predict_data_frame,
            ...     predict_images_root="predict_folder",
            ...     transform_kwargs=dict(image_size=(128, 128)),
            ...     batch_size=2,
            ... )
            >>> datamodule.num_classes
            2
            >>> datamodule.labels
            ['cat', 'dog']
            >>> model = ImageClassifier(backbone="resnet18", num_classes=datamodule.num_classes)
            >>> trainer = Trainer(fast_dev_run=True)
            >>> trainer.fit(model, datamodule=datamodule)  # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
            Training...
            >>> trainer.predict(model, datamodule=datamodule)  # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
            Predicting...

        .. testcleanup::

            >>> import shutil
            >>> shutil.rmtree("train_folder")
            >>> shutil.rmtree("predict_folder")
            >>> del train_data_frame
            >>> del predict_data_frame

        """
        ds_kw = {
            "target_formatter": target_formatter,
        }

        train_data = (train_data_frame, input_field, target_fields, train_images_root, train_resolver)
        val_data = (val_data_frame, input_field, target_fields, val_images_root, val_resolver)
        test_data = (test_data_frame, input_field, target_fields, test_images_root, test_resolver)
        predict_data = (predict_data_frame, input_field, None, predict_images_root, predict_resolver)

        train_input = input_cls(RunningStage.TRAINING, *train_data, **ds_kw)
        ds_kw["target_formatter"] = getattr(train_input, "target_formatter", None)

        return cls(
            train_input,
            input_cls(RunningStage.VALIDATING, *val_data, **ds_kw),
            input_cls(RunningStage.TESTING, *test_data, **ds_kw),
            input_cls(RunningStage.PREDICTING, *predict_data, **ds_kw),
            transform=transform,
            transform_kwargs=transform_kwargs,
            **data_module_kwargs,
        )
Load the :class:`~flash.image.classification.data.ImageClassificationData` from pandas DataFrame objects
        containing image files and their corresponding targets.

        Input images will be extracted from the ``input_field`` in the DataFrame.
        The supported file extensions are: ``.jpg``, ``.jpeg``, ``.png``, ``.ppm``, ``.bmp``, ``.pgm``, ``.tif``,
        ``.tiff``, ``.webp``, and ``.npy``.
        The targets will be extracted from the ``target_fields`` in the DataFrame and can be in any of our
        :ref:`supported classification target formats <formatting_classification_targets>`.
        To learn how to customize the transforms applied for each stage, read our
        :ref:`customizing transforms guide <customizing_transforms>`.

        Args:
            input_field: The field (column name) in the DataFrames containing the image file paths.
            target_fields: The field (column name) or list of fields in the DataFrames containing the targets.
            train_data_frame: The pandas DataFrame to use when training.
            train_images_root: The root directory containing train images.
            train_resolver: Optionally provide a function which converts an entry from the ``input_field`` into an image
                file path.
            val_data_frame: The pandas DataFrame to use when validating.
            val_images_root: The root directory containing validation images.
            val_resolver: Optionally provide a function which converts an entry from the ``input_field`` into an image
                file path.
            test_data_frame: The pandas DataFrame to use when testing.
            test_images_root: The root directory containing test images.
            test_resolver: Optionally provide a function which converts an entry from the ``input_field`` into an image
                file path.
            predict_data_frame: The pandas DataFrame to use when predicting.
            predict_images_root: The root directory containing predict images.
            predict_resolver: Optionally provide a function which converts an entry from the ``input_field`` into an
                image file path.
            target_formatter: Optionally provide a :class:`~flash.core.data.utilities.classification.TargetFormatter` to
                control how targets are handled. See :ref:`formatting_classification_targets` for more details.
            input_cls: The :class:`~flash.core.data.io.input.Input` type to use for loading the data.
            transform: The :class:`~flash.core.data.io.input_transform.InputTransform` type to use.
            transform_kwargs: Dict of keyword arguments to be provided when instantiating the transforms.
            data_module_kwargs: Additional keyword arguments to provide to the
                :class:`~flash.core.data.data_module.DataModule` constructor.

        Returns:
            The constructed :class:`~flash.image.classification.data.ImageClassificationData`.

        Examples
        ________

        .. testsetup::

            >>> import os
            >>> from PIL import Image
            >>> rand_image = Image.fromarray(np.random.randint(0, 255, (64, 64, 3), dtype="uint8"))
            >>> os.makedirs("train_folder", exist_ok=True)
            >>> os.makedirs("predict_folder", exist_ok=True)
            >>> _ = [rand_image.save(os.path.join("train_folder", f"image_{i}.png")) for i in range(1, 4)]
            >>> _ = [rand_image.save(os.path.join("predict_folder", f"predict_image_{i}.png")) for i in range(1, 4)]

        .. doctest::

            >>> from pandas import DataFrame
            >>> from flash import Trainer
            >>> from flash.image import ImageClassifier, ImageClassificationData
            >>> train_data_frame = DataFrame.from_dict(
            ...     {
            ...         "images": ["image_1.png", "image_2.png", "image_3.png"],
            ...         "targets": ["cat", "dog", "cat"],
            ...     }
            ... )
            >>> predict_data_frame = DataFrame.from_dict(
            ...     {
            ...         "images": ["predict_image_1.png", "predict_image_2.png", "predict_image_3.png"],
            ...     }
            ... )
            >>> datamodule = ImageClassificationData.from_data_frame(
            ...     "images",
            ...     "targets",
            ...     train_data_frame=train_data_frame,
            ...     train_images_root="train_folder",
            ...     predict_data_frame=predict_data_frame,
            ...     predict_images_root="predict_folder",
            ...     transform_kwargs=dict(image_size=(128, 128)),
            ...     batch_size=2,
            ... )
            >>> datamodule.num_classes
            2
            >>> datamodule.labels
            ['cat', 'dog']
            >>> model = ImageClassifier(backbone="resnet18", num_classes=datamodule.num_classes)
            >>> trainer = Trainer(fast_dev_run=True)
            >>> trainer.fit(model, datamodule=datamodule)  # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
            Training...
            >>> trainer.predict(model, datamodule=datamodule)  # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
            Predicting...

        .. testcleanup::

            >>> import shutil
            >>> shutil.rmtree("train_folder")
            >>> shutil.rmtree("predict_folder")
            >>> del train_data_frame
            >>> del predict_data_frame

        
src/flash/image/classification/data.py