Wizja dla projektów hobbystycznych bez kupowania klastra GPU
Za każdym razem, gdy musisz dodać rozpoznawanie obrazów lub Q&A oparte na zdjęciach do projektu, sięgasz po interfejsy API chmurowe. Ale płacenie za każde wywołanie OpenAI lub kierowanie żądań przez usługi stron trzecich nie zawsze jest pożądane. Uruchomienie ciężkiego modelu multimodalnego lokalnie również nie jest łatwe: większość rozwiązań open source wymaga GPU z 24 GB pamięci lub więcej.
Repozytorium moondream rozwiązuje dokładnie ten problem. Deweloperzy z m87-labs złożyli kompaktowy model multimodalny, który pewnie analizuje obrazy, ważąc zaledwie kilka gigabajtów i działa płynnie nawet na skromnym sprzęcie.
Co potrafi moondream
Model przyjmuje obraz wraz z zapytaniem tekstowym jako dane wejściowe i zwraca znaczącą odpowiedź w języku naturalnym. Repozytorium zawiera dwie wersje:
- moondream 2B z dwoma miliardami parametrów do standardowych zadań, w tym generowania podpisów, odpowiadania na pytania wizualne i wykrywania obiektów
- moondream 0.5B z 500 milionami parametrów, skompresowany poprzez destylację do uruchamiania na smartfonach, komputerach jednopłytkowych i mikrousługach z minimalnym zużyciem RAM
Oto kilka przykładów z repozytorium:

Jeśli zapytasz model, co robi osoba na zdjęciu, odpowie: „Dziewczynka siedzi przy stole i je dużego hamburgera". Gdy zapytasz o kolor włosów, wyraźnie określi, że są białe.
Drugi przykład pokazuje bardziej szczegółowy podział środowiska:

Gdy zapyta się „Co to jest?", moondream generuje szczegółowy akapit: rozpoznaje serwerownię, zauważa podłączone kable zasilające, dywan na podłodze i pobliską sofę, a także ceglaną ścianę w tle.
Jak uruchomić lokalnie
Model jest napisany w Pythonie i integruje się z projektami w zaledwie kilkunastu liniach kodu. Podstawowe wnioskowanie wymaga tylko standardowych bibliotek Hugging Face.
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "vikhyatk/moondream2"
revision = "2024-08-26"
model = AutoModelForCausalLM.from_pretrained(
model_id,
trust_remote_code=True,
revision=revision
)
tokenizer = AutoTokenizer.from_pretrained(model_id, revision=revision)
image = Image.open("photo.jpg")
enc_image = model.encode_image(image)
answer = model.answer_question(enc_image, "Describe this image in detail.", tokenizer)
print(answer)
Wersja 0.5B działa nawet na samym CPU bez krytycznych opóźnień. Jeśli zasoby lokalne nie są dostępne w ogóle, autorzy przygotowali przykłady wdrożeń za pośrednictwem platformy serverless Modal.
Gdzie to przydaje się w praktyce
Niewielki rozmiar otwiera scenariusze, w których duże modele po prostu nie mieszczą się w budżecie lub wymaganiach dotyczących opóźnień:
- Automatyczne tagowanie i podpisywanie w lokalnych archiwach mediów.
- Moderacja treści w botach i formularzach internetowych bezpośrednio na serwerze aplikacji.
- Robotyka i urządzenia DIY oparte na Raspberry Pi, gdzie nie ma dostępu do stabilnego internetu.
- Szybkie filtrowanie obrazów przed wysłaniem ich do ciężsшего post-processingu.
Oczywiście nie należy oczekiwać, że model z pół miliardem parametrów zrozumie złożone infografiki lub odczyta odręczny tekst. Ale do podstawowej nawigacji po obrazach i opisywania scen, moondream sprawuje się doskonale.
Jeśli potrzebujesz szybkiego i lekkiego modułu VLM, który nie zrujnuje budżetu na serwery i będzie działać nawet na laptopie, moondream zdecydowanie zasługuje na przetestowanie w sandboxzie. Możesz wypróbować model w przeglądarce na oficjalnej stronie projektu w sekcji Playground.
Powiązane projekty