跳转到主要内容

为Keras提供的工业级计算机视觉扩展。

项目描述

KerasCV

Downloads Python Tensorflow Contributions Welcome

KerasCV是一个模块化计算机视觉组件库,它与TensorFlow、JAX或PyTorch原生兼容。基于Keras 3构建,这些模型、层、度量、回调等可以在任何框架中进行训练和序列化,并在另一个框架中重用而无需高昂的迁移成本。有关更多关于多框架KerasCV的详细信息,请参阅下方的“配置您的后端”。

KerasCV可以理解为Keras API的横向扩展:这些组件是新的Keras第一方对象,它们过于专业化,无法添加到核心Keras中。它们享有与核心Keras API相同程度的打磨和向后兼容性保证,并由Keras团队维护。

我们的API有助于常见的计算机视觉任务,如数据增强、分类、目标检测、分割、图像生成等。应用计算机视觉工程师可以利用KerasCV快速组装针对这些常见任务的生产级、最先进的训练和推理管道。

快速链接

安装

KerasCV 支持使用 Keras 2 和 Keras 3。我们建议所有新用户使用 Keras 3,因为它允许使用 KerasCV 模型和层与 JAX、TensorFlow 和 PyTorch 一起使用。

Keras 2 安装

要使用 Keras 2 安装最新的 KerasCV 版本,只需运行

pip install --upgrade keras-cv tensorflow

Keras 3 安装

目前有两种方式可以安装 KerasCV 与 Keras 3。要安装 KerasCV 和 Keras 的最新更改,可以使用我们的夜间包。

pip install --upgrade keras-cv-nightly tf-nightly

要安装 KerasCV 和 Keras 3 的稳定版本,应在安装 KerasCV 后安装 Keras 3。这是 TensorFlow 固定在 Keras 2 时的临时步骤,在 TensorFlow 2.16 之后将不再必要。

pip install --upgrade keras-cv tensorflow
pip install --upgrade keras

[!IMPORTANT] Keras 3 不能与 TensorFlow 2.14 或更早版本一起使用。

配置您的后端

如果您已在您的环境中安装了 Keras 3(参见上面的安装说明),您可以使用 KerasCV 与 JAX、TensorFlow 和 PyTorch 中的任何一个。为此,设置 KERAS_BACKEND 环境变量。例如:

export KERAS_BACKEND=jax

或者在 Colab 中,使用

import os
os.environ["KERAS_BACKEND"] = "jax"

import keras_cv

[!IMPORTANT] 确保在导入任何 Keras 库之前设置 KERAS_BACKEND,它将在首次导入时用于设置 Keras。

一旦完成配置步骤,您就可以导入 KerasCV 并开始使用它。

import keras_cv
import keras

filepath = keras.utils.get_file(origin="https://i.imgur.com/gCNcJJI.jpg")
image = np.array(keras.utils.load_img(filepath))
image_resized = keras.ops.image.resize(image, (640, 640))[None, ...]

model = keras_cv.models.YOLOV8Detector.from_preset(
    "yolo_v8_m_pascalvoc",
    bounding_box_format="xywh",
)
predictions = model.predict(image_resized)

快速入门

import tensorflow as tf
import keras_cv
import tensorflow_datasets as tfds
import keras

# Create a preprocessing pipeline with augmentations
BATCH_SIZE = 16
NUM_CLASSES = 3
augmenter = keras_cv.layers.Augmenter(
    [
        keras_cv.layers.RandomFlip(),
        keras_cv.layers.RandAugment(value_range=(0, 255)),
        keras_cv.layers.CutMix(),
    ],
)

def preprocess_data(images, labels, augment=False):
    labels = tf.one_hot(labels, NUM_CLASSES)
    inputs = {"images": images, "labels": labels}
    outputs = inputs
    if augment:
        outputs = augmenter(outputs)
    return outputs['images'], outputs['labels']

train_dataset, test_dataset = tfds.load(
    'rock_paper_scissors',
    as_supervised=True,
    split=['train', 'test'],
)
train_dataset = train_dataset.batch(BATCH_SIZE).map(
    lambda x, y: preprocess_data(x, y, augment=True),
        num_parallel_calls=tf.data.AUTOTUNE).prefetch(
            tf.data.AUTOTUNE)
test_dataset = test_dataset.batch(BATCH_SIZE).map(
    preprocess_data, num_parallel_calls=tf.data.AUTOTUNE).prefetch(
        tf.data.AUTOTUNE)

# Create a model using a pretrained backbone
backbone = keras_cv.models.EfficientNetV2Backbone.from_preset(
    "efficientnetv2_b0_imagenet"
)
model = keras_cv.models.ImageClassifier(
    backbone=backbone,
    num_classes=NUM_CLASSES,
    activation="softmax",
)
model.compile(
    loss='categorical_crossentropy',
    optimizer=keras.optimizers.Adam(learning_rate=1e-5),
    metrics=['accuracy']
)

# Train your model
model.fit(
    train_dataset,
    validation_data=test_dataset,
    epochs=8,
)

贡献者

如果您想贡献,请参阅我们的贡献指南

要找到要解决的问题,请检查我们的贡献呼吁

我们希望利用/外包 Keras 社区,不仅用于错误报告,还用于积极开发以提供新功能。为此,以下是向此存储库贡献的预定义流程。

  1. 贡献者始终欢迎帮助我们修复问题、添加测试、改进文档。
  2. 如果贡献者想创建一个骨干,我们通常要求第一个 PR 包含一个数据集的预训练权重集和模型,以及一个后续的训练脚本。训练脚本应有助于我们重现论文中声明的结果。骨干应该是通用的,但训练脚本可以包含特定于论文的参数,例如学习率计划和权重衰减。训练脚本将用于生成排行榜结果。对于难以训练的大型基于 Transformer 的模型,适用例外情况。如果这是情况,贡献者应通知我们,以便团队能够帮助训练模型或提供 GCP 资源。
  3. 如果贡献者想创建一个元架构,请尽量与我们的路线图保持一致,并为设计审查创建一个 PR,以确保元架构是模块化的。
  4. 如果贡献者想创建一个不在未来 6 个月路线图中的新输入格式,例如关键点,请创建一个问题并请求赞助商。
  5. 如果贡献者想支持不在未来 6 个月路线图中的新任务,例如 3D 重建,请创建一个问题并请求赞助商。

感谢所有我们优秀的贡献者!

预训练权重

在KerasCV中,许多模型都带有预训练的权重。除了StableDiffusion和标准视觉Transformer之外,所有这些权重都是使用Keras和KerasCV组件以及此存储库中的训练脚本来训练的。尽管一些模型并未使用与它们原始出版物中定义的相同参数或预处理流程进行训练,但KerasCV团队确保了强大的数值性能。提供预训练权重的性能指标可以在每个文档化任务的训练历史中找到。例如,可以在骨干模型的训练历史中找到。所有结果都可以使用此存储库中的训练脚本重现。

从历史上看,许多模型都是基于通过手动编写的归一化方案重新缩放的图像数据集进行训练的。最常见的手动编写的归一化方案是在从ImageNet的均值像素中减去后,基于ImageNet像素标准差进行标准化。这种方案是手动特征工程时代的产物,但不再需要使用现代深度学习架构来获得最先进的分数。因此,KerasCV被标准化为在简单使用1/255重新缩放层的图像上运行。这可以在所有KerasCV训练管道和代码示例中看到。

自定义操作

请注意,在某些3D目标检测层中,使用了自定义TF操作。这些操作的二进制文件没有包含在我们的PyPi包中,以保持我们的轮子是纯Python。

如果您想使用这些自定义操作,可以根据以下说明从源代码安装。

从源代码安装带有自定义操作的KerasCV

从源代码安装自定义操作需要Bazel构建系统(版本>=5.4.0)。安装Bazel的步骤可以在这里找到。

git clone https://github.com/keras-team/keras-cv.git
cd keras-cv

python3 build_deps/configure.py

bazel build build_pip_pkg
export BUILD_WITH_CUSTOM_OPS=true
bazel-bin/build_pip_pkg wheels

pip install wheels/keras_cv-*.whl

请注意,GitHub actions已存在以发布带有自定义操作的KerasCV,但目前正在禁用。您可以在自己的分支中使用这些操作为Linux(manylinux2014)、MacOS(x86和ARM)和Windows创建轮子。

免责声明

KerasCV通过keras_cv.models API提供对预训练模型的访问。这些预训练模型按“原样”提供,不提供任何保证或条件。以下底层模型由第三方提供,并受单独许可证的约束:StableDiffusion、视觉Transformer

引用KerasCV

如果KerasCV帮助了您的研究,我们非常感谢您的引用。以下是BibTeX条目

@misc{wood2022kerascv,
  title={KerasCV},
  author={Wood, Luke and Tan, Zhenyu and Stenbit, Ian and Bischof, Jonathan and Zhu, Scott and Chollet, Fran\c{c}ois and Sreepathihalli, Divyashree and Sampath, Ramesh and others},
  year={2022},
  howpublished={\url{https://github.com/keras-team/keras-cv}},
}

项目详情


下载文件

下载适用于您平台的应用程序文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源代码发行版

keras_cv-0.9.0.tar.gz (374.5 kB 查看散列)

上传时间 源代码

构建发行版

keras_cv-0.9.0-py3-none-any.whl (650.7 kB 查看散列)

上传时间 Python 3

支持者