이 튜토리얼에서는 현재 watsonx.ai에서 제공되는 Meta Llama 3.2-90b-vision-instruct 모델을 이미지 캡션 및 시각적 질의응답과 같은 컴퓨터 비전 작업에 적용하는 방법을 알아봅니다.
많은 사람들이 유니모달 AI 애플리케이션에 익숙합니다. 인기 있는 유니모달 AI 도구는 ChatGPT입니다. ChatGPT와 같은 챗봇은 자연어 처리(NLP)를 사용해 사용자 질문을 이해하고 실시간으로 응답을 자동화합니다. 이러한 유니모달 대규모 언어 모델(LLM)을 적용할 수 있는 입력 유형은 텍스트로 제한됩니다.
멀티모달 인공 지능(AI)은 신경망에 구축된 머신 러닝 모델을 기반으로 합니다. 이러한 신경망은 복잡한 딥 러닝 기술을 사용하여 여러 데이터 유형의 정보를 처리하고 통합할 수 있습니다. 생성형 AI 모델(gen AI 모델이라고도 함)이 생성하는 이러한 다양한 모달리티에는 텍스트, 이미지, 비디오 및 오디오 입력이 포함될 수 있습니다.
멀티모달 AI 시스템에는 컴퓨팅 비전을 사용하는 의료 환경에서의 의료 이미지 진단부터 번역 애플리케이션의 음성 인식에 이르기까지 다양한 실제 사용 사례가 있습니다. 이러한 AI 기술의 발전은 다양한 영역을 최적화할 수 있습니다. 멀티모달 아키텍처의 가장 큰 장점은 다양한 유형의 데이터를 처리할 수 있다는 것입니다.
멀티모달 AI에는 다음과 같은 세 가지 요소가 수반됩니다.
입력 모듈
입력 모듈은 다양한 데이터 유형을 전처리하기 위해 여러 개의 유니모달 신경망을 기반으로 구축됩니다. 여기에서는 퓨전 모듈에서 수행되는 머신 러닝 알고리즘을 위한 데이터가 준비됩니다.
퓨전 모듈
데이터를 결합, 정렬, 처리하는 과정은 이 모듈에서 이루어집니다. 퓨전 과정은 각 데이터 모달리티별로 진행됩니다. 이 모듈에서는 일반적으로 몇 가지 기술이 사용됩니다. 한 가지 예로 모든 입력 유형의 원시 데이터를 결합하는 조기 퓨전(early fusion)을 들 수 있습니다. 또한 중간 퓨전(mid-fusion)은 서로 다른 모달리티의 데이터가 서로 다른 전처리 단계에서 인코딩되는 경우입니다. 마지막으로 후기 퓨전(late fusion)은 각 모달리티에 대응하는 서로 다른 모델에서 입력 모듈을 통해 초기 처리된 후 데이터를 통합합니다.
출력 모듈
출력 모듈은 퓨전 모듈에서 생성된 데이터를 이해하여 원하는 출력 형식으로 결과를 생성합니다. 이러한 출력은 텍스트, 이미지 또는 여러 형식을 조합한 형태 등 다양한 형태로 제공될 수 있습니다.
1단계와 2단계에서 다음 설정 지침을 안내하는 이 IBM Technology YouTube 동영상을 참조하세요.
선택할 수 있는 도구에는 여러 가지가 있지만, 이 튜토리얼에서는 Jupyter Notebook을 사용하는 것이 가장 좋습니다. Jupyter Notebook은 데이터 사이언스 분야에서 텍스트, 이미지, 데이터 시각화 등 다양한 데이터 소스와 코드를 결합하는 데 널리 사용됩니다.
이 자습서에서는 Jupyter 노트북을 사용하기 위해 IBM 계정을 설정하는 방법을 안내합니다.
IBM® Cloud 계정을 사용하여 watsonx.ai 에 로그인합니다.
watsonx.ai 프로젝트를 생성합니다.
프로젝트 내에서 프로젝트 ID를 가져올 수 있습니다. 관리 탭을 클릭합니다. 그런 다음 일반 페이지의 세부 정보 섹션에서 프로젝트 ID를 복사합니다. 이 튜토리얼에는 이 ID가 필요합니다.
Jupyter Notebook을 만듭니다.
이 단계에서는 이 튜토리얼의 코드를 복사하여 프롬프트 튜닝을 직접 구현할 수 있는 노트북 환경이 열립니다. 또는 이 노트북을 로컬 시스템에 다운로드하여 watsonx.ai 프로젝트에 에셋으로 업로드할 수 있습니다. 이 Jupyter Notebook과 함께 사용된 데이터 세트는 GitHub에서 확인할 수 있습니다.
Python 패키지 종속성 충돌을 피하려면 가상 환경을 설정하는 것이 좋습니다.
이 튜토리얼에서는 비슷한 결과를 얻기 위해 watsonx.ai와 함께 Meta 3.2-90b-vision-instruct 모델 사용을 권장합니다. 물론 멀티모달 학습을 지원하는 다른 AI 모델을 원하는 대로 사용할 수도 있습니다. OpenAI의 GPT-4 V(ision), DALL-E 3, Google의 Gemini 등 여러 멀티모달 AI 모델 중에서 선택할 수 있습니다. 이 튜토리얼은 watsonx.ai용으로 설계되었으므로, 다른 모델을 사용할 경우 적절한 API를 사용하고 있는지 확인하세요.
watsonx.ai 런타임 서비스 인스턴스를 만듭니다(적절한 지역을 선택하고 무료 인스턴스인 Lite 요금제를 선택합니다).
API 키를 생성합니다.
watsonx.ai 런타임 서비스 인스턴스를 watsonx.ai에서 생성한 프로젝트에 연결합니다.
이 튜토리얼에는 몇 가지 라이브러리와 모듈이 필요합니다. 다음 항목을 가져와야 합니다. 설치되지 않은 경우, 빠른 PIP 설치로 이 문제를 해결할 수 있습니다.
자격 증명을 설정하려면 1단계에서 생성한 WATSONX_APIKEY와 WATSONX_PROJECT_ID가 필요합니다. 디렉토리 내 .env 파일에 저장하거나 자리 표시자 텍스트를 변경할 수도 있습니다. 또한 API 엔드포인트 역할을 하는 URL도 설정합니다.
자격 증명 클래스를 사용하여 전달된 자격 증명을 캡슐화할 수 있습니다.
이 튜토리얼에서는 이미지 캡션 및 객체 감지와 같은 멀티모달 AI 애플리케이션용으로 여러 이미지를 다뤄 보겠습니다. 우리가 사용할 이미지는 다음 URL을 사용하여 액세스할 수 있습니다. 이러한 URL을 목록에 저장하여 반복적으로 인코딩할 수 있습니다.
데이터 입력을 더 잘 이해하기 위해 이미지를 표시해 보겠습니다.
아웃풋:
url_image_0
url_image_1
url_image_2
url_image_3
LLM에서 이해할 수 있는 방식으로 이러한 이미지를 인코딩하기 위해 이미지를 바이트로 인코딩한 다음 UTF-8 표현으로 디코딩합니다.
이미지를 LLM으로 전달할 수 있게 되었으니, 이제 watsonx API 호출을 위한 함수를 설정해 보겠습니다. augment_api_request_body 함수는 사용자 쿼리와 이미지를 매개변수로 사용하고 API 요청의 본문을 보강합니다. 각 반복에서 이 함수를 사용해 보겠습니다.
def augment_api_request_body(user_query, image): messages = [ { "role": "user", "content": [{ "type": "text", "text": 'You are a helpful assistant. Answer the following user query in 1 or 2 sentences: ' + user_query }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{image}", } }] } ] return messages
ModelInference 클래스를 사용하여 모델 인터페이스를 인스턴스화해 보겠습니다. 이 튜토리얼에서는 themeta-llama/llama-3-2-90b-vision-instruct 모델을 사용합니다.
이제 이미지를 반복하여 "이 이미지에서 무슨 일이 일어나고 있는가?"라는 쿼리에 대한 응답으로 모델이 생성한 텍스트 설명을 확인할 수 있습니다.
아웃풋:
이 이미지는 고층 건물과 자동차가 있는 번화한 도시 거리와 보도를 걷는 사람들을 보여줍니다. 길은 신호등, 나무, 도로 표지판으로 가득 차 있고 교차로에는 여러 사람이 길을 건너고 있습니다.
이미지는 운동복을 입은 한 여성이 건물과 자동차를 배경으로 거리를 달리는 모습을 묘사하고 있습니다. 노란색 후드티, 검은색 레깅스, 운동화를 신고 있는 이 여성은 가벼운 조깅이나 달리기를 하고 있는 것으로 보입니다.
이미지는 물이 땅과 주변 건물을 덮고 있는 침수 지역을 묘사하고 있습니다. 홍수가 심각한 것으로 보이며, 일부 건물의 지붕까지 수위가 올라갔습니다.
**이미지 설명**
* 이 이미지는 영양 성분표를 손가락으로 가리키고 있는 모습을 클로즈업한 것입니다.
* 영양 성분표에는 다음과 같은 특정 식품의 영양 성분에 대한 자세한 정보가 표시됩니다:
+ 칼로리
+ 지방
+ 나트륨
+ 탄수화물
+ 기타 관련 정보
* 영양 성분표는 흰색 바탕에 검은색 텍스트로 표시되어 읽거나 이해하기 쉽습니다.
Llama 3.2-90b-vision-instruct 모델은 각 이미지에 상당히 상세한 캡션을 성공적으로 삽입할 수 있었습니다.
이전 단계에서 이미지에서 텍스트로 변환하는 모델의 기능을 소개했으니, 이제 모델에 객체 감지가 필요한 몇 가지 질문을 해 보겠습니다. 야외에서 달리는 여성을 묘사한 두 번째 이미지와 관련하여 모델에게 "이 이미지에 자동차가 몇 대나 등장하나요?"라고 질문해 보겠습니다.
출력: 이 이미지에는 자동차가 한 대 있습니다. 차는 건물 오른쪽 길가에 주차되어 있습니다.
모델은 이미지에서 단일 차량을 올바르게 식별했습니다. 이제 홍수 이미지에 묘사된 피해에 대해 질문해 보겠습니다.
출력: 이 이미지의 피해는 심각하며, 홍수로 토지의 상당 부분이 잠겨 구조물과 농작물에 광범위한 피해가 발생할 가능성이 있습니다. 수위가 적어도 허리 높이까지 차올라, 해당 지역 토지 소유주와 농민들에게 큰 손실을 초래할 수 있습니다.
이 응답은 보험과 같은 분야에서 멀티모달 AI가 갖는 가치를 강조합니다. 모델은 침수된 주택에 발생한 피해의 심각성을 감지할 수 있었습니다. 이는 보험금 청구 처리 시간을 개선할 수 있는 강력한 도구가 될 수 있습니다.
다음으로 영양 성분표 이미지에 나트륨 함량이 얼마나 들어 있는지 모델에 물어보겠습니다.
출력: **나트륨 함량: **640밀리그램(mg)
훌륭하군요! 이 모델은 사용자 쿼리에 따라 이미지 내의 객체를 식별할 수 있었습니다. 모델의 성능을 보다 잘 확인할 수 있도록, 더 많은 쿼리를 시도해 보시기 바랍니다.
이 튜토리얼에서는 Llama 3.2-90b-vision-instruct 모델을 사용하여 이미지 캡션 및 시각적 질문 답변을 포함한 멀티모달 작업을 수행했습니다. 이 모델의 더 많은 사용 사례를 보려면 공식 문서 페이지를 확인하시기 바랍니다. 여기에서 모델의 매개변수 및 기능에 대한 자세한 정보를 확인할 수 있습니다. Python 출력은 멀티모달 데이터에서 정보를 추출하는 멀티모달 시스템의 기능을 보여주기 때문에 중요합니다.
AI 빌더를 위한 차세대 엔터프라이즈 스튜디오인 IBM watsonx.ai로 생성형 AI, 파운데이션 모델 및 머신 러닝 기능을 학습, 검증, 조정 및 배포하세요. 적은 데이터로 짧은 시간 내에 AI 애플리케이션을 구축하세요.
업계 최고의 AI 전문성과 솔루션 포트폴리오를 보유한 IBM과 함께 AI를 비즈니스에 활용하세요.
AI 추가를 통해 중요한 워크플로와 운영을 혁신함으로써 경험, 실시간 의사 결정 및 비즈니스 가치를 극대화합니다.