본문 바로가기
AI 언어 모델

Qwen2-VL: 👁️알리바바의 오픈소스 비전 언어모델

by James AI Explorer 2024. 9. 3.
    728x90

    안녕하세요! 오늘은 알리바바 클라우드 AI 연구소가 개발한 오픈소스 비전 언어모델, Qwen2-VL(Vision Language)에 대해서 알아보겠습니다. Qwen2-VL은 기존 Qwen-VL 모델의 후속작으로, Qwen2 대규모 언어모델을 기반으로 시각적 이해 능력을 갖춘 모델입니다. 특히 이 모델은 이미지뿐 아니라 영상 처리 능력까지 갖추고 있으며, 여러 언어의 텍스트를 인식합니다. 이 블로그에서는 Qwen2-VL의 개요 및 특징과 아키텍처에 대해 알아보고 비전 기능을 테스트해 보겠습니다.

    Qwen2-VL: 👁️알리바바의 오픈소스 비전 언어모델

    https://qwenlm.github.io/blog/qwen2-vl/

     

    Qwen2-VL: To See the World More Clearly

    DEMO GITHUB HUGGING FACE MODELSCOPE API DISCORD After a year’s relentless efforts, today we are thrilled to release Qwen2-VL! Qwen2-VL is the latest version of the vision language models based on Qwen2 in the Qwen model familities. Compared with Qwen-VL,

    qwenlm.github.io

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

    Qwen2-VL 특징

    Qwen2-VL은 2B, 7B, 72B 등 다양한 크기의 모델로 출시되었습니다. 이 중 2B와 7B 모델은 오픈소스로 공개되어 누구나 자유롭게 사용할 수 있으며, 최대 성능을 가진 72B 모델은 API를 통해 접근할 수 있습니다. 이 모델의 가장 큰 특징은 다양한 해상도와 비율의 이미지를 처리할 수 있다는 점입니다. 또한 20분 이상의 긴 영상도 이해할 수 있으며, 영어와 중국어뿐만 아니라 다양한 언어로 된 이미지 속 텍스트도 이해할 수 있어 다국어 지원 기능도 갖추고 있습니다.

     

    Qwen2-VL의 주요 특징을 살펴보겠습니다.

    • 물체 인식 능력: Qwen2-VL은 단순히 식물이나 랜드마크를 인식하는 수준을 넘어 한 장면 속 여러 물체 간의 복잡한 관계까지 이해할 수 있습니다. 또한 손글씨 인식 능력도 개선되었으며, 이미지 속 다양한 언어의 텍스트를 인식할 수 있어 글로벌 사용자들에게 유용한 도구가 될 수 있을 것 같습니다. 
    질문내용: 이미지에 등장하는 사람들의 동작을 설명해줘 Qwen2-VL-72B 답변내용
    이 이미지에서 사람들의 다양한 동작을 볼 수 있습니다:
    걷기: 대부분의 사람들이 길을 걷고 있습니다. 일부는 속도를 높여 걷고, 일부는 느리게 걷고 있습니다.
    쇼핑백 들기: 몇몇 사람들은 쇼핑백을 들고 있습니다. 이는 그들이 쇼핑을 하고 있거나, 쇼핑을 마친 후인 것을 시사합니다.
    휴대폰 사용: 몇몇 사람들은 휴대폰을 사용하고 있습니다. 이들은 텍스트 메시지를 보내거나, 사진을 찍거나, 인터넷을 검색하고 있을 수 있습니다.
    대화: 일부 사람들은 함께 걷면서 대화를 나누고 있습니다. 이들은 친구나 가족일 수 있습니다.
    사진 찍기: 한 사람은 사진을 찍고 있습니다. 이는 그들이 이 지역을 여행하고 있거나, 특별한 순간을 기록하고 있을 수 있습니다.
    기다리기: 일부 사람들은 길가에서 기다리고 있습니다. 이들은 버스나 택시를 기다리거나, 누군가를 기다리고 있을 수 있습니다. 이러한 동작들은 도시의 활기찬 분위기를 잘 보여줍니다.
    질문내용: 글자를 추출해줘 Qwen2-VL-72B 답변내용
    • 시각적 추론 실제 문제 해결: 이번 버전에서는 수학 및 코딩 능력이 크게 향상되었습니다. 단순히 이미지를 분석하여 문제를 해결하는 것뿐만 아니라, 차트 분석을 통해 복잡한 수학 문제를 해석하고 해결할 수 있습니다. 심지어 비율이 극단적으로 왜곡된 이미지도 정확하게 해석할 수 있습니다. 
    질문: 문제를 풀어줘 Qwen2-VL-72B 답변내용
    이 문제는 두 함수 ( f(x) )와 ( g(x) )의 도함수 ( f'(x) )와 ( g'(x) )의 그래프를 이용하여 함수 ( h(x) = f(x) - g(x) )의 특성을 분석하는 문제입니다. 함수 ( h(x) )의 극값점 찾기: 함수 ( h(x) )의 극값점은 ( h'(x) = 0 )인 점에서 발생합니다. ( h'(x) = f'(x) - g'(x) )이므로, ( f'(x) = g'(x) )인 점을 찾습니다. 그래프에서 ( f'(x) )와 ( g'(x) )이 만나는 점은 ( x = a )입니다. 따라서, ( h(x) )의 극값점은 ( x = a )입니다. 함수 ( h(x) )의 극값점에서의 극값 구하기: ( h(x) )의 극값은 ( x = a )에서 발생합니다. ( h(a) = f(a) - g(a) )를 구합니다. 그래프에서 ( f'(a) = 7 )이고, ( g'(a) = 2 )입니다. 따라서, ( h(a) = f(a) - g(a) )의 값은 ( 7 - 2 = 5 )입니다. 함수 ( h(x) )의 극값점에서의 극값의 성질: ( h(x) )의 극값점에서의 극값은 ( 5 )입니다. 이는 ( h(x) )가 ( x = a )에서 극대값을 가지는 것을 의미합니다. 함수 ( h(x) )의 극값점에서의 극값의 성질: ( h(x) )의 극값점에서의 극값은 ( 5 )입니다. 이는 ( h(x) )가 ( x = a )에서 극대값을 가지는 것을 의미합니다. 함수 ( h(x) )의 극값점에서의 극값의 성질: ( h(x) )의 극값점에서의 극값은 ( 5 )입니다. 이는 ( h(x) )가 ( x = a )에서 극대값을 가지는 것을 의미합니다. 따라서, 문제의 정답은 다음과 같습니다: 함수 ( h(x) )는 ( x = a )에서 극대값을 갖습니다. ( h(b) = 0 )이면 방정식 ( h(x) = 0 )의 서로 다른 실근의 개수는 2개입니다. ( 0 < a < b )인 두 실수 ( \alpha, \beta )에 대하여 ( h(\beta) - h(\alpha) < 5(\beta - \alpha) )입니다. 따라서, 정답은 (3)입니다.


    위 답변 내용을 클로드 3.5 Sonnet과 Gemini-1.5-pro-exp-0827에게 확인한 결과 두 모델 모두 보기의 모든 내용이 옳고, 정답은 5번이라고 하였습니다. 따라서 Qwen2-VL-7B의 답변내용을 틀린것으로 보입니다. 
    질문내용: 이미지를 설명해줘 Qwen2-VL-72B 답변내용
    왜곡된 이미지에 대한 Qwen2-VL의 답변
    이 이미지는 사람들이 움직이는 모습을 포착한 장면입니다. 사진은 아래에서 위를 바라보는 각도로 촬영되어 있으며, 바닥이 보입니다. 몇몇 사람들은 걷고 있고, 한 사람은 가방을 끌고 있습니다. 이동 중인 사람들의 움직임이 블러(흐림)되어 있어, 활동적인 분위기를 전달하고 있습니다. 바닥은 반사성이 있어, 조명이 반사되어 빛나는 효과를 보입니다.
    • 비디오 이해 및 실시간 채팅: Qwen2-VL은 정적인 이미지를 넘어 비디오 콘텐츠 분석까지 그 능력을 확장했습니다. 비디오 내용을 요약하고, 관련 질문에 답변하며, 실시간으로 대화를 이어갈 수 있습니다. 이 기능을 통해 개인 비서처럼 작동하며, 비디오 콘텐츠에서 직접 추출한 인사이트와 정보를 제공할 수 있습니다.
    질문내용: 비디오 내용을 설명해줘 Qwen2-VL-72B 답변내용
    영상은 한 남자가 카메라를 향해 말하는 장면으로 시작됩니다. 그리고 그 뒤에는 한 무리의 사람들이 제어실에 앉아 있는 장면이 나옵니다. 그리고 카메라는 우주 정거장 안에서 떠다니는 두 남자의 모습으로 전환됩니다. 이 두 남자는 우주 비행사로 보이며, 우주복을 입고 있습니다. 우주 정거장 안에는 다양한 장비와 기계들이 있으며, 카메라는 이 정거장 안을 돌아다니며 다양한 장면들을 보여줍니다. 이 두 남자는 계속해서 카메라를 향해 말하며, 그들의 임무와 관련된 다양한 이야기들을 나눕니다. 이 영상은 우주 비행사들의 일상적인 모습과 우주 정거장 안에서의 생활을 엿볼 수 있는 흥미로운 영상입니다.
    • 시각적 에이전트 기능: 함수 호출 및 시각적 상호작용 Qwen2-VL은 시각적 에이전트로서 강력한 잠재력을 보여줍니다. 인간의 세계 인식과 유사한 방식으로 상호작용을 할 수 있습니다. 모델은 시각적 단서를 해석하여 외부 도구를 활용해 실시간 데이터를 검색할 수 있습니다. 이는 항공편 상태, 날씨 예보, 택배 추적 등의 정보를 실시간으로 가져올 수 있음을 의미합니다. 

    물론 모델이 완벽한 것은 아니며 여러가지 한계가 있습니다. 예를 들어 비디오에서 오디오를 추출할 수 없고, 지식은 2023년 6월까지만 업데이트되어 있으며, 복잡한 지시사항이나 시나리오를 처리할 때 완벽한 정확성을 보장할 수 없고, 복잡한 수학문제, 필기체 또는 기울어진 문자 인식, 3D 공간 인식 등의 작업에서는 부족한 성능을 보입니다.

    728x90

    Qwen2-VL 아키텍처

    Qwen2-VL은 이미지와 비디오 입력을 원활하게 처리하도록 설계된 약 6억 개의 매개변수를 가진  Vision Transformer(ViT)를 사용하며, 이전 버전과 달리 임의의 이미지 해상도를 처리할 수 있습니다. 이미지를 이미지의 특성에 맞춰 시각적 토큰의 개수를 조절함으로써 동적 수의 시각적 토큰으로 매핑하여 모델 입력과 이미지의 고유 정보 간의 일관성을 보장합니다. 이를 통해 모델은 모든 선명도 또는 크기의 이미지를 처리할 수 있습니다.

    Qwen2-VL 아키텍처

    위 아키텍처에서 입력 이미지 또는 비디오는 Vision Encoder에 의해 시각적 토큰으로 변환됩니다. 시각적 토큰과 텍스트 토큰은 QwenLM Decoder에 입력됩니다. QwenLM Decoder는 M-ROPE를 사용하여 시각적 토큰 및 텍스트 정보의 위치 관계를 이해하고 텍스트를 생성합니다. 

    • Vision Encoder: 이미지와 비디오를 입력받아 시각적 토큰으로 변환합니다. Native Dynamic Resolution을 통해 다양한 해상도의 입력을 처리할 수 있습니다.
    • QwenLM Decoder: 시각적 토큰과 텍스트 토큰을 입력받아 텍스트를 생성합니다. M-ROPE를 통해 시각적 토큰 및 텍스트 정보의 위치 관계를 이해합니다. M-ROPE(Multimodal Rotary Position Embedding, 멀티모달 회전 위치 임베딩)는 기존 회전 임베딩을 시간 및 공간 정보를 나타내는 세 부분으로 분해하여 LLM이 1D 텍스트, 2D 시각 및 3D 비디오 위치 정보를 동시에 캡처하고 통합할 수 있도록 합니다.

    M-ROPE 개념도

    위 개념도에서 각 픽셀의 위치 정보 (시간, 높이, 너비)는 M-ROPE를 통해 고차원 공간의 벡터로 변환되고, 오른쪽 그림에서 각 상자는 하나의 벡터를 나타내며, 상자의 색상은 시간 축을 따라 변화하는 것을 보여줍니다. M-ROPE는 회전 행렬을 사용하여 위치 정보를 인코딩하며, 이는 상대적인 위치 관계를 효과적으로 모델링하고, 이미지 특징과 함께 위치 정보를 처리하여 픽셀 간의 시공간적 관계를 더 잘 이해할 수 있습니다.

    Qwen2-VL 성능평가

    Qwen2-VL의 시각적 능력은 복잡한 대학 수준의 문제 해결, 수학적 능력, 문서 및 표 이해, 다국어 텍스트-이미지 이해, 일반 시나리오 질문-답변, 비디오 이해, 그리고 에이전트 기반 상호작용 총 6가지 주요 차원에 대한 평가입니다. 72B 모델은 대부분의 지표에서 가장 높은 수준의 성능을 보여주었으며, 특히 문서 이해 능력에서 큰 강점을 보였습니다. 7B 규모에서는 이미지, 다중 이미지, 비디오 입력에 대한 지원을 유지하면서도 경쟁력 있는 성능을 제공합니다.

    Qwen2-VL-72B의 시각적 능력 평가결과

    위 이미지는 다양한 비전-언어 과제에서 Qwen2-VL-72B 모델의 성능을 다른 최첨단 모델들과 비교한 것입니다. 다만 벤치마크 결과가 실제 성능과 동일한 것은 아니므로 참고하시면 될 것 같습니다. 

    • 전반적인 성능: Qwen2-VL-72B는 대부분의 과제에서 GPT-4o-0513, Claude 3.5-Sonnet과 같은 강력한 모델들을 능가하며 높은 수준의 성능을 보여줍니다. 특히, 대학 수준 문제와 문서 및 다이어그램 읽기에서 두드러지는 성능을 보이고 있습니다. 
    • 다양한 과제 경쟁력: Qwen2-VL-72B는 특정 분야에 국한되지 않고 다양한 비전-언어 과제에서 경쟁력 있는 성능을 입증했습니다.
    • 높은 정확도: DocVQA (문서 이해), OCRBench (문자인식), MTVQA (영화 이해), RealWorldQA (실세계 질문 답변) 등의 과제에서 높은 정확도를 기록했습니다.
    • 비디오 이해 (Video Understanding): Video-MME 과제에서 Gemini 1.5 Pro에 비해 다소 낮은 성능을 보였습니다. 비디오 이해 분야는 아직 개선의 여지가 남아 있습니다.

    Qwen2-VL-72B는 폭넓은 적용 가능성을 보여주는 비전-언어 모델로 특히 문서 이해, 다이어그램 해석, 실세계 질문 답변 등의 분야에서 경쟁력을 가집니다. 앞으로 문자인식, 비디오 이해와 같은 특정 분야에서의 개선이 이루어진다면 더욱 강력한 모델로 자리매김할 것으로 기대됩니다.

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

    Qwen2-VL-7B 설치방법

    다음은 Qwen2-VL-7B의 설치방법을 알아보겠습니다. 이 모델의 로컬 실행을 위해서는 16GB 이상의 VRAM이 필요하며 이 블로그에서는 클라우드 GPU, Lightning AI를 이용해서 설치해 보겠습니다. Lightning AI에 대한 기본적인 내용은 아래 포스팅을 참고하시기 바랍니다. 

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

     

    ⚡️🆓Lightning AI: 무료 GPU 클라우드 기반 AI 개발 플랫폼 Ollama 가이드

    안녕하세요! 오늘은 Lightning AI라는 클라우드 컴퓨팅 기반 AI 개발 플랫폼을 소개해 드리겠습니다. Lightning AI는 머신러닝(ML)과 인공지능(AI) 프로젝트를 빠르고 효율적으로 개발, 프로토타입, 훈련,

    fornewchallenge.tistory.com

    1. 먼저, Lightning AI 프롬프트에서 다음 명령어로 필요한 패키지를 설치합니다. 

    pip install git+https://github.com/huggingface/transformers torch torchvision torchaudio qwen-vl-utils av

    2. 새 파이썬 파일을 생성하고 아래 코드를 복사해서 붙여 넣은 후, app.py로 저장합니다. 코드의 출처는 Qwen2-VL 웹 사이트를 참고해서 클로드 3.5 Sonnet과 GPT-4o-mini로 생성하였습니다. 이 코드는 Streamlit을 사용하여 Qwen2-VL-7B 모델을 통해 이미지 또는 비디오 파일에 대한 질문에 답변하는 웹 애플리케이션입니다.

    import os
    import streamlit as st
    from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
    from qwen_vl_utils import process_vision_info
    import torch
    from PIL import Image
    import tempfile
    
    # PyTorch 메모리 관리 환경 변수 설정
    os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"
    
    # 사용 가능한 디바이스 확인
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    
    # 모델 로드
    @st.cache_resource
    def load_model():
        model = Qwen2VLForConditionalGeneration.from_pretrained(
            "Qwen/Qwen2-VL-7B-Instruct", device_map="auto", low_cpu_mem_usage=True
        )
        return model.to(device)
    
    # 프로세서 로드
    @st.cache_resource
    def load_processor():
        return AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")
    
    model = load_model()
    processor = load_processor()
    
    def ask_question(file, prompt):
        if file is None:
            return "파일을 첨부해주세요."
    
        # 파일 유형 확인
        if file.type.startswith("image"):
            image = Image.open(file)
            image_inputs = [image]
            video_inputs = []
        elif file.type.startswith("video"):
            # 비디오 파일을 임시 파일로 저장
            temp_file = tempfile.NamedTemporaryFile(delete=False)
            temp_file.write(file.read())
            temp_file.close()
            video_inputs = [temp_file.name]
            image_inputs = []
        else:
            return "지원하지 않는 파일 형식입니다."
    
        messages = [
            {
                "role": "user",
                "content": [
                    {"type": "image" if file.type.startswith("image") else "video", 
                     "image" if file.type.startswith("image") else "video": image_inputs[0] if image_inputs else video_inputs[0]},
                    {"type": "text", "text": prompt},
                ],
            }
        ]
    
        # 추론 준비
        text = processor.apply_chat_template(
            messages, tokenize=False, add_generation_prompt=True
        )
        image_inputs, video_inputs = process_vision_info(messages)
        inputs = processor(
            text=[text],
            images=image_inputs,
            videos=video_inputs,
            padding=True,
            return_tensors="pt",
        )
    
        # 모든 입력을 동일한 디바이스로 이동
        inputs = {k: v.to(device) for k, v in inputs.items()}
    
        # 추론: 출력 생성
        with torch.no_grad():
            generated_ids = model.generate(**inputs, max_new_tokens=128)
        
        # 수정된 부분: 딕셔너리 키를 사용하여 input_ids에 접근
        generated_ids_trimmed = [
            out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs['input_ids'], generated_ids)
        ]
        output_text = processor.batch_decode(
            generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
        )
        return output_text[0]
    
    # Streamlit 애플리케이션
    st.title("Qwen2-VL 이미지/비디오 질문 답변 시스템")
    st.write("이미지나 비디오를 첨부하고 질문을 입력하세요.")
    
    uploaded_file = st.file_uploader("파일 첨부", type=["jpg", "jpeg", "png", "mp4"])
    prompt = st.text_input("질문")
    
    if st.button("질문하기"):
        if uploaded_file is not None:
            answer = ask_question(uploaded_file, prompt)
            st.write("답변:", answer)
        else:
            st.write("파일을 첨부해주세요.")
    
    # 이미지 또는 비디오 표시
    if uploaded_file is not None:
        if uploaded_file.type.startswith("image"):
            st.image(uploaded_file, caption="업로드된 이미지", use_column_width=True)
        elif uploaded_file.type.startswith("video"):
            st.video(uploaded_file)

    3. Lightning AI 오른쪽 아이콘 메뉴 중 Streamlit을 클릭하고 우측 상단에 +New App을 클릭한 후, 위에서 생성한 app.py를 선택하고, 우측 하단 Run을 클릭합니다. 

    Lightning AI의 Streamlit 메뉴
    Streamlit으로 실행할 app.py 선택화면

    4. Run을 클릭하고 잠시 후 모델이 로딩되면, "Qwen2-VL 이미지/비디오 질문 답변 시스템" 웹 UI가 열립니다. 

    Qwen2-VL 이미지/비디오 질문 답변 시스템

    이미지 또는 비디오 파일을 입력하고 관련 질문을 입력하면 Qwen2-VL-7B 모델이 다음과 같이 답변해 줍니다. 

    이미지 질문에 대한 Qwen2-VL-7B의 답변
    Qwen2-VL-7B의 손글씨 추출
    왜곡된 이미지에 대한 Qwen2-VL-7B의 답변

    저의 경우 비디오 파일을 입력했을 때는 CUDA 메모리 부족 문제가 발생해서 비디오 파일에 대해서는 Qwen2-VL-7B 모델의 영상 분석기능을 확인하지 못했습니다. Qwen2-VL-72B의 답변내용을 참고하시면 될 것 같습니다. 

     

    마치며

    Qwen2-VL 모델은 단순히 이미지를 인식하고 설명하는 수준을 넘어, 복잡한 시각 정보를 이해하고 이를 바탕으로 추론하며, 영상까지 분석할 수 있는 능력을 보여줍니다. 또한 다국어 지원과 함수 호출 기능을 통해 실제 응용 분야에서의 활용 가능성을 크게 높였습니다. 72B 모델은 높은 성능, 7B 모델은 효율적인 성능, 2B 모델은 모바일 환경에 적합한 성능을 각각 제공함으로써 다양한 사용 환경과 요구사항에 맞춤형 솔루션을 제공하고 있습니다. 오픈소스로 공개된 2B와 7B 모델은 연구자들과 개발자들에게 큰 기회를 제공합니다.

     

    Qwen2-VL-7B 모델을 테스트해 본 후기는 다음과 같습니다.

    • 기울어지거나, 필기체 등 실제 이미지에서 글자를 추출하는 기능은 부족하다
    • 비디오 파일 처리를 위해 VRAM 메모리가 과다하게 소요된다. 
    • 수학문제 풀이의 정확도가 낮다.

    Qwen2-VL은 시각언어 AI 기술의 현재 수준을 보여주는 동시에 미래의 가능성을 제시하고 있습니다. 이러한 오픈소스 시각 언어 모델의 발전을 통해 우리를 편리하게 해주는 다양한 서비스가 개발되기를 기대하면서, 저는 다음 시간에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다. 

     

    https://fornewchallenge.tistory.com/

     

     

    2024.06.25 - [AI 언어 모델] - CoLLaVO: 카이스트의 최첨단 시각-언어 모델 분석 및 테스트👀💬🔍

     

    CoLLaVO: 카이스트의 최첨단 시각-언어 모델 분석 및 테스트👀💬🔍

    안녕하세요! 오늘은 최근 카이스트에서 개발한 국산 시각-언어 모델 CoLLaVO에 대해 알아보겠습니다. CoLLaVO 모델은 입력 이미지를 분석하여 객체의 의미 정보와 위치 정보를 추출하는 역할을 하는

    fornewchallenge.tistory.com

     

    728x90