Keras的工业级计算机视觉扩展。
项目描述
KerasCV
KerasCV是一个模块化的计算机视觉组件库,它与TensorFlow、JAX或PyTorch原生兼容。基于Keras 3构建,这些模型、层、指标、回调等可以在任何框架中训练和序列化,无需昂贵的迁移即可在另一个框架中重用。有关多框架KerasCV的更多详细信息,请参阅下文的“配置您的后端”。
KerasCV可以理解为Keras API的水平扩展:组件是新的第一方Keras对象,它们太专业,不能添加到核心Keras中。它们获得与核心Keras API相同级别的润色和向后兼容性保证,并由Keras团队维护。
我们的API可以帮助执行常见的计算机视觉任务,如数据增强、分类、目标检测、分割、图像生成等。应用计算机视觉工程师可以利用KerasCV快速组装适用于所有这些常见任务的生产级、最先进的训练和推理流程。
快速链接
安装
KerasCV支持Keras 2和Keras 3。我们建议所有新用户使用Keras 3,因为它允许使用JAX、TensorFlow和PyTorch与KerasCV模型和层。
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社区来报告错误,还希望积极参与功能交付的开发。为此,以下是贡献到此存储库的预定义流程。
- 欢迎贡献者帮助我们解决问题、添加测试、改进文档。
- 如果贡献者想创建一个骨干,我们通常要求第一个PR包含一个用于一个数据集的模型预训练权重集,以及一个后续的训练脚本。训练脚本将尽可能帮助我们重现论文中声明的结果。骨干应该是通用的,但训练脚本可以包含论文特定的参数,例如学习率调度和权重衰减。训练脚本将用于生成排行榜结果。对于难以训练的大型基于Transformer的模型,例外情况适用。如果是这种情况,贡献者应通知我们,以便团队帮助训练模型或提供GCP资源。
- 如果贡献者想创建一个元架构,请尽量与我们的路线图保持一致,并为设计审查创建一个PR,以确保元架构是模块化的。
- 如果贡献者想创建一个不在我们未来6个月路线图中的新输入格式,例如关键点,请创建一个问题和请求赞助。
- 如果贡献者想支持不在我们未来6个月路线图中的新任务,例如3D重建,请创建一个问题和请求赞助。
感谢所有我们杰出的贡献者!
预训练权重
在KerasCV中,许多模型都带有预训练的权重。除了StableDiffusion和标准视觉Transformer之外,所有这些权重都是使用Keras和KerasCV组件以及本仓库中的训练脚本训练的。尽管一些模型没有使用与它们原始出版物中定义的相同参数或预处理流程进行训练,但KerasCV团队确保了强大的数值性能。提供的预训练权重的性能指标可以在每个文档化任务的训练历史中找到。例如,可以在骨干模型的训练历史中找到。所有结果都可以使用本仓库中的训练脚本进行重现。
从历史上看,许多模型是在通过手动制作的归一化方案缩放的图像数据集上训练的。最常见的手动制作的归一化方案是在从ImageNet平均像素值中减去后,基于ImageNet像素标准差进行标准化。这个方案是手动特征工程时代的产物,但现在已经不再需要使用现代深度学习架构来获得最先进的分数。因此,KerasCV被标准化为在通过简单的1/255
缩放层缩放的图像上运行。这可以在所有KerasCV训练管道和代码示例中看到。
自定义操作
请注意,在某些3D目标检测层中使用了自定义TF操作。这些操作的二进制文件没有包含在我们的PyPi包中,以保持我们的wheel纯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动作存在以发布带有自定义操作的KerasCV,但目前已被禁用。您可以在自己的分支中使用这些动作为Linux(manylinux2014)、MacOS(x86和ARM)和Windows创建wheel。
免责声明
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_nightly-0.10.0.dev2024100303.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf0a5321433481e16ae9db8b1de9cbfbcb6141a044ab1870cc11dfda8e6af647 |
|
MD5 | c216ef16ce23273685c928fedb6dbda4 |
|
BLAKE2b-256 | ffaeb497a0558b15d2c20deac0b1ae42bcb621f68dfbd42625e8bd2cf65dcad3 |
keras_cv_nightly-0.10.0.dev2024100303-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b05b0404bc8c3687ad8cde0062a37d25ffc9dce96729d30b30cf46952c7c52b4 |
|
MD5 | 53a6c9f25a155bac5dfb4c0ec114dbde |
|
BLAKE2b-256 | 9c19d4fcd686949faef22fb87042ce5b178a87fda47b6a1d0bdf5daf0054f310 |