Keras Hub 소개: 사전 훈련된 모델을 위한 모든 것이 준비된 원스톱 숍

10월 22, 2024
Divyashree Sreepathihalli Software Engineer
Luciano Martins Developer Advocate Google AI

딥 러닝의 세계는 빠르게 진화하고 있으며 광범위한 작업에서 사전 훈련된 모델의 중요성이 점점 더 커지고 있습니다. 사용자 친화적인 API와 높은 접근성으로 알려진 Keras는 텍스트 기반 모델을 위한 KerasNLP 및 컴퓨터 비전 모델을 위한 KerasCV 같은 특화된 라이브러리로 이러한 변화를 주도해왔습니다.

그러나 텍스트 인코더를 활용하는 비전 작업이나 이미지 입력이 있는 강력한 채팅 LLM에서 알 수 있듯이, 모델이 모달리티 간의 경계를 점점 모호하게 만들면서 이러한 도메인을 개별적으로 유지하는 것은 실용성이 떨어집니다. NLP와 CV의 구분은 진정한 멀티모달 모델의 개발과 배포를 저해하여 불필요한 작업 중복과 일관성 없는 사용자 경험으로 이어질 수 있습니다.

keras-team/keras-hub, a unified, comprehensive library for pretrained models

이 문제 해결을 위해 Keras 생태계에서 큰 진전을 이루었음을 알려드리게 되어 매우 기쁩니다. 바로 KerasHub입니다. KerasHub는 사전 훈련된 모델을 위한 통합되고 포괄적인 라이브러리로서 최첨단 NLP 및 CV 아키텍처 모두에 대한 액세스를 간소화합니다. KerasHub는 일관되고 친숙한 Keras 프레임워크 내에서 이미지 분류를 위한 EfficientNet과 함께 텍스트 분석을 위한 BERT 같은 최첨단 모델을 원활하게 탐색하고 활용할 수 있는 중앙 저장소입니다.


통합적 개발자 경험

이러한 통합은 모델 검색 및 사용을 단순화할 뿐만 아니라 보다 일관된 생태계를 조성합니다. KerasHub를 사용하면 손쉬운 모델 게시 및 공유, 리소스 효율적인 적응을 위한 LoRA 미세 조정, 최적화된 성능을 위한 양자화, 대규모 데이터 세트 처리를 위한 강력한 멀티 호스트 학습 등, 다양한 모달리티에 걸쳐 모두 적용할 수 있는 고급 기능을 활용할 수 있습니다. 이는 강력한 AI 도구에 대한 액세스를 대중화하고 혁신적인 멀티모달 애플리케이션 개발을 가속화하는 데 있어 진일보했음을 의미합니다.


KerasHub와 함께하는 첫걸음

먼저 시스템에 KerasHub를 설치하는 작업부터 시작하겠습니다. 그러면 바로 사용할 수 있는 모델로 구성된 광범위한 컬렉션과 인기 있는 아키텍처의 다양한 구현을 살펴볼 수 있습니다. 그런 다음 이처럼 사전 훈련된 모델을 쉽게 로드해서 여러분의 프로젝트에 통합하고 특정 요구 사항에 따라 최적의 성능을 발휘하도록 미세 조정할 준비가 됩니다.


KerasHub 설치

Keras 3로 최신 KerasHub 버전을 설치하려면 다음을 실행하세요.

$ pip install --upgrade keras-hub

이제부터 사용 가능한 모델을 탐색할 수 있습니다. KerasHub 사용을 시작하기 위해서 Keras 3로 작업을 시작하기 위한 표준 환경 설정은 전혀 변경되지 않습니다.

import os
 
# 사용하려는 Keras 3 백엔드 정의 - "jax", "tensorflow" 또는 "torch"
os.environ["KERAS_BACKEND"] = "jax"
 
# Keras 3 및 KerasHub 모듈 가져오기
import keras
import keras_hub

KerasHub와 함께 컴퓨터 비전 및 자연어 모델 사용

이제 KerasHub로 시작해서 Keras 3 생태계에서 이용 가능한 모델에 액세스해 사용할 준비가 되었습니다. 아래 예시를 참고하세요.


Gemma

Gemma는 Google이 개발한 최첨단이면서도 접근성이 높은 개방형 모델 컬렉션입니다. Gemini 모델에 사용된 것과 동일한 연구 및 기술을 활용하는 Gemma의 기본 모델들은 다양한 텍스트 생성 작업에 탁월한 성능을 자랑합니다. 질문에 답하고 정보를 요약하고 논리적 추론에 참여하는 작업 등이 이에 포함됩니다. 또한 특정 요구 사항을 해결할 수 있도록 맞춤 설정도 가능합니다.

이 예시에서는 Gemma2 2B 매개변수를 사용하는 콘텐츠를 로드 및 생성하기 위해 Keras와 KerasHub를 사용합니다. Gemma 변이에 대한 자세한 내용은 Kaggle의 Gemma 모델 카드를 참조하세요.

# Kaggle 모델에서 Gemma 2 2B 사전 설정 로드 
gemma_lm = keras_hub.models.GemmaCausalLM.from_preset("gemma_2b_en")
 
# Gemma 2 2B로 콘텐츠 생성 시작
gemma_lm.generate("Keras is a", max_length=32)

PaliGemma

PaliGemma는 이미지와 텍스트를 모두 이해하는 콤팩트하고 개방적인 모델입니다. PaLI-3에서 영감을 받고 SigLIP 비전 모델, Gemma 언어 모델 등의 오픈소스 구성요소를 기반으로 개발된 PaliGemma는 이미지에 대한 질문에 자세하고 유용한 답변을 제공할 수 있습니다. 이를 통해 이미지와 짧은 동영상에 대한 자막 생성, 객체 식별, 이미지 내 텍스트 읽기 등의 기능을 사용하여 시각적 콘텐츠를 더 깊이 이해할 수 있습니다.

import os
 
# 사용하려는 Keras 3 백엔드 정의 - "jax", "tensorflow" 또는 "torch"
os.environ["KERAS_BACKEND"] = "jax"
 
# Keras 3 및 KerasHub 모듈 가져오기
import keras
import keras_hub
from keras.utils import get_file, load_img, img_to_array
 
 
# 224x224 이미지로 세부 조정된 PaliGemma 3B 가져오기
pali_gemma_lm = keras_hub.models.PaliGemmaCausalLM.from_preset(
    "pali_gemma_3b_mix_224"
)
 
# 테스트 이미지를 다운로드하고 KerasHub에서 사용할 수 있도록 준비
url = 'https://storage.googleapis.com/keras-cv/models/paligemma/cow_beach_1.png'
img_path = get_file(origin=url)
img = img_to_array(load_img(image_path))
 
# 이미지에 대한 질문으로 프롬프트 만들기
prompt = 'answer where is the cow standing?'
 
# PaliGemma로 콘텐츠 생성
output = pali_gemma_lm.generate(
    inputs={
        "images": img,
        "prompts": prompt,
    }
)

Keras 3에서 제공되는 사전 훈련된 모델에 대한 자세한 내용은 Kaggle에서 Keras의 모델 목록을 확인하세요.


Stability.ai Stable Diffusion 3

사용 가능한 컴퓨터 비전 모델도 있습니다. 예를 들어 stability.ai Stable Diffusion 3를 KerasHub와 함께 사용할 수 있습니다.

from PIL import Image
from keras.utils import array_to_img
from keras_hub.models import StableDiffusion3TextToImage
 
text_to_image = StableDiffusion3TextToImage.from_preset(
    "stable_diffusion_3_medium",
    height=1024,
    width=1024,
    dtype="float16",
)
 
# SD3로 이미지 생성
image = text_to_image.generate(
    "photograph of an astronaut riding a horse, detailed, 8k",
)
 
# 생성된 이미지 표시
img = array_to_img(image)
img

Keras 3에서 제공되는 사전 훈련된 컴퓨터 비전 모델에 대한 자세한 내용은 Keras의 모델 목록을 확인하세요.


KerasNLP 개발자에게는 어떤 변화가 있나요?

KerasNLP에서 KerasHub로 전환하는 과정은 간단합니다. keras_nlp에서 keras_hub로의 가져오기 문을 업데이트만 하면 됩니다.

예: 아래와 같은 BERT 모델을 사용하려고 keras_nlp를 가져오는 경우 이전에는 다음 문을 사용했습니다.

import keras_nlp
 
# BERT 모델 로드 
classifier = keras_nlp.models.BertClassifier.from_preset(
    "bert_base_en_uncased", 
    num_classes=2,
)

가져오기를 조정하면 KerasHub를 사용할 준비가 됩니다.

import keras_hub
 
# BERT 모델 로드 
classifier = keras_hub.models.BertClassifier.from_preset(
    "bert_base_en_uncased", 
    num_classes=2,
)

KerasCV 개발자에게는 어떤 변화가 있나요?

현재 KerasCV 사용자라면 KerasHub로 업데이트 시 다음과 같은 이점이 있습니다.

  • 단순화된 모델 로딩: KerasHub는 모델을 로드하기 위한 일관된 API를 제공하므로 KerasCV 및 KerasNLP를 모두 사용하는 경우 코드를 단순화할 수 있습니다.

  • 프레임워크 유연성: JAX 또는 PyTorch 같은 다양한 프레임워크 탐색에 관심이 있는 경우 KerasHub를 사용하면 KerasCV 및 KerasNLP 모델을 해당 프레임워크와 함께 사용하기가 더 쉬워집니다.

  • 중앙 집중식 저장소: KerasHub의 통합 모델 저장소를 사용하면 모델을 더 쉽게 찾고 액세스할 수 있습니다. 저장소에는 향후 새로운 아키텍처가 추가될 것입니다.


내 코드를 KerasHub에 맞춰 조정하려면 어떻게 해야 하나요?

모델

KerasCV 모델은 현재 KerasHub로 이식 중입니다. 대부분의 모델은 이미 사용 가능하지만 일부 소수의 모델은 아직 진행 중입니다. Centerpillar 모델은 이식되지 않을 예정임을 양지해 주십시오. KerasHub에서 다음 문으로 모든 비전 모델을 사용할 수 있을 것입니다.

import keras_hub
 
# 사전 설정을 사용하여 모델을 로드하거나
Model = keras_hub.models.<model_name>.from_preset('preset_name`)
 
# 백본 및 전처리기를 지정하여 사용자 설정 모델 로드
Model = keras_hub.models.<model_name>(backbone=backbone, preprocessor=preprocessor)

더 큰 유연성 및 확장된 기능과 더불어 KerasHub는 KerasCV 개발자를 위해 다음을 포함한 흥미진진하고 새로운 여러 기능을 도입합니다.


기본 제공되는 전처리 기능

각 모델에는 크기 조정과 재조정 등 루틴 작업을 처리하는 맞춤형 전처리기가 함께 제공되어 워크플로를 간소화합니다.

이 기능이 나오기 전에는 입력 전처리를 수동으로 수행한 후 모델에 입력값을 제공했습니다.

# 전처리 입력의 예
def preprocess_inputs(image, label):
    # 입력값에 대해 크기를 조정하거나 더 많은 전처리 수행
    return preprocessed_inputs
backbone = keras_cv.models.ResNet50V2Backbone.from_preset(
    "resnet50_v2_imagenet",
)
model = keras_cv.models.ImageClassifier(
    backbone=backbone,
    num_classes=4,
)
output = model(preprocessed_input)

현재, 작업 모델의 전처리는 설정된 사전 설정 내에 통합되어 있습니다. 입력값은 전처리 과정을 거치는데, 이때 샘플 이미지가 전처리기 내에서 크기 조정 및 재조정을 거칩니다. 전처리기는 작업 모델의 기본 구성요소입니다만 맞춤형 전처리기를 활용할 수 있는 옵션이 있습니다.

classifier = keras_hub.models.ImageClassifier.from_preset('resnet_18_imagenet')
classifier.predict(inputs)

손실 함수

증강 레이어와 유사하게, KerasCV에서 이전에 제공하던 손실 함수를 이제 keras.losses.<loss_function>을 통해 Keras에서 사용할 수 있습니다. 예를 들어, 현재 FocalLoss 함수를 사용 중이라면 다음 문을 사용하세요.

import keras
import keras_cv
 
keras_cv.losses.FocalLoss(
    alpha=0.25, gamma=2, from_logits=False, label_smoothing=0, **kwargs
)

keras_cv.losses 대신 keras.losses를 사용하도록 손실 함수 정의 코드를 조정하기만 하면 됩니다.

import keras
 
keras.losses.FocalLoss(
    alpha=0.25, gamma=2, from_logits=False, label_smoothing=0, **kwargs
)

KerasHub 시작하기

지금 바로 KerasHub의 세계로 들어오세요.


Keras 커뮤니티에 가입하여 통합적이고 접근성이 높으며 효율적인 딥 러닝 모델의 힘을 활용하세요. AI의 미래는 멀티모달이며 KerasHub가 그 미래로 가는 관문입니다!