1년간의 끊임없는 노력 끝에 오늘 Qwen2-VL을 출시하게 되어 기쁩니다 ! Qwen2-VL은 Qwen 모델 패밀리에서 Qwen2를 기반으로 한 비전 언어 모델의 최신 버전입니다 . Qwen-VL과 비교했을 때 Qwen2-VL은 다음과 같은 기능을 갖추고 있습니다.
-
다양한 해상도 및 비율의 이미지에 대한 SoTA 이해 : Qwen2-VL은 MathVista, DocVQA, RealWorldQA, MTVQA 등을 포함한 시각적 이해 벤치마크에서 최첨단 성능을 달성합니다.
-
20분 이상 영상 이해 : Qwen2-VL은 20분 이상의 영상을 이해하여 고품질 영상 기반 질의응답, 대화, 컨텐츠 생성 등에 활용할 수 있습니다.
-
모바일, 로봇 등을 작동시킬 수 있는 에이전트 : 복잡한 추론 및 의사결정 능력을 갖춘 Qwen2-VL은 모바일 폰, 로봇 등의 장치와 통합되어 시각적 환경 및 텍스트 지침에 따라 자동으로 작동할 수 있습니다.
-
다국어 지원 : 영어와 중국어 외에도 글로벌 사용자에게 서비스를 제공하기 위해 Qwen2-VL은 이제 대부분의 유럽 언어, 일본어, 한국어, 아랍어, 베트남어 등을 포함하여 이미지 내의 다양한 언어로 된 텍스트를 이해할 수 있도록 지원하게 되었습니다.
우리는 Apache 2.0 라이선스로 Qwen2-VL-2B와 Qwen2-VL-7B를 오픈소스화하고 Qwen2-VL-72B의 API를 릴리스합니다! 오픈소스는 Hugging Face Transformers, vLLM 및 기타 타사 프레임워크에 통합되어 있습니다. 즐기시기 바랍니다!
우리는 복잡한 대학 수준의 문제 해결, 수학적 능력, 문서 및 표 이해, 다국어 텍스트-이미지 이해, 일반적인 시나리오 질의응답, 비디오 이해, 에이전트 기반 상호 작용 등 6가지 핵심 차원에서 모델의 시각적 역량을 평가합니다. 전반적으로, 우리의 72B 모델은 대부분의 지표에서 최고 수준의 성과를 보이며, 종종 GPT-4o 및 Claude 3.5-Sonnet과 같은 폐쇄형 소스 모델보다 뛰어납니다. 특히, 문서 이해에서 상당한 우위를 보여줍니다.
7B 규모에서 우리는 이미지, 다중 이미지 및 비디오 입력에 대한 지원을 유지하여 더욱 비용 효율적인 모델 크기에서 경쟁력 있는 성능을 제공했습니다. 특히, 우리 모델은 DocVQA와 같은 문서 이해 작업과 MTVQA에서 평가한 이미지의 다국어 텍스트 이해에서 뛰어나 최첨단 성능을 확립했습니다.
또한, 잠재적인 모바일 배포에 최적화된 더 작은 2B 모델을 소개하게 되어 기쁩니다. 이 모델은 컴팩트한 크기에도 불구하고 이미지, 비디오 및 다국어 이해에서 강력한 성능을 자랑합니다. 특히 비슷한 규모의 다른 모델과 비교했을 때 비디오 관련 작업, 문서 이해 및 일반적인 시나리오 질의 응답에서 빛을 발합니다.
모델 기능
1. 향상된 인식 기능
Qwen2-VL은 이제 개선된 객체 인식을 자랑하며, 식물과 랜드마크를 넘어 장면의 여러 객체 간의 복잡한 관계를 이해합니다. 또한 모델의 손으로 쓴 텍스트와 이미지 내의 여러 언어를 인식하는 기능을 크게 향상시켜 전 세계 사용자가 더 쉽게 사용할 수 있도록 했습니다.
사용자
각 상자의 색상과 번호를 출력하세요.
웬2-VL
이미지는 숫자가 적힌 다채로운 블록을 쌓아 놓은 것을 보여줍니다. 각 블록의 색상과 번호는 위에서 아래로 다음과 같습니다.
- 위쪽 행(단일 블록): 숫자 9가 있는 파란색
- 두 번째 줄(두 블록): 숫자 7이 있는 하늘색과 숫자 8이 있는 녹색
- 세 번째 줄(3개 블록): 숫자 4와 함께 보라색, 숫자 5와 함께 분홍색, 숫자 6과 함께 밝은 녹색
- 가장 아래 줄(4개 블록): 숫자 0이 있는 빨간색, 숫자 1이 있는 주황색, 숫자 2가 있는 노란색, 숫자 3이 있는 밝은 녹색
2. 시각적 추론: 현실 세계 문제 해결
이 반복에서 우리는 Qwen2-VL의 수학 및 코딩 능력을 크게 향상시켰습니다. 이 모델은 그림을 분석하여 문제를 해결할 수 있을 뿐만 아니라 차트 분석을 통해 복잡한 수학 문제를 해석하고 해결할 수도 있습니다. 종횡비가 극도로 왜곡된 이미지도 올바르게 해석할 수 있습니다. 또한, 우리는 실제 이미지와 차트에서 정보를 추출하는 모델의 기능을 강화하고 지시를 따르는 기술을 개선했습니다. 시각적 인식과 논리적 추론의 이러한 융합은 모델이 실질적인 문제를 해결하고 추상적 개념과 실질적인 솔루션 간의 격차를 메울 수 있도록 합니다.
사용자
웹 페이지의 알고리즘 문제를 풀어보세요.
웬2-VL
"매트릭스 속 뱀" 문제를 해결하려면, 매트릭스의 크기 n 와 명령 목록을 가져오고 모든 명령을 실행한 후 뱀의 최종 위치를 반환하는 함수를 구현해야 합니다. 이 문제를 해결하기 위한 단계별 접근 방식은 다음과 같습니다.
-
변수 초기화 :
- 뱀의 현재 위치를 .으로 초기화합니다
0 .
- 뱀의 방향을 "RIGHT"로 초기화합니다(처음에는 뱀이 오른쪽으로 이동합니다).
-
이동 기능 정의 :
- 현재 방향과 행렬의 크기에 따라 뱀을 움직이는 함수를 만듭니다
n .
- 이에 따라 뱀의 위치를 업데이트하세요.
-
프로세스 명령 :
- 명령 목록의 각 명령을 반복합니다.
- 각 명령에 대해 뱀의 방향과 위치를 업데이트합니다.
-
최종 위치로 돌아가기 :
- 모든 명령을 처리한 후, 뱀의 최종 위치를 반환합니다.
솔루션을 구현하기 위한 Python 코드는 다음과 같습니다.
class Solution: def finalPositionOfSnake(self, n: int, commands: List[str]) -> int: # Initialize variables position = 0 direction = "RIGHT" # Define movement functions def move_right(): nonlocal position position += 1 def move_down(): nonlocal position position += n def move_left(): nonlocal position position -= 1 def move_up(): nonlocal position position -= n # Process commands for command in commands: if command == "RIGHT": move_right() elif command == "DOWN": move_down() elif command == "LEFT": move_left() elif command == "UP": move_up() # Return final position return position
이 코드는 행렬의 크기 와 명령 목록을 가져오는 Solution 메서드가 있는 클래스를 정의하고 모든 명령을 실행한 후 뱀의 최종 위치를 반환합니다. 이동 함수( , , , )는 현재 방향에 따라 뱀의 위치를 업데이트하는 데 사용됩니다.finalPositionOfSnake n move_right move_down move_left move_up
3. 비디오 이해 및 라이브 채팅
Qwen2-VL은 정적 이미지 외에도 비디오 콘텐츠 분석에 대한 역량을 확장합니다. 비디오 콘텐츠를 요약하고, 관련 질문에 답하고, 실시간으로 대화의 흐름을 유지하며 라이브 채팅 지원을 제공합니다. 이 기능을 통해 개인 비서 역할을 하여 비디오 콘텐츠에서 직접 추출한 통찰력과 정보를 제공하여 사용자를 도울 수 있습니다.
사용자
웬2-VL
영상은 한 남자가 카메라에 말하는 것으로 시작해서, 통제실에 앉아 있는 사람들이 이어진다. 그런 다음 카메라는 우주 정거장 안에 떠 있는 두 남자로 전환되는데, 그곳에서 그들은 카메라에 말하는 모습이 보인다. 남자들은 우주인인 듯하고, 우주복을 입고 있다. 우주 정거장은 다양한 장비와 기계로 가득 차 있고, 카메라는 정거장의 여러 구역을 보여주기 위해 주변을 돌아다닌다. 남자들은 계속해서 카메라에 말하고, 그들의 임무와 그들이 수행하는 다양한 작업에 대해 논의하는 듯하다. 전반적으로, 이 영상은 우주 탐사의 세계와 우주인의 일상 생활을 흥미롭게 보여준다.
사용자
두 우주인이 입고 있는 옷의 색깔은 무엇인가?
웬2-VL
두 우주인은 파란색과 검은색 옷을 입고 있습니다.
4. 시각적 에이전트 기능: 함수 호출 및 시각적 상호 작용.
Qwen2-VL은 시각적 에이전트로서 강력한 잠재력을 보여주며, 인간이 세상을 인식하는 것과 유사한 상호작용을 촉진합니다.
- 이 모델은 함수 호출을 용이하게 하여 시각적 단서를 해독하여 실시간 데이터 검색을 위한 외부 도구(비행 상태, 날씨 예보 또는 패키지 추적)를 활용할 수 있습니다. 시각적 해석과 기능 실행을 통합하면 유용성이 높아져 정보 관리 및 의사 결정을 위한 강력한 도구가 됩니다.
- 시각적 상호작용은 인간의 지각을 모방하는 데 있어 중요한 진전을 나타냅니다. 모델이 인간의 감각과 유사한 시각적 자극에 관여할 수 있도록 함으로써, 우리는 AI가 환경을 지각하고 반응하는 능력의 경계를 넓히고 있습니다. 이 기능은 Qwen2-VL이 단순히 관찰자가 아니라 시각적 경험에 적극적으로 참여하는 보다 직관적이고 몰입적인 상호작용을 위한 길을 열어줍니다.
물론, 이 모델은 완벽하지 않으며 여러분이 이해할 수 있기를 바라는 몇 가지 제한 사항이 있습니다. 예를 들어, 이 모델은 비디오에서 오디오를 추출할 수 없으며, 그 지식은 2023년 6월 현재에 불과합니다. 또한, 이 모델은 복잡한 지침이나 시나리오를 처리할 때 완전한 정확성을 보장할 수 없으며, 계산, 문자 인식 및 3D 공간 인식과 관련된 작업에서는 상대적으로 약합니다.
모델 아키텍처
전반적으로, 우리는 Vision Transformer(ViT) 모델과 Qwen2 언어 모델을 활용하는 Qwen-VL 아키텍처를 계속 사용했습니다. 이러한 모든 변형에 대해 우리는 이미지와 비디오 입력을 모두 원활하게 처리하도록 설계된 약 600M 매개변수가 있는 ViT를 활용했습니다. 비디오에서 시각 정보를 효과적으로 인식하고 이해하는 모델의 능력을 더욱 향상시키기 위해 우리는 몇 가지 주요 업그레이드를 도입했습니다.
- Qwen2-VL의 주요 아키텍처 개선 사항은 Naive Dynamic Resolution 지원 의 구현입니다 . 이전 모델과 달리 Qwen2-VL은 임의의 이미지 해상도를 처리하여 이를 동적 개수의 시각적 토큰으로 매핑하여 모델 입력과 이미지의 내재 정보 간의 일관성을 보장할 수 있습니다. 이 접근 방식은 인간의 시각적 인식을 더욱 밀접하게 모방하여 모델이 모든 선명도나 크기의 이미지를 처리할 수 있도록 합니다.
- 또 다른 핵심적인 건축적 개선 사항은 멀티모달 회전 위치 임베딩(M-ROPE) 의 혁신입니다 . 원래 회전 임베딩을 시간적 및 공간적(높이와 너비) 정보를 나타내는 세 부분으로 분해함으로써 M-ROPE는 LLM이 1D 텍스트, 2D 시각 및 3D 비디오 위치 정보를 동시에 캡처하고 통합할 수 있도록 합니다.
Qwen2-VL로 개발하기
가장 큰 Qwen2-VL 모델인 Qwen2-VL-72B를 사용하려면 아래에 표시된 대로 일시적으로 공식 API를 통해 액세스할 수 있습니다(계정에 가입하고 DashScope를 통해 API 키를 받음 ):
from openai import OpenAIimport osimport base64def encode_image(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode("utf-8")# Path to your imageimage_path = "dog_and_girl.jpeg"# Getting the base64 stringbase64_image = encode_image(image_path)def get_response(): client = OpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) completion = client.chat.completions.create( model="qwen-vl-max-0809", messages=[ { "role": "user", "content": [ {"type": "text", "text": "What is this?"}, { "type": "image_url", "image_url": { "url": "//dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg" }, }, { "type": "image_url", "image_url": {"url": f"http://www.ainet.link/imgdata/ainet_link/202409/2024090100471897.jpg>{base64_image}"}, }, ], } ], top_p=0.8, stream=True, stream_options={"include_usage": True}, ) for chunk in completion: print(chunk.model_dump_json())if __name__ == "__main__": get_response()
Qwen2-VL 시리즈의 2B 및 7B 모델은 오픈 소스이며 Hugging Face 및 ModelScope에서 액세스할 수 있습니다. 자세한 사용 지침, 기능 및 성능 지표는 모델 카드를 탐색할 수 있습니다. 아래에서 HF 변압기를 사용한 가장 간단한 사용 예를 제공합니다.
transformers Qwen2-VL의 코드가 메인 브랜치에 병합되었으므로 소스에서 설치해야 합니다 pip install git+https://github.com/huggingface/transformers . 소스에서 설치하지 않은 경우 다음 오류가 발생할 수 있습니다.
다양한 유형의 시각적 입력을 보다 편리하게 처리할 수 있도록 돕는 툴킷을 제공합니다. base64, URL, 인터리브 이미지 및 비디오를 포함한 입력을 지원합니다. 다음 명령을 사용하여 설치할 수 있습니다.
pip install qwen-vl-utils
데모용 코드 조각입니다. 특히, 가속 및 메모리 절약을 위해 가능하다면 플래시 어텐션 2를 사용하는 것이 좋습니다.
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessorfrom qwen_vl_utils import process_vision_info# default: Load the model on the available device(s)model = Qwen2VLForConditionalGeneration.from_pretrained( "Qwen/Qwen2-VL-7B-Instruct", device_map="auto")# We recommend enabling flash_attention_2 for better acceleration and memory saving, especially in multi-image and video scenarios.# model = Qwen2VLForConditionalGeneration.from_pretrained(# "Qwen/Qwen2-VL-7B-Instruct",# torch_dtype=torch.bfloat16,# attn_implementation="flash_attention_2",# device_map="auto",# )# default processerprocessor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")# The default range for the number of visual tokens per image in the model is 4-16384. You can set min_pixels and max_pixels according to your needs, such as a token count range of 256-1280, to balance speed and memory usage.# min_pixels = 256*28*28# max_pixels = 1280*28*28# processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)messages = [ { "role": "user", "content": [ { "type": "image", "image": "//qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg", }, {"type": "text", "text": "Describe this image."}, ], }]# Preparation for inferencetext = 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",)# Inference: Generation of the outputgenerated_ids = model.generate(**inputs, max_new_tokens=128)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)print(output_text)
최신 모델의 원활한 통합과 사용을 용이하게 하기 위해 양자화( AutoGPTQ , AutoAWQ ), 배포( vLLM ), 미세 조정( Llama-Factory ) 등 오픈 소스 생태계의 다양한 도구와 프레임워크를 지원합니다.
특허
오픈소스 Qwen2-VL-2B와 Qwen2-VL-7B는 모두 Apache 2.0에 속합니다.
다음은 무엇인가
귀하의 피드백과 Qwen2-VL로 구축할 혁신적인 애플리케이션을 기대합니다. 가까운 미래에 우리는 다음 버전 언어 모델에 더 강력한 비전 언어 모델을 구축하고 더 많은 모달리티를 옴니 모델로 통합하기 위해 노력할 것입니다!
|