제퍼넷 로고

Amazon SageMaker JumpStart를 사용한 대화 기반 시각적 언어 처리 | 아마존 웹 서비스

시간

VLP(시각 언어 처리)는 생성 AI의 최전선에 있으며 언어 지능, 비전 이해 및 처리를 포괄하는 다중 모드 학습의 발전을 주도합니다. 대량의 다중 양식 데이터로 훈련된 LLM(대형 언어 모델) 및 CLIP(Contrastive Language-Image Pre-Training)과 결합된 VLM(시각 언어 모델)은 특히 이미지 캡션 작성, 객체 감지 및 분할, 시각적 언어 모델과 같은 작업에 능숙합니다. 질문 답변. 이들의 사용 사례는 미디어 엔터테인먼트부터 의료 진단 및 제조 품질 보증에 이르기까지 다양한 영역에 걸쳐 있습니다.

VLP의 주요 강점에는 사전 훈련된 VLM 및 LLM의 효과적인 활용, 작업별 수정 없이 제로 샷 또는 소수 샷 예측 가능, 캐주얼한 다회 대화를 통해 광범위한 스펙트럼의 이미지 분류 등이 있습니다. 다음으로 보강됨 접지된 세그먼트 무엇이든, VLP는 시각적 인식 분야에서 탁월한 성능을 발휘하며 특히 객체 감지 및 분할이 주목할 만합니다. 정밀도를 높이고 환각을 완화하는 것을 목표로 도메인별 데이터를 사용하여 VLM 및 LLM을 추가로 미세 조정할 가능성이 있습니다. 그러나 다른 초기 기술과 마찬가지로 모델 복잡성을 관리하고, 다양한 양식을 조화시키고, 통일된 평가 지표를 공식화하는 데 장애물이 남아 있습니다.

OBELICS의 경우 NOMIC, IDEFICS의 경우 HuggingFaceM4, Gradio의 경우 Charles Bensimon, TTS의 경우 Amazon Polly 제공

이 게시물에서는 다음을 사용하여 VLP 프로토타이핑의 기술적 뉘앙스를 살펴봅니다. Amazon SageMaker 점프스타트 최신 생성 AI 모델과 결합됩니다. 다단계 대화를 통해 우리는 지시 중심의 제로샷 및 퓨샷 비전 언어 처리 기능을 강조하고 그 다양성을 강조하며 더 넓은 다중 모드 커뮤니티의 관심을 사로잡는 것을 목표로 합니다. 데모 구현 코드는 다음에서 사용할 수 있습니다. GitHub 레포.

솔루션 개요

제안된 VLP 솔루션은 최첨단 생성 AI 모듈 제품군을 통합하여 정확한 다중 모드 출력을 생성합니다. 아키텍처의 핵심은 시각적 및 텍스트 데이터 스트림을 디코딩하는 데 중요한 역할을 하는 미세 조정된 VLM 및 LLM입니다. TGI 프레임워크는 모델 추론 계층을 뒷받침하여 강력한 통합과 손쉬운 접근성을 위한 RESTful API를 제공합니다. 청각 데이터 처리를 보완하는 Whisper ASR에는 RESTful API도 제공되어 음성을 텍스트로 효율적으로 변환할 수 있습니다. 이미지에서 텍스트로의 분할과 같은 복잡한 문제를 해결하기 위해 우리는 컨테이너화된 접지된 세그먼트 무엇이든 모듈과 시너지 효과를 발휘 접지된 DINO세그먼트 무엇이든 모델 (SAM) 텍스트 기반 개체 감지 및 분할을 위한 메커니즘입니다. 시스템은 다음과 같이 더욱 정교해졌습니다. 디스틸버트, 대화 기반 다중 클래스 분류 프로세스를 최적화합니다. 이러한 구성 요소를 조율하는 것은 텍스트 또는 음성 입력을 분석하고, 사용자 의도를 식별하고, 체계적으로 하위 작업을 관련 서비스에 위임하는 데 능숙한 정교한 메커니즘인 LangChain 처리 파이프라인입니다. 이러한 작업을 종합하면 집계된 출력이 생성되어 정확한 상황 인식 다중 모드 답변을 제공합니다.

다음 다이어그램은 대화 기반 VLP 솔루션의 아키텍처를 보여줍니다.

텍스트 생성 추론

TGI(텍스트 생성 추론)는 Hugging Face가 추론을 위한 VLM뿐만 아니라 LLM 배포를 위해 개발한 오픈 소스 도구 키트입니다. Falcon 및 Llama V2와 같은 일부 주요 오픈 소스 LLM은 물론 IDEFICS와 같은 VLM을 지원하는 텐서 병렬 처리, 모델 병렬 처리 및 동적 일괄 처리를 사용하여 고성능 텍스트 생성이 가능합니다. 최신 Hugging Face LLM 모듈 활용 아마존 세이지메이커, AWS 고객은 이제 SageMaker 딥 러닝 컨테이너(DLC)의 기능을 활용할 수 있습니다. 이를 통해 사전 구축된 SageMaker를 통해 Hugging Face 허브에서 LLM을 원활하게 배포할 수 있습니다. DLCs TGI를 지원합니다. 이 추론 설정은 탁월한 성능을 제공할 뿐만 아니라 무거운 GPU 인프라를 관리할 필요성도 제거합니다. 또한 추론 엔드포인트의 자동 크기 조정, 향상된 보안, 내장 모델 모니터링과 같은 고급 기능의 이점을 누릴 수 있습니다.

TGI는 기존 추론 방법보다 최대 100배 빠른 텍스트 생성 속도를 제공하며 증가하는 요청을 처리하기 위해 효율적으로 확장됩니다. 이 디자인은 다양한 LLM과의 호환성을 보장하고 오픈 소스이므로 기술 커뮤니티를 위한 고급 기능을 민주화합니다. TGI의 다용성은 도메인 전반에 걸쳐 확장되어 챗봇을 강화하고, 기계 번역을 개선하고, 텍스트를 요약하고, 시에서 코드까지 다양한 콘텐츠를 생성합니다. 따라서 TGI는 텍스트 생성 문제에 대한 포괄적인 솔루션으로 등장합니다. TGI는 Python으로 구현되며 PyTorch 프레임워크를 사용합니다. 오픈 소스이며 GitHub에서 사용할 수 있습니다. 또한 기본 모델을 수정하지 않고도 길이 및 다양성 결정과 같은 생성된 텍스트 속성을 제어하기 위해 더 빠른 성능과 로짓 워핑을 위해 QLoRA가 포함된 PEFT를 지원합니다.

다음에서 직접 사용자 정의된 TGI Docker 컨테이너를 구축할 수 있습니다. 도커 파일 그런 다음 컨테이너 이미지를 Amazon에 푸시합니다. 탄력적 컨테이너 레지스트리 (ECR) 추론 배포를 위한 것입니다. 다음 코드를 참조하세요.

%%sh
# Define docker image name and container's Amazon Reource Name on ECR
container_name="tgi1.03"
region=`aws configure get region`
account=`aws sts get-caller-identity --query "Account" --output text`
full_name="${account}.dkr.ecr.${region}.amazonaws.com/${container_name}:latest" # Get the login command from ECR and execute it directly
aws ecr get-login-password --region ${region}|docker login --username AWS --password-stdin ${account}.dkr.ecr.${region}.amazonaws.com # Build the TGI docker image locally
docker build . -f Dockerfile -t ${container_name}
docker tag ${container_name} ${full_name}
docker push ${full_name}

TGI를 사용한 LLM 추론

이 게시물의 VLP 솔루션은 LangChain과 함께 LLM을 사용하여 보다 정확한 의도 분류를 위해 CoT(사고 사슬) 접근 방식을 활용합니다. CoT는 쿼리 목표를 달성하기 위해 의도 및 트리거 관련 하위 작업을 식별하기 위해 쿼리를 처리합니다. 라마-2-7b-채팅-hf (라이센스 계약)는 대화 맥락을 위해 설계된 Llama-2 라인의 간소화된 버전입니다. Llama-2-7b-chat-hf의 추론은 TGI 컨테이너 이미지를 통해 구동되므로 API 지원 서비스로 사용할 수 있습니다.

Llama-2-7b-chat-hf 추론의 경우 최고 성능을 달성하려면 g5.2xlarge(24G VRAM)가 권장됩니다. 보다 강력한 LLM이 필요한 애플리케이션의 경우 Llama-v2-13b 모델은 g5.12xlarge(96G VRAM) 인스턴스에 적합합니다. Llama-2-70b 모델의 경우 비트와 바이트 양자화를 활용하는 GPU [2xlarge] – 2x Nvidia A100 또는 g5.48xlarge를 고려하십시오. 특히, 비트와 바이트 양자화를 사용하면 필요한 추론 GPU VRAM을 50%까지 줄일 수 있습니다.

앞서 설명한 TGI 컨테이너 이미지와 함께 SageMaker DLC를 사용하여 추론을 위해 Llama-2-7b-chat-hf를 배포할 수 있습니다(다음 코드 참조). 또는 Docker 컨테이너를 사용하여 g5.2xlarge 인스턴스에 대한 개념 증명을 위한 빠른 로컬 추론을 수립할 수 있습니다.

import json
from time import gmtime, strftime
from sagemaker.huggingface import get_huggingface_llm_image_uri
from sagemaker.huggingface import HuggingFaceModel
from sagemaker import get_execution_role # Prerequisite:create an unique model name
model_name = 'Llama-7b-chat-hf' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) # retrieve the llm image uri of SageMaker pre-built DLC TGI v1.03 tgi_image_ecr_uri = get_huggingface_llm_image_uri( "huggingface", version="1.0.3"
) # Define Model and Endpoint configuration parameter
hf_config = { 'HF_MODEL_ID': "meta-research/Llama-2-7b-chat-hf", # Matching model_id on Hugging Face Hub 'SM_NUM_GPUS': json.dumps(number_of_gpu), 'MAX_TOTAL_TOKENS': json.dumps(1024), 'HF_MODEL_QUANTIZE': "bitsandbytes", # Use quantization for less vram requirement, commet it if no needed.
} # create HuggingFaceModel with the SageMaker pre-built DLC TGI image uri
sm_llm_model = HuggingFaceModel( role=get_execution_role(), image_uri=tgi_image_ecr_uri, env=hf_config
) # Deploy the model
llm = sm_llm_model.deploy( initial_instance_count=1, instance_type="ml.g5.2xlarge", container_startup_health_check_timeout=300, # in sec. Allow 5 minutes to be able to load the model
) # define inference payload
prompt="""<|prompter|>How to select a right LLM for your generative AI project?<|endoftext|><|assistant|>""" # hyperparameters for llm
payload = { "inputs": prompt, "parameters": { "best_of": 1, "decoder_input_details": true, "details": true, "do_sample": true, "max_new_tokens": 20, "repetition_penalty": 1.03, "return_full_text": false, "seed": null, "stop": [ "photographer" ], "temperature": 0.5, "top_k": 10, "top_p": 0.95, "truncate": null, "typical_p": 0.95, "watermark": true }, "stream": false
} # send request to endpoint
response = llm.predict(payload)

LLM을 미세 조정하고 맞춤화하세요

SageMaker JumpStart는 LLM 교육 및 미세 조정을 위한 QLoRA를 포함하여 PEFT(Parameter Efficient Fine Tuning) 사용을 보여주는 수많은 노트북 샘플을 제공합니다. QLoRA는 사전 훈련된 모델 가중치를 정적 상태로 유지하고 훈련 가능한 순위 분해 행렬을 Transformer 구조의 각 계층에 도입합니다. 이 방법은 다운스트림 작업에 필요한 훈련 가능한 매개변수의 수를 크게 줄입니다.

또는 다음을 탐색할 수 있습니다. 직접 선호도 최적화 (DPO) 보상 모델 설정, LLM에서 미세 조정하는 동안 샘플 그리기 또는 광범위한 하이퍼 매개변수 조정의 필요성을 제거합니다. 최근 연구에 따르면 DPO의 미세 조정 능력은 RLHF 감정 생성을 관리하고 요약 및 단일 대화 응답의 품질을 향상시키는 동시에 설정 및 교육이 훨씬 더 쉽습니다. DPO 교육 프로세스에는 세 가지 주요 단계가 있습니다(GitHub 참조). REPO 자세한 내용):

  1. 사전 훈련된 기본 LLM의 감독된 미세 조정을 수행하여 미세 조정된 LLM을 생성합니다.
  2. 미세 조정된 모델을 사용하여 DPO 트레이너를 실행하여 강화 학습 모델을 생성합니다.
  3. 텍스트 생성 추론을 위해 DPO의 어댑터를 기본 LLM 모델에 병합합니다.

TGI 컨테이너 이미지를 사용하여 추론을 위해 병합된 모델을 배포할 수 있습니다.

시각적 언어 모델

비전과 언어 양식을 모두 결합한 시각적 언어 모델(VLM)은 일반화에서 효율성이 향상되어 제로샷 프롬프트 또는 지침이 포함된 퓨샷 프롬프트를 포함한 다양한 실제 사용 사례로 이어졌습니다. VLM은 일반적으로 이미지 인코더, 텍스트 인코더, 두 인코더의 정보를 융합하는 전략의 세 가지 핵심 요소로 구성됩니다. 손실 함수는 모델 아키텍처와 학습 전략을 중심으로 설계되었기 때문에 이러한 핵심 요소는 서로 밀접하게 결합되어 있습니다. 많은 최첨단 VLM은 CLIP/ViT(예: OpenCLIP) 및 LLM(예: Llama-v1)을 사용하며 Wikipedia, LAION 및 Public Multimodal Dataset와 같이 공개적으로 사용 가능한 여러 데이터 세트에 대해 학습됩니다.

이 데모에서는 사전 훈련된 IDEFICS-9b-지시 에 의해 개발된 모델 포옹얼굴M4, 두 개의 사전 훈련된 모델(laion/CLIP-ViT-H-9-laion14B-s2B-b32K 및 Hugyllama/llama-79b)을 결합하여 Flamingo에 제시된 훈련 절차에 따라 IDEFICS-7b의 미세 조정 버전입니다. 수정된 변압기 블록을 사용합니다. IDEFICS-9b는 총 150억 개의 토큰과 각각 1.582×224 해상도의 224억 9만 개의 이미지를 포함하는 OBELIC, Wikipedia, LAION 및 PMD 다중 모달 데이터세트에서 훈련되었습니다. IDEFICS-7b는 1.31만 유효 배치 크기를 갖춘 Llama-9b를 기반으로 했습니다. 그런 다음 IDEFICS-6.8b-instruct는 모든 매개변수(비전 인코더, 언어 모델, 교차 주의)를 고정 해제하여 생성 AI를 사용하여 증강으로 생성된 5.1만 개의 다중 모드 명령 데이터 세트로 미세 조정되었습니다. 미세 조정 데이터 세트에는 이미지-텍스트 쌍의 30.7% 및 OBELICS 다중 모드 웹 문서의 XNUMX%와 같은 샘플링 비율의 사전 훈련 데이터가 포함됩니다.

훈련 소프트웨어는 Hugging Face Transformers 및 Accelerate를 기반으로 구축되었습니다. 딥스피드 ZeRO-3 훈련을 위해, 게다가 웹데이터세트Image2DataSet 데이터 로딩을 위해. IDEFICS-9b의 사전 훈련은 350개의 Nvidia A128 GPU에서 완료하는 데 100시간이 걸린 반면, IDEFICS-9b-instruct의 미세 조정은 70개의 Nvidia A128 GPU에서 100시간이 걸렸습니다. 두 가지 모두 AWS p4.24xlarge 인스턴스에서 이루어졌습니다.

SageMaker를 사용하면 추론 작업을 위해 g9xlarge 인스턴스에 IDEFICS-5.2b-instruct를 원활하게 배포할 수 있습니다. 다음 코드 조각은 사용자 정의된 TGI Docker 이미지와 통합된 맞춤형 딥 러닝 로컬 컨테이너를 시작하는 방법을 보여줍니다.

%%sh
llm_model='HuggingFaceM4/idefics-9b-instruct'
docker_rt_name='idefics-9b-instruct'
docker_image_name='tgi1.03'
docker run --gpus="1,2,3,4" --shm-size 20g -p 8080:80 --restart unless-stopped --name ${docker_rt_name} ${docker_image_name} --model-id ${llm_model} # Test the LLM API using curl
curl -X 'POST' 'http://<hostname_or_ip>:8080/' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{ "inputs": "User:![](http://<image_url>/image.png)이 이미지를 생성한 장치는 무엇입니까? 해당 이미지의 주요 임상 목적을 설명해 주세요. 이 이미지를 기반으로 방사선 보고서를 작성할 수 있나요? ", 
 "parameters": { "best_of": 1, "decoder_input_details": true, "details": true, "do_sample": true, "max_new_tokens": 20, "repetition_penalty": 1.03, "return_full_text": false, "seed": null, "stop": [ "photographer" ], "temperature": 0.5, "top_k": 10, "top_p": 0.95, "truncate": null, "typical_p": 0.95, "watermark": true }, "stream": false }'

다음을 포함하여 IDEFICS 또는 기타 VLM을 미세 조정할 수 있습니다. 오픈 플라밍고 지침과 함께 자신의 도메인별 데이터를 사용합니다. 다음을 참조하세요 README 다중 양식 데이터 세트 준비 및 미세 조정 스크립트 자세한 내용은.

사고 사슬을 통한 의도 분류

그림 한 장이 천 단어의 가치가 있으므로 VLM에는 주어진 이미지와 질문에서 정확한 캡션을 생성하기 위한 지침이 필요합니다. 상황 내 학습을 활성화하기 위해 퓨샷 프롬프트를 사용할 수 있으며, 프롬프트에서 데모를 제공하여 모델 성능을 향상시킬 수 있습니다. 데모는 모델이 응답을 생성하기를 원하는 후속 예제에 대한 조건화 역할을 합니다.

표준적인 몇 번의 프롬프트는 많은 작업에 적합하지만 특히 더 복잡한 추론 작업을 처리할 때 여전히 완벽한 기술은 아닙니다. 몇 번의 메시지 템플릿만으로는 신뢰할 수 있는 응답을 얻기에 충분하지 않습니다. 문제를 여러 단계로 나누고 이를 모델에 보여주면 도움이 될 수 있습니다. 최근에는 생각의 사슬 (CoT) 프롬프트는 보다 복잡한 산술, 상식 및 기호 추론 작업을 해결하기 위해 대중화되었습니다.

CoT는 LLM을 사용하여 "단계적으로 생각해 봅시다" 프롬프트를 사용하여 시연을 위한 추론 체인을 하나씩 생성함으로써 수동 작업을 제거합니다. 그러나 이 자동 프로세스는 여전히 생성된 체인에서 실수로 끝날 수 있습니다. 실수로 인한 영향을 완화하려면 시연의 다양성이 중요합니다. 이 게시물에서는 다양한 질문을 샘플링하고 추론 체인을 생성하여 데모를 구성하는 Auto-CoT를 제안합니다. CoT는 두 가지 주요 단계로 구성됩니다.

  • 질문 클러스터링 – 주어진 데이터 세트의 질문을 몇 개의 클러스터로 분할합니다.
  • 데모 샘플링 – 각 클러스터에서 대표 질문을 선택하고 간단한 경험적 방법으로 제로 샷 CoT를 사용하여 추론 체인을 생성합니다.

다음 코드 조각을 참조하세요.

from langchain.llms import HuggingFaceTextGenInference
from langchain import PromptTemplate, LLMChain inference_server_url_local = <Your_local_url_for_llm_on_tgi:port> llm_local = HuggingFaceTextGenInference( inference_server_url=inference_server_url_local, max_new_tokens=512, top_k=10, top_p=0.95, typical_p=0.95, temperature=0.1, repetition_penalty=1.05, template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. Use ten five maximum and keep the answer as subtle as possible. List all actionable sub-tasks step by step in detail. Be cautious to avoid phrasing that might replicate previous inquiries. This will help in obtaining an accurate and detailed answer. Avoid repetition for clarity. Question: {question}
Answer: Understand the intent of the question then break down the {question} in to sub-tasks. """ prompt = PromptTemplate( template=template, input_variables= ["question"]
) llm_chain_local = LLMChain(prompt=prompt, llm=llm_local)
llm_chain_local("Can you describe the nature of this image? Do you think it's real??")

자동 음성 인식

VLP 솔루션은 OpenAI의 ASR(자동 음성 인식) 모델인 Whisper를 통합하여 오디오 쿼리를 처리합니다. Whisper는 템플릿을 사용하여 SageMaker JumpStart를 통해 쉽게 배포할 수 있습니다. 간단한 설정, 고성능, 확장성 및 신뢰성으로 잘 알려진 SageMaker JumpStart는 탁월한 음성 기반 애플리케이션 제작을 목표로 하는 개발자에게 이상적입니다. 다음 GitHub REPO 활용하는 방법을 보여줍니다. SageMaker 실시간 추론 엔드포인트 즉각적인 오디오-텍스트 전사를 위해 Whisper를 미세 조정하고 호스팅하여 SageMaker 호스팅과 생성 모델 간의 시너지 효과를 보여줍니다.

또는 직접 다운로드할 수도 있습니다. Dockerfile.gpu GitHub에서 개발한 아마토너, 사전 구성된 RESTful API가 포함되어 있습니다. 그런 다음 Docker 이미지를 구성하고 GPU 기반 Amazon에서 컨테이너를 실행할 수 있습니다. 탄력적 컴퓨팅 클라우드 (EC2) 인스턴스를 통해 빠른 개념 증명이 가능합니다. 다음 코드를 참조하세요.

%%sh
docker_iamge_name = 'whisper-asr-webservice-gpu'
docker build -f Dockerfile.gpu -t ${docker_iamge_nam}
docker run -d --gpus all -p 8083:9000 --restart unless-stopped -e ASR_MODEL=base ${docker_iamge_nam} curl -X 'POST' 'http://<asr_api_hostname>:<port>/asr?task=transcribe&encode=true&output=txt' -H 'accept: application/json' -H 'Content-Type: multipart/form-data' -F 'audio_file=@dgvlp_3_5.mp3;type=audio/mpeg'

제공된 예에서는 인바운드 네트워크 보안 규칙이 활성화된 상태에서 Whisper API를 호스팅하기 위해 포트 8083이 선택되었습니다. 테스트하려면 웹 브라우저를 다음으로 지정하세요. http://<IP_or_hostname>:8083/docs ASR 엔드포인트에 대한 POST 요청 테스트를 시작합니다. 대안으로, 주어진 명령을 실행하거나 Whisper-live 모듈을 사용하여 API 연결을 확인하십시오.

!pip install whisper-live
from whisper_live.client import TranscriptionClient
client = TranscriptionClient("<whisper_hostname_or_IP>", 8083, is_multilingual=True, lang="zh", translate=True)
client(audio_file_path) # Use sudio file
client() # Use microphone for transcribe

다중 클래스 텍스트 분류 및 키워드 추출

다중 클래스 분류는 텍스트 프롬프트 기반 개체 감지 및 분할에서 중추적인 역할을 합니다. 그만큼 ditilbert-base-uncased-finetuned-sst-2-english 모델은 다음의 세련된 체크포인트입니다. DistillBERT-베이스 비케이스, 최적화된 스탠포드 감성 트리뱅크 (SST2) 데이터 세트는 Hugging Face에서 제공합니다. 이 모델은 개발 세트에서 91.3%의 정확도를 달성한 반면, bert-base-uncased 모델은 92.7%의 정확도를 자랑합니다. Hugging Face Hub는 1,000개 이상의 사전 훈련된 텍스트 분류 모델에 대한 액세스를 제공합니다. 향상된 정밀도를 원하는 사람들을 위해 SageMaker JumpStart는 다음을 제공합니다. 템플릿 보다 맞춤화된 분류 작업을 위해 사용자 정의 주석이 달린 데이터 세트를 사용하여 DistilBERT를 미세 조정합니다.

import torch
from transformers import pipeline def mclass(text_prompt, top_k=3, topics = ['Mask creation', 'Object detection', 'Inpainting', 'Segmentation', 'Upscaling', 'Creating an image from another one', 'Generating:q an image from text'], model='distilbert-base-uncased-finetuned-sst-2-english'): device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # Define a german hypothesis template and the potential candidates for entailment/contradiction template_de = 'The topic is {}' # Pipeline abstraction from hugging face pipe = pipeline(task='zero-shot-classification', model=model, tokenizer=model, device=device) # Run pipeline with a test case prediction = pipe(text_prompt, topics, hypothesis_template=template_de) # Top 3 topics as predicted in zero-shot regime return zip(prediction['labels'][0:top_k], prediction['scores'][0:top_k]) top_3_intend = mclass(text_prompt=user_prompt_str, topics=['Others', 'Create image mask', 'Image segmentation'], top_k=3) 

키워드 추출 프로세스는 다음을 사용합니다. 키버트 모듈은 BERT 임베딩을 활용하여 문서와 밀접하게 정렬된 키워드 및 핵심 문구를 생성하는 간소화되고 사용자 친화적인 방법입니다. 이 경우 쿼리에 지정된 개체는 다음과 같습니다.

# Keyword extraction
from keybert import KeyBERT
kw_model = KeyBERT()
words_list = kw_model.extract_keywords(docs=<user_prompt_str>, keyphrase_ngram_range=(1,3))

텍스트 프롬프트 기반 객체 감지 및 분류

VLP 솔루션은 텍스트의 의미론적 의미를 분석하고 텍스트 프롬프트에서 동작과 개체를 식별함으로써 대화 기반 개체 감지 및 분할을 사용합니다. 접지된 SAM 텍스트 입력을 통해 주어진 이미지에서 무엇이든 감지하고 분할하기 위해 IDEA-Research에서 만든 오픈 소스 패키지입니다. 의 강점을 결합한 것입니다. 접지 DINO 복잡한 문제를 해결하기 위한 매우 강력한 파이프라인을 구축하기 위해 무엇이든 세분화합니다.

다음 그림은 Grounded-SAM이 텍스트 입력을 이해하여 객체를 감지하고 인스턴스 분할을 수행하는 방법을 보여줍니다.

SAM 고품질 개체 마스크를 생성하려면 경계 상자나 점과 같은 프롬프트가 필요하지만 강력한 분할 모델로 눈에 띕니다. Grounding DINO는 제로샷 감지기로서 탁월하며 자유 형식 텍스트 프롬프트를 사용하여 고품질 상자와 라벨을 능숙하게 생성합니다. 이 두 모델을 결합하면 텍스트 입력만으로 모든 개체를 감지하고 분할할 수 있는 놀라운 기능을 제공합니다. Python 유틸리티 스크립트 dino_sam_inpainting.py Grounded-SAM 방법을 통합하기 위해 개발되었습니다.

!pip install git+https://github.com/facebookresearch/segment-anything.git
import dino_sam_inpainting as D def dino_sam(image_path, text_prompt, text_threshold=0.4, box_threshold=0.5, output_dir='/temp/gradio/outputs'): config_file = 'GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py' # change the path of the model config file grounded_checkpoint = './models/groundingdino_swint_ogc.pth' # change the path of the model sam_checkpoint = './models/sam_vit_h_4b8939.pth' sam_hq_checkpoint = '' #if to use high quality, like sam_hq_vit_h.pth use_sam_hq = '' output_dir = '/tmp/gradio/outputs' device = 'cuda' # make dir os.makedirs(output_dir, exist_ok=True) # load image image_pil, image = D.load_image(image_path) # load model model = D.load_model(config_file, grounded_checkpoint, device=device) output_file_name = f'{format(os.path.basename(image_path))}' # visualize raw image image_pil.save(os.path.join(output_dir, output_file_name)) # run grounding dino model boxes_filt, pred_phrases = D.get_grounding_output( model, image, text_prompt, box_threshold, text_threshold, device=device ) # initialize SAM if use_sam_hq: predictor = D.SamPredictor(D.build_sam_hq(checkpoint=sam_hq_checkpoint).to(device)) else: predictor = D.SamPredictor(D.build_sam(checkpoint=sam_checkpoint).to(device)) image = cv2.imread(image_path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) predictor.set_image(image) size = image_pil.size H, W = size[1], size[0] for i in range(boxes_filt.size(0)): boxes_filt[i] = boxes_filt[i] * torch.Tensor([W, H, W, H]) boxes_filt[i][:2] -= boxes_filt[i][2:] / 2 boxes_filt[i][2:] += boxes_filt[i][:2] boxes_filt = boxes_filt.cpu() transformed_boxes = predictor.transform.apply_boxes_torch(boxes_filt, image.shape[:2]).to(device) masks, _, _ = predictor.predict_torch( point_coords = None, point_labels = None, boxes = transformed_boxes.to(device), multimask_output = False, ) # draw output image plt.figure(figsize=(10, 10)) plt.imshow(image) for mask in masks: D.show_mask(mask.cpu().numpy(), plt.gca(), random_color=True) for box, label in zip(boxes_filt, pred_phrases): D.show_box(box.numpy(), plt.gca(), label) output_file_name = f'{format(os.path.basename(image_path))}' plt.axis('off') plt.savefig( os.path.join(output_dir, f'grounded_sam_{output_file_name}'), bbox_inches="tight", dpi=300, pad_inches=0.0 ) D.save_mask_data(output_dir, masks, boxes_filt, pred_phrases) return f'grounded_sam_{output_file_name}' filename = dino_sam(image_path=<image_path_str>, text_prompt=<object_name_str>, output_dir=<output_image_filename_path_str>, box_threshold=0.5, text_threshold=0.55)

고품질 제로샷 분할을 위해 HQ-SAM을 선택하여 SAM을 업그레이드할 수 있습니다. 다음을 참조하세요 종이암호 자세한 내용은 GitHub의 샘플을 참조하세요.

VLP 처리 파이프라인

VLP 처리 파이프라인의 주요 목표는 다양한 모델의 장점을 결합하여 VLP에 특화된 정교한 워크플로를 만드는 것입니다. 이 설정은 시각적, 텍스트 및 음성 도메인 전반에 걸쳐 최상위 모델의 통합을 우선시한다는 점을 강조하는 것이 중요합니다. 파이프라인의 각 세그먼트는 모듈식이므로 독립형 사용이나 결합 작업이 용이합니다. 또한 이 설계는 유연성을 보장하여 향후 출시될 고급 모델로 구성 요소를 교체할 수 있도록 하는 동시에 평판이 좋은 구현으로 멀티스레딩 및 오류 처리를 지원합니다.

다음 그림은 VLP 파이프라인 데이터 흐름과 서비스 구성요소를 보여줍니다.

VLP 파이프라인을 탐색하면서 우리는 개방형 텍스트 형식의 텍스트 프롬프트와 마이크의 일상적인 음성 입력을 모두 처리할 수 있는 파이프라인을 설계했습니다. 오디오 처리는 다국어 음성 인식 및 번역이 가능한 Whisper를 통해 촉진됩니다. 그런 다음 복사된 텍스트는 프롬프트의 의미론적 본질을 식별하는 의도 분류 모듈로 전달됩니다. 이는 LangChain 기반 CoT 엔진과 함께 작동하여 더 자세한 정보 검색 및 생성을 위해 주요 의도를 더 미세한 하위 작업으로 분석합니다. 입력에서 이미지 처리가 추론되면 파이프라인은 키워드 추출 프로세스를 시작하여 원본 이미지에서 감지된 개체를 상호 참조하여 상위 N개의 키워드를 선택합니다. 그 후, 이러한 키워드는 경계 상자를 생성하는 Grounded-SAM 엔진으로 라우팅됩니다. 그런 다음 이러한 경계 상자는 SAM 모델에 제공되어 정확한 분할 마스크를 만들어 소스 이미지의 각 고유 개체 인스턴스를 정확히 찾아냅니다. 마지막 단계에서는 마스크와 경계 상자를 원본 이미지에 오버레이하여 다중 모드 출력으로 표시되는 처리된 이미지를 생성하는 작업이 포함됩니다.

입력 쿼리가 이미지 해석을 시도하면 파이프라인은 LLM을 사용하여 하위 작업을 구성하고 목표 목표에 따라 쿼리를 구체화합니다. 그 후 결과는 Few-Shot 지침, 입력 이미지의 URL 및 변경된 텍스트 프롬프트와 함께 VLM API로 전달됩니다. 이에 대한 응답으로 VLM은 텍스트 출력을 제공합니다. VLP 파이프라인은 Python 기반 워크플로 파이프라인 또는 대체 오케스트레이션 유틸리티를 사용하여 구현할 수 있습니다. 이러한 파이프라인은 정교한 모델의 순차적인 세트를 연결하여 작동하며, 순차적으로 구조화된 모델링 절차로 마무리됩니다. 파이프라인은 데모 목적으로 Gradio 엔진과 통합됩니다.

def vlp_text_pipeline(str input_text, str original_image_path, chat_history): intent_class = intent_classification(input_text) key_words = keyword_extraction(input_text) image_caption = vlm(input_text, original_image_path) chat_history.append(image_caption) if intent_class in {supported intents}: object_bounding_box = object_detection(intent_class, key_words, original_image_path) mask_image_path = image_segmentation(object_bounding_box, key_words, original_image_path) chat_history.append(mask_image_path) return chat_history def vlp_voice_pipeline(str audio_file_path, str original_image_path, chat_history): asr_text = whisper_transcrib(audio_file_path) chat_history.append(asr_text, original_image_path, chat_history) return chat_history chat_history = map(vlp_pipelines, input_text, original_image_path, chat_history) if (audio_file_path is None) else map(vlp_voice_pipelines, original_image_path, chat_history)

제한 사항

VLP에 사전 훈련된 VLM 모델을 사용하면 이미지 이해에 대한 유망한 잠재력이 입증되었습니다. VLP는 언어 기반 객체 감지 및 분할과 함께 합리적인 품질로 유용한 출력을 생성할 수 있습니다. 그러나 VLP는 여전히 일관되지 않은 결과, 사진의 세부 정보 누락, 환각 현상 등으로 어려움을 겪고 있습니다. 더욱이, 모델은 사실적으로 잘못된 텍스트를 생성할 수 있으므로 사실적으로 정확한 정보를 생성하는 데 의존해서는 안 됩니다. 참조된 사전 훈련된 VLM, SAM 또는 LLM 모델 중 어느 것도 도메인별 생산 등급 애플리케이션에 대해 훈련되거나 미세 조정되지 않았으므로 이 솔루션은 생계에 영향을 미치거나 물질적 손실을 일으킬 수 있는 미션 크리티컬 애플리케이션용으로 설계되지 않았습니다.

신속한 엔지니어링을 통해 IDEFICS 모델은 때때로 텍스트 힌트 이후 추가 세부정보를 인식할 수 있습니다. 그러나 결과는 일관되고 신뢰할 수 없습니다. 부정확성을 유지하는 데 집착할 수 있으며 사용자가 대화 중에 부정확성을 강조하더라도 수정을 할 수 없거나 수정하기를 꺼릴 수 있습니다. Swin-ViT를 통합하고 이를 DualToken-ViT와 같은 CNN 기반 모델과 융합하여 백본 모델을 강화하고 Llama-v2와 같은 고급 모델을 사용한 교육을 수행하면 잠재적으로 이러한 제한 사항 중 일부를 해결할 수 있습니다.

다음 단계

VLP 솔루션은 주목할만한 진전을 이룰 준비가 되어 있습니다. 앞으로 VLP 솔루션을 발전시킬 수 있는 몇 가지 주요 기회가 있습니다.

  • 동적 프롬프트 지침과 몇 번의 학습 힌트를 우선적으로 통합하세요. 이러한 개선을 통해 더욱 정확한 AI 피드백이 가능해졌습니다.
  • 의도 분류 팀은 공개 프롬프트에서 미묘한 도메인별 의도를 포착할 수 있도록 분류자를 개선하는 데 노력을 집중해야 합니다. 정확한 사용자 의도를 이해하는 것이 중요합니다.
  • 추론 파이프라인에 에이전트 사고 트리 모델을 구현합니다. 이 구조는 하위 작업을 완료하기 위한 명시적인 추론 단계를 허용합니다.
  • 주요 모델에 대한 미세 조정 계획을 시험합니다. 미세 조정을 통해 VLM, LLM 및 SAM 모델을 주요 산업 및 사용 사례에 맞게 조정하는 것이 중요합니다.

승인

저자는 이 게시물에 대한 통찰력 있는 피드백과 검토를 해준 Vivek Madan과 Ashish Rawat에게 감사를 표합니다.


저자 소개

알프레드 쉔 AWS의 선임 AI/ML 전문가입니다. 그는 실리콘 밸리에서 일하면서 의료, 금융, 첨단 기술을 포함한 다양한 분야에서 기술 및 관리 직책을 맡았습니다. 그는 CV, NLP 및 다중 양식에 집중하는 응용 AI/ML 전담 연구원입니다. 그의 작업은 EMNLP, ICLR 및 공중 보건과 같은 간행물에 소개되었습니다.

리 장 박사 데이터 과학자와 기계 학습 실무자가 모델 교육 및 배포를 시작하고 Amazon SageMaker에서 강화 학습을 사용하는 데 도움이 되는 서비스인 Amazon SageMaker JumpStart 및 Amazon SageMaker 내장 알고리즘의 수석 제품 관리자 기술입니다. IBM Research의 수석 연구원이자 마스터 발명가로서의 그의 과거 작업은 IEEE INFOCOM에서 시간 테스트 논문 상을 수상했습니다.

마창사 박사 AWS의 AI/ML 전문가입니다. 그녀는 컴퓨터 과학 박사 학위, 교육 심리학 석사 학위, 데이터 과학 및 AI/ML의 독립 컨설팅 분야에서 다년간의 경험을 가진 기술자입니다. 그녀는 기계 및 인간 지능에 대한 방법론적 접근 방식을 연구하는 데 열정적입니다. 직장 밖에서 그녀는 하이킹, 요리, 음식 사냥, 기업가 정신을 위한 대학생 멘토링, 친구 및 가족과 시간을 보내는 것을 좋아합니다.

신황신황 Amazon SageMaker JumpStart 및 Amazon SageMaker 내장 알고리즘의 수석 응용 과학자입니다. 그는 확장 가능한 기계 학습 알고리즘 개발에 중점을 둡니다. 그의 연구 관심 분야는 자연어 처리, 테이블 형식 데이터에 대한 설명 가능한 딥 러닝, 비모수 시공간 클러스터링의 강력한 분석입니다. 그는 ACL, ICDM, KDD 컨퍼런스 및 왕립 통계 학회: 시리즈 A에서 많은 논문을 발표했습니다.

spot_img

최신 인텔리전스

spot_img