홈으로 돌아가기

X-레이 분석을 위한 러시아어 AI: ViT + ruGPT-3 모델 조립

이 기사는 X-레이 이미지 분석 및 러시아어 의료 보고서 생성을 위한 멀티모달 신경망 제작 실전 경험을 설명합니다. ViT와 ruGPT-3 모델 결합 단계, 데이터 준비, 훈련, 솔루션 배포를 다룹니다.

러시아어 AI 방사선 전문의 조립: 아키텍처부터 추론까지
Advertisement 728x90

러시아 멀티모달 AI 방사선의사: ViT + ruGPT-3 Kaggle 가이드

러시아어 의료 AI 솔루션 개발은 바로 사용할 수 있는 도구와 데이터셋 부족으로 어려움을 겪습니다. 이 글에서는 X-레이 영상에서 의료 보고서를 생성하는 VisionEncoderDecoder 모델을 조립하고 훈련하는 실습 사례를 단계별로 안내합니다. ViT 시각 인코더와 ruGPT-3 언어 모델을 결합한 접근법입니다.

아키텍처 선택과 모델 수정

멀티모달 모델을 처음부터 구축하려면 막대한 컴퓨팅 자원이 필요합니다. 더 현명한 방법은 Hugging Face의 VisionEncoderDecoderModel 아키텍처를 활용해 사전 훈련된 컴포넌트를 결합하는 것입니다. 시각 특징 추출을 위한 인코더로는 google/vit-base-patch16-224-in21k를 선택했습니다. 디코더는 러시아어 모델 ai-forever/rugpt3small_based_on_gpt2입니다.

주요 과제: ruGPT-3은 기본적으로 인코더로부터 데이터를 받는 크로스 어텐션을 지원하지 않습니다. 해결책은 모델 초기화 전에 설정을 수정하는 것입니다:

Google AdInline article slot
from transformers import AutoConfig, AutoModelForCausalLM, AutoModel

encoder = AutoModel.from_pretrained("google/vit-base-patch16-224-in21k")

decoder_config = AutoConfig.from_pretrained("ai-forever/rugpt3small_based_on_gpt2")
decoder_config.is_decoder = True
decoder_config.add_cross_attention = True

decoder = AutoModelForCausalLM.from_pretrained("ai-forever/rugpt3small_based_on_gpt2", config=decoder_config)

조립 후 모델은 크로스 어텐션과 프로젝션 레이어에 새로운 가중치를 초기화하며, 이는 훈련 중 파인튜닝됩니다.

데이터 준비 및 처리

X-레이 영상과 의료 보고서를 쌍으로 매칭한 러시아어 데이터셋은 없어 창의적으로 접근했습니다. 영어 Indiana University Chest X-Ray (IU X-Ray) 데이터셋(~7,500개 영상 및 보고서)을 사용해 Helsinki-NLP/opus-mt-en-ru 모델로 Kaggle 환경에서 직접 보고서를 러시아어로 번역했습니다.

Kaggle 파일 처리는 특이점이 있습니다. 일반 이미지 로더는 썸네일만 인식하는 경우가 많습니다. 정확한 매핑을 위해 파일 시스템을 깊이 스캔합니다:

Google AdInline article slot
import os

file_map = {}
for root, dirs, files in os.walk('/kaggle/input'):
    for file in files:
        if file.lower().endswith(('.png', '.jpg', '.jpeg')):
            base_name = os.path.splitext(file)[0]
            file_map[base_name] = os.path.join(root, file)

이렇게 CSV 식별자와 실제 이미지 경로를 안정적으로 연결합니다.

훈련 과정과 문제 해결

훈련은 NVIDIA T4 GPU 2대로 혼합 정밀도(fp16)와 그래디언트 누적(gradient_accumulation_steps=4)을 사용해 가상 배치 크기 32를 효율적으로 처리했습니다.

일반적인 문제와 해결책:

Google AdInline article slot
  • 체크포인트 저장 오류: 일부 transformers 버전의 Seq2SeqTrainer가 커스텀 복합 모델에서 실패합니다. 해결: 중간 저장 비활성화(save_strategy="no")하고, 최종 저장 전에 GenerationConfig로 생성 파라미터 수동 처리.
  • Kaggle 세션 타임아웃: 긴 훈련 중 자동 종료 방지를 위해 브라우저 콘솔에서 주기적 클릭을 시뮬레이션하는 간단한 JavaScript 스니펫 실행.

결과, 추론 및 배포

15 에포크 후 모델은 전문 용어를 올바르게 사용하며 일관된 러시아어 의료 보고서를 생성합니다. 폐 청명, 기흉 징후, 심비대 등 기본 패턴을 식별합니다. 소규모 데이터셋 탓에 가끔 없는 의료 기기를 언급하는 환각 현상이 발생합니다.

기본 추론 예시:

import torch
from transformers import VisionEncoderDecoderModel, ViTImageProcessor, AutoTokenizer
from PIL import Image

model_id = "livadies/Russian-Radiologist-ruGPT-ViT"
model = VisionEncoderDecoderModel.from_pretrained(model_id)
feature_extractor = ViTImageProcessor.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)

image = Image.open("xray.jpg").convert("RGB")
pixel_values = feature_extractor(images=image, return_tensors="pt").pixel_values

generated_ids = model.generate(pixel_values, max_length=128, num_beams=4)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))

Gradio 데모는 Hugging Face Spaces에서 CPU로 실행되며 생성 시간은 10~15초입니다. 데이터 파이프라인과 훈련 노트북을 포함한 전체 소스 코드는 공개 레포지토리에 있습니다.

주요 교훈

  • 하이브리드 아키텍처: 설정 수정으로 사전 훈련된 ViT 시각 인코더와 ruGPT-3 언어 모델을 성공적으로 융합.
  • 데이터 우회: 러시아 의료 데이터셋 부족을 영어 데이터 번역과 Kaggle 파일 특성 극복으로 해결.
  • 실용적 수정: Seq2SeqTrainer의 버그 저장 비활성화와 세션 타임아웃 방지로 안정적 장기 훈련.
  • 개념 증명: 소규모 데이터셋으로 Vision + Language 아키텍처가 구조화된 러시아 의료 텍스트 생성에 적합함을 검증.
  • 오픈 & 접근성: 전체 코드와 인터랙티브 데모를 커뮤니티 학습, 테스트, 확장을 위해 공개.

— Editorial Team

Advertisement 728x90

다음 읽기