본문 바로가기
AI 언어 모델

👁️PaliGemma 2: 구글의 최신 오픈소스 비전-언어 모델(VLM)

by James AI Explorer 2024. 12. 8.
    728x90

    안녕하세요! 오늘은 Google DeepMind가 개발한 최신 비전-언어 모델(VLM) PaliGemma 2에 대해 살펴보겠습니다. PaliGemma 2는 이미지와 텍스트를 동시에 이해하고 처리할 수 있는 첨단 AI 모델로, 기존의 PaliGemma를 업그레이드한 버전입니다. 특히, 3B에서 28B에 이르는 다양한 크기의 매개변수와 여러 해상도를 제공하며, 텍스트 감지, 캡션 생성, 방사선 촬영 보고서 작성 등 여러 분야에서 뛰어난 성능을 보여줍니다. 이번 블로그에서는 PaliGemma 2의 주요 특징, 벤치마크 결과에 대해 알아보고 직접 테스트해 보겠습니다. 

    👁️PaliGemma 2: 구글의 최신 오픈소스 비전-언어 모델(VLM)
    PaliGemma 2 이미지 캡션 생성 테스트

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    PaliGemma 2 개요

    PaliGemma 2는 Google DeepMind에서 개발한 오픈소스 비전-언어 모델(VLM) PaliGemma의 업그레이드 버전으로, 이미지를 "보고" 이해하고 상호 작용할 수 있는 시각 AI를 구축하는 데 사용할 수 있습니다. 2024년 5월 출시된 PaliGemma는 Gemma 제품군의 첫 번째 VLM으로, 최첨단 시각 AI를 보다 쉽게 이용할 수 있도록 하는 중요한 진전을 이루었으며, PaliGemma 2는 이러한 기능을 기반으로 하여 튜닝 가능한 VLM의 발전을 나타냅니다.

     

    PaliGemma 2는 성능이 뛰어난 Gemma 2 언어 모델을 기반으로 시각적 입력을 보고 이해하고 상호 작용할 수 있는 기능을 추가했습니다. PaliGemma 2는 다양한 모델 크기와 해상도로 제공되므로 특정 작업에 맞게 성능을 최적화할 수 있으며, 기존 PaliGemma 사용자는 PaliGemma 2로 쉽게 업그레이드할 수 있습니다. PaliGemma 2는 SigLIP-So400m이라는 비전 인코더를 사용하며, 이 인코더는 약 4억 개의 파라미터를 가지고 있습니다.

    모델 비전 인코더 파라미터 수 LLM 파라미터 수 훈련비용(224 px² 예시 당)
    PaliGemma 2 3B 400M 2.6B 1.0
    PaliGemma 2 10B 400M 9.3B 3.7
    PaliGemma 2 28B 400M 27.3B 18.9

     

    https://developers.googleblog.com/en/introducing-paligemma-2-powerful-vision-language-models-simple-fine-tuning/

     

    Introducing PaliGemma 2: Powerful Vision-Language Models, Simple Fine-Tuning- Google Developers Blog

    Building custom, advanced AI that can "see" used to be a complex and resource-intensive endeavor. Not anymore. This past May, we launched PaliGemma, the first vision-language model in the Gemma family, taking a significant step toward making class-leading

    developers.googleblog.com

    728x90

    PaliGemma 2 특징 및 주요 기능

    PaliGemma 2는 다양한 모델 크기와 해상도, 다양한 작업에 대한 뛰어난 성능, 사용하기 쉬운 인터페이스를 포함한 여러 가지 주요 기능을 제공합니다.

    • 확장 가능한 성능: PaliGemma 2는 3B, 10B, 28B 매개변수의 여러 모델 크기와 224px, 448px, 896px의 해상도를 제공합니다. 이를 통해 사용자는 작업에 맞게 성능을 최적화할 수 있습니다. 예를 들어 더 큰 모델을 사용하면 언어 이해도를 향상시킬 수 있고, 더 높은 해상도를 사용하면 입력 이미지의 세부 사항을 더 잘 파악할 수 있습니다.
    • 긴 캡션 생성: PaliGemma 2는 이미지에 대한 자세하고 문맥적으로 관련된 캡션을 생성할 수 있습니다. 단순한 객체 식별을 넘어 장면의 행동, 감정, 전체적인 서술을 설명할 수 있습니다. 예를 들어 PaliGemma 2는 말의 털 색깔, 안장 유무, 배경에 있는 다른 물체와 같은 세부 정보를 포함하여 말 이미지에 대한 자세한 캡션을 생성할 수 있습니다.

    PaliGemma 2 모델의 캡셔닝 성능

    • 새로운 분야로의 확장: PaliGemma 2는 화학식 인식, 악보 인식, 공간 추론, 흉부 엑스레이 보고서 생성과 같은 다양한 작업에서 뛰어난 성능을 보여줍니다. 이러한 기능은 PaliGemma 2를 다양한 분야의 연구자와 개발자에게 귀중한 도구로 만듭니다.

    미세조정된 PaliGemma 2의 X-ray 분석 응답

    https://huggingface.co/blog/paligemma2

     

    Welcome PaliGemma 2 – New vision language models by Google

    Welcome PaliGemma 2 – New vision language models by Google We are excited to welcome Google's all-new vision language models, PaliGemma 2, a new iteration of PaliGemma. Like its predecessor, PaliGemma 2 uses the same powerful SigLIP for vision, but it up

    huggingface.co

     

    PaliGemma 2 벤치마크 결과

    PaliGemma 2는 다양한 학술적 작업에 대한 적용 가능성을 검증하기 위해 각 작업에 대해 사전 훈련된 모델을 미세 조정하여 평가되었습니다. 중요한 점은 이러한 작업이나 데이터 세트는 사전 훈련 데이터 혼합에 포함되지 않았으며, 해당 이미지는 웹 규모 사전 훈련 데이터에서 명시적으로 제외되었습니다.(다운로드할 수 있는 사전 훈련된 모델은 X-ray 분석과 같은 전문적인 작업을 할 수 없습니다.)

     

    아래 표는 PaliGemma 2의 모델 해상도와 크기에 따른 벤치마크 결과를 보여줍니다.

    벤치마크 224px²-3B 224px²-10B 224px²-28B 448px²-3B 448px²-10B 448px²-28B
    AI2D 74.7 83.1 83.2 76.0 84.4 84.6
    AOKVQA-DA (val) 64.2 68.9 70.2 67.9 70.8 71.2
    AOKVQA-MC (val) 79.7 83.7 84.7 82.5 85.9 87.0
    ActivityNet-CAP 34.2 35.9 - - - -
    ActivityNet-QA 51.3 53.2 - - - -
    COCO-35L (avg34) 113.9 115.8 116.5 115.8 117.2 117.2
    COCO-35L (en) 138.4 140.8 142.4 140.4 142.4 142.3
    COCOcap 141.3 143.7 144.0 143.4 145.0 145.2

    대부분의 벤치마크에서 모델 크기와 해상도가 증가할수록 성능이 향상되는 경향을 보입니다. 특히 DOCCI 데이터 세트를 사용한 긴 캡션 생성에서 PaliGemma 2는 다른 VLM 모델들에 비해 훨씬 낮은 사실적 오류율을 보이며 높은 정확성을 입증했습니다.

     

     

     

     

     

    PaliGemma 2 테스트

    테스트 코드는 Streamlit을 활용해 paligemma2-3b-ft-docci-448 모델로 이미지 캡션을 생성하는 웹 애플리케이션입니다. 사용자가 이미지를 업로드하면 PIL로 변환한 뒤, transformers 라이브러리를 이용해 모델 입력값으로 처리하고, 이미지를 설명하는 캡션을 생성합니다. CUDA 지원으로 처리 속도를 높이며, 결과를 텍스트와 이미지 형태로 보여줍니다.

     

    시스템 요구 사항:

    • Python 버전: 3.8 이상 권장
    • GPU 요구 사항: CUDA 지원 NVIDIA GPU (빠른 추론을 위해 권장), CUDA 툴킷 설치 필요
    • 디스크 공간: 모델 가중치를 위해 최소 10GB 여유 공간 필요

    모델 다운로드를 위해 Hugging Face 로그인이 필요하며, "pip install huggingface_hub" 명령어로 의존성 라이브러리를 설치한 후,  "huggingface-cli login" 명령어를 실행하고, Hugging Face 웹사이트에 로그인 우측 상단 프로필 클릭 → Settings "Access Tokens" 섹션으로 이동 "New token" 버튼 클릭 토큰에 적절한 이름과 권한 부여하면 됩니다. 

    Hugging Face cli 로그인

    코드 실행을 위한 의존성 설치는 다음 명령어를 실행하시면 됩니다. 

    pip install huggingface_hub
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    pip install torch transformers streamlit pillow requests
    import os
    os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"
    
    import torch
    from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
    from PIL import Image
    import requests
    import gc
    import streamlit as st
    import time
    import io
    
    # 페이지 설정
    st.set_page_config(
        page_title="PaliGemma 2 이미지 캡셔닝",
        page_icon="🖼️",
        layout="wide"
    )
    
    # 제목과 설명
    st.title("🖼️ PaliGemma 2 이미지 캡셔닝")
    st.write("이미지를 업로드하고 PaliGemma 2 모델을 사용하여 설명을 생성해보세요")
    
    @st.cache_resource
    def load_model():
        start_time = time.time()
        
        # CUDA 메모리 초기화
        if torch.cuda.is_available():
            torch.cuda.empty_cache()
            gc.collect()
        
        model_id = "google/paligemma2-3b-ft-docci-448"
        model = PaliGemmaForConditionalGeneration.from_pretrained(
            model_id,
            device_map="auto",
            torch_dtype=torch.float16,
            low_cpu_mem_usage=True
        )
        processor = AutoProcessor.from_pretrained(model_id)
        return model, processor
    
    # 모델 로딩
    with st.spinner("Loading model... This might take a few minutes."):
        model, processor = load_model()
    
    # 파일 업로더
    uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
    
    if uploaded_file is not None:
        try:
            # 업로드된 이미지를 PIL Image로 변환
            image_bytes = uploaded_file.read()
            raw_image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
            
            # 열 생성
            col1, col2 = st.columns(2)
    
            # 왼쪽 열에 이미지 표시
            with col1:
                st.image(raw_image, caption="Uploaded Image", use_container_width=True)
    
            # 오른쪽 열에 캡션 생성 버튼 및 결과 표시
            with col2:
                if st.button("Generate Caption"):
                    with st.spinner("Generating caption..."):
                        start_time = time.time()
                        
                        # 입력 준비
                        prompt = "<image>caption en"
                        inputs = processor(prompt, raw_image, return_tensors="pt").to("cuda")
                        
                        # 캡션 생성
                        with torch.inference_mode():
                            output = model.generate(
                                **inputs,
                                max_new_tokens=4096,
                                num_beams=4,
                                length_penalty=1.0,
                                no_repeat_ngram_size=2
                            )
                        
                        # 결과 디코딩
                        caption = processor.decode(output[0], skip_special_tokens=True)[len(prompt):].strip()
                        
                        # 처리 시간 계산
                        processing_time = time.time() - start_time
                        
                        # 결과 표시
                        st.success("Caption generated!")
                        st.write("### Generated Caption:")
                        st.write(caption)
                        st.write(f"Processing time: {processing_time:.2f} seconds")
                    
        except Exception as e:
            st.error(f"An error occurred: {str(e)}")
    
    # 푸터
    st.markdown("---")
    st.markdown("Made with ❤️ using PaLI-Gemma and Streamlit")

    PaliGemma 2 이미지 캡션 생성 웹 애플리케이션 초기화면
    paligemma2-3b-ft-docci-448의 X-ray 이미지 캡션 생성결과

    사람의 가슴과 갈비뼈를 보여주는 흑백 흉부 X-레이. 가슴 부위는 어두운 회색이고, 갈비뼈는 더 밝은 회색입니다. 가슴의 왼쪽과 오른쪽에 작은 흰색 원 세 개가 있고, 그들의 몸 중앙을 가로질러 수평으로 긴 흰색 선이 있습니다. 왼쪽 상단 모서리에는 "PORTABLE"이라고 적힌 검은색 텍스트가 있습니다. 오른쪽 상단 모서리에는 위를 가리키는 화살표가 있습니다.

    아래 화면은 paligemma2-10b-ft-docci-448 모델을 LightningAI에서 테스트한 결과입니다. LightningAI 사용방법은 이전 포스팅을 참고하시기 바랍니다. 

    2024.06.02 - [AI 도구] - ⚡️🆓Lightning AI: 무료 GPU 클라우드 기반 AI 개발 플랫폼 Ollama 가이드

    paligemma2-10b-ft-docci-448의 X-ray 이미지 캡션 생성결과

    사람의 가슴 엑스레이 사진입니다. 사람은 정면을 향하고 있으며, 이미지의 색은 흑백입니다. 흰색 화살표가 가슴 부위의 오른쪽 상단을 가리키고 있습니다. 가슴의 중앙에는 흰색으로 일자형인 척추가 보입니다. 척추의 왼쪽과 오른쪽에는 폐가 있습니다. 폐는 어두운 회색이고, 질감이 거칠어 보입니다. 흰색의 갈비뼈가 양쪽에 보이며, 어깨까지 이어집니다. 그들 양쪽에는 팔꿈치 아래에서 가슴을 가로지르는 얇은 흰색 선들이 보입니다. 맨 위에는 사람의 머리 위에 "PORTABLE"이라는 단어가 검은 배경에 흰색 글자로 적혀 있습니다.

    paligemma2-10b-ft-docci-448 모델이 생성한 캡션은 3B 모델보다 좀 더 자세하고 사실적인 것을 확인할 수 있습니다. 

    paligemma2-3b-ft-docci-448 이미지 캡션 생성결과

    왼쪽을 향하고 있는 갈색 말의 모습입니다. 이 말은 검정색과 갈색 안장을 착용하고 있습니다. 오른쪽 뒷다리에는 흰색으로 "55"라는 숫자가 쓰여 있고, 왼쪽 어깨에는 흰색 별이 그려져 있습니다. 말 앞에는 흙이 있으며, 뒤쪽에는 작은 창이 있는 흰색 석조 건물이 보입니다. 오래된 빨간 금속 구조물의 일부가 보이며, 그 너머로 나무들과 하늘이 보입니다.

    paligemma2-10b-ft-docci-448 이미지 캡션 생성결과

    왼쪽을 향해 머리를 숙인 갈색 말의 모습입니다. 말의 등에 검은색 안장이 있고, 오른쪽에 흰색으로 "55"라는 숫자가 적혀 있습니다. 안장 아래에는 흰색으로 "8"이 그려져 있고, 그 주위에 별 모양이 그려져 있습니다. 말은 흙과 바위 위에 서 있습니다. 뒤쪽에는 오래된 돌 건물의 일부가 보입니다. 멀리 나무들이 보입니다.

    paligemma2-3b-ft-docci-448 이미지 캡션 생성결과

    이미지는 플루코나졸의 화학 구조를 보여줍니다. 구조는 두 개의 육각형 고리와 그 사이에 있는 중앙 고리로 이루어져 있습니다. 왼쪽 고리는 다섯 개의 플루오린 원자가 붙어 있는 페닐 고리로, 양쪽에 각각 두 개의 플루오린 원자가 위치해 "F" 모양을 형성하고 있습니다. 오른쪽 고리는 또 다른 육각형 고리로, 상단과 하단에 각각 CH3(메틸기)가 붙어 있습니다. 두 고리 사이에는 점선으로 연결된 부분이 있는데, 이는 특정 원자의 위치를 나타냅니다.

    paligemma2-10b-ft-docci-448 이미지 캡션 생성결과

    플루옥세틴의 화학 구조의 이미지입니다. 배경은 흰색이고, 이미지의 색상은 검은색입니다. 오른쪽 상단에는 중앙을 가로지르는 선이 있는 육각형이 있습니다. 그 육각형의 왼쪽에는 "O"가 있고, 오른쪽에는 "CH3"가 튀어나와 있습니다. 이 육각형의 왼쪽 하단에는 또 다른 육각형이 있으며, 하나의 선으로 연결되어 있습니다. 이 하단 육각형에는 네 개의 선이 연결되어 있고, 각 선 끝에는 "F"가 있습니다. 맨 아래에는 여섯 개의 면을 가진 고리가 하나의 두 끝이 있는 선에 연결되어 있으며, 한 끝에는 "N"이, 다른 끝에는 이중 결합인 "C=O"가 있습니다.

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    맺음말

    PaliGemma 2는 다양한 작업에서 인상적인 성능을 제공하는 강력한 VLM 제품군입니다. 이러한 모델은 접근성과 사용 편의성을 염두에 두고 설계되었으며 연구자와 개발자가 고급 AI 애플리케이션을 쉽게 구축할 수 있도록 지원하여, 텍스트 감지 및 인식, 표 구조 인식, 분자 구조 인식, 악보 인식, 흉부 방사선 보고서 생성 등 다양한 분야에서 뛰어난 성능을 보여주며 폭넓은 활용 가능성을 제시합니다.

     

    여러분도 Paligemma 2 모델을 활용해서 다양한 시각 AI 애플리케이션을 경험해 보시면 좋을 것 같습니다. 저는 다음 시간에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다. 

     

    https://fornewchallenge.tistory.com/

     

     

    2024.09.08 - [AI 언어 모델] - 🌋LLaVA-OneVision: GPT-4o 대체할 오픈소스 비디오·다중 이미지 분석 모델

     

    🌋LLaVA-OneVision: GPT-4o 대체할 오픈소스 비디오·다중 이미지 분석 모델

    안녕하세요! 오늘은 최신 오픈소스 멀티모달 모델인 LLaVA-OneVision에 대해 알아보겠습니다. 이 모델은 단일 이미지, 다중 이미지, 그리고 비디오 시나리오에서도 우수한 성능을 발휘하는 최초의

    fornewchallenge.tistory.com

    2024.09.28 - [AI 언어 모델] - 👁️🤖Llama 3.2: 에지 컴퓨팅과 비전까지 확장한 Meta의 AI 모델

     

    👁️🤖Llama 3.2: 에지 컴퓨팅과 비전까지 확장한 Meta의 AI 모델

    안녕하세요! 오늘은 Meta에서 공개한 최신 오픈소스 대규모 언어 모델(LLM)인 Llama 3.2에 대해 알아보겠습니다. Llama 3.2는 이전 3.1 버전보다 향상된 성능을 보여주며, 특히 에지(Edge) 컴퓨팅 및 비전

    fornewchallenge.tistory.com

    👁️PaliGemma 2: 구글의 최신 오픈소스 비전-언어 모델(VLM)

    728x90