데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Gemma 3n 모델로 음성과 이미지도 입력해보자

      shkwak 25.07.16
      3,413 5 1
      DEVOTEE 요약
      최근 발표된 Gemma 3n은 텍스트, 이미지, 오디오 등 멀티모달 데이터를 처리할 수 있는 온디바이스 모델로, 인터넷 연결 없이도 민감한 정보를 보호하면서 고성능을 제공합니다. 파라미터 최적화(5B, 8B 모델이 2B, 4B 수준 메모리 사용), MatFormer 아키텍처, KV 캐시 공유 등 혁신적인 기술을 적용했으며, 다양한 입출력 방식(음성 변환, 이미지 분석 등)으로 활용 가능합니다. 이를 통해 오프라인 환경에서도 다양한 데이터 기반 작업을 효율적으로 실행할 수 있어 응용 가능성이 넓습니다.
      DEVOTEE 추천 블로그

      Gemma 3n 소개

      최근 Gemma 3n 모델이 발표되었습니다.

      이번 모델의 특징 중 하나는 멀티모달에 대한 부분입니다.

      텍스트, 이미지 뿐만 아니라 오디오도 입력받을 수 있게 되었습니다.

      이미 이미지나 오디오를 입력 받아서 처리하는 모델은 많지 않냐고요?

      중요한건 Gemma 3n은 On-device 모델이라는 겁니다.

      인터넷에 연결되어 있지 않아도, 민감한 정보를 서버에 올리지 않아도, 서버 운영에 대한 추가비용 없이도 사용할 수 있습니다.

      다른 특징으로는 파라미터 최적화와 성능향상을 들 수 있습니다.

      LMArena의 Elo Score(상대적인 비교평가 지수)에서도 다른 거대모델들과 비교해서도 상당히 높다는 것을 확인할 수 있습니다.


      Gemma 3n은 E2B 모델과 E4B 모델이 존재하는데 각각 5B, 8B 파라미터를 2B, 4B 모델과 유사한 메모리 사용량으로 실행 가능합니다.


      그 밖에도 아래와 같은 특징들을 가지고 있습니다.

      • MatFormer 아키텍처

        마트료시카(Matryoshika) 인형처럼 큰 모델 안에 완전한 작은 모델을 갖추고 있음.

        E4B 모델 학습 과정에서 E2B 모델이 동시에 최적화됨. 일부 레이어를 선택적으로 건너뛰어 최적의 모델 크기를 도출할 수 있음

      • 레이어별 임베딩 (PLE)

        파라미터의 상당 부분은 CPU에서 로드되고 핵심 트랜스포머 가중치만 GPU/TPU에 로드됨

      • KV 캐시 공유

        KV(Key-Value) 캐시 공유 기능을 도입하여 긴 시퀀스 입력을 이전보다 더 빠르게 처리함


      Gemma 3n 실행

      이제 한번 실행해보도록 하죠.

      참고로 아래 코드는 Macbook Pro M3에서 jupyter notebook을 통해 실행되었습니다.


      사전 준비 작업으로 pytorch, transformers와 pytorch image models 라이브러리를 최신버전으로 설치해주셔야 합니다.

      # Pytorch 설치 (Mac용)
      %pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
      # 또는 (2.8.0버전 정식 릴리즈 후)
      # %pip install "torch>=2.8.0" torchvision torchaudio
      
      # Transformers 설치
      %pip install "transformers>=4.53.0"
      
      # PyTorch Image Models 설치
      %pip install "timm>=1.0.16"

      전처리기와 모델을 불러옵니다.

      import torch
      from transformers import AutoProcessor, AutoModelForImageTextToText
      
      GEMMA_MODEL_ID = "google/gemma-3n-E2B-it" # 또는 "google/gemma-3n-E4B-it"
      
      processor = AutoProcessor.from_pretrained(GEMMA_MODEL_ID, device_map="auto")
      model = AutoModelForImageTextToText.from_pretrained(
                  GEMMA_MODEL_ID, torch_dtype="auto", device_map="auto")

      이제 오디오를 입력으로 받아서 처리해 보겠습니다.

      %%time
      messages = [
          {
              "role": "user",
              "content": [
                  {"type": "audio", "audio": "https://ai.google.dev/gemma/docs/audio/roses-are.wav"}, # 오디오 URL 또는 Path
                  {"type": "text", "text": "Transcribe this audio and complete the statement"}, # 프롬프트 입력
              ]
          }
      ]
      
      input_ids = processor.apply_chat_template(
              messages,
              add_generation_prompt=True,
              tokenize=True, return_dict=True,
              return_tensors="pt",
      )
      input_ids = input_ids.to(model.device, dtype=model.dtype)
      
      outputs = model.generate(**input_ids, max_new_tokens=64) # 최대 생성 토큰 수
      
      text = processor.batch_decode(
          outputs,
          skip_special_tokens=False,
          clean_up_tokenization_spaces=False
      )
      print(text[0])

      아래는 출력 결과입니다. 예제는 영어로된 음성을 입력했는데 한국어 음성을 넣어도 결과가 잘 나옵니다. 하지만 영어보다는 인식하는 성능이 쫌 떨어지는 것 같아요.

      <bos><start_of_turn>user
      
      
      <start_of_audio><audio_soft_token><audio_soft_token><audio_soft_token>
      ...
      <audio_soft_token><audio_soft_token><audio_soft_token><end_of_audio>
      
      Transcribe this audio and complete the statement<end_of_turn>
      <start_of_turn>model
      Roses are red, violets are blue. 
      <end_of_turn>
      CPU times: user 1.54 s, sys: 600 ms, total: 2.14 s
      Wall time: 3.26 s

      다음은 이미지를 입력해보겠습니다.

      %%time
      messages = [
          {
              "role": "user",
              "content": [
                  {"type": "image", "url": "https://ai.google.dev/gemma/docs/capabilities/vision/images/surprise.png"}, # 이미지 URL 또는 Path
                  {"type": "text", "text": "이 사진에 제목을 달아줘"}, # 프롬프트 입력
              ]
          }
      ]
      
      input_ids = processor.apply_chat_template(
              messages,
              add_generation_prompt=True,
              tokenize=True, return_dict=True,
              return_tensors="pt",
      )
      input_ids = input_ids.to(model.device, dtype=model.dtype)
      
      outputs = model.generate(**input_ids, max_new_tokens=128) # 최대 생성 토큰 수
      
      text = processor.batch_decode(
          outputs,
          skip_special_tokens=False,
          clean_up_tokenization_spaces=False
      )
      print(text[0])

      이미지도 오디오 입력과 거의 동일하고 messages 정의 부분만 수정해주시면 됩니다.

      입력된 이미지와 결과입니다. 다양한 스타일로 제목을 달아주었는데요. 어떠신가요?

      max_new_tokens 값을 수정하여 출력 길이를 조정할 수 있습니다.

      image

      <bos><start_of_turn>user
      
      
      <start_of_image><image_soft_token><image_soft_token><image_soft_token>
      ...
      <image_soft_token><image_soft_token><image_soft_token><end_of_image>
      
      이 사진에 제목을 달아줘<end_of_turn>
      <start_of_turn>model
      다음은 사진에 대한 몇 가지 제목 제안입니다.
      
      **간결하고 직접적인 제목:**
      
      * 고양이
      * 귀여운 고양이
      * 큰 눈을 가진 고양이
      
      **더 표현적인 제목:**
      
      * 궁금한 고양이
      * 반짝이는 눈의 고양이
      * 카메라를 응시하는 고양이
      * 포즈를 취하는 고양이
      
      **재미있는 제목:**
      
      * 깜짝 놀란 고양이
      * 눈을 크게 뜨고 빤히 보는 고양이
      
      어떤 제목이 가장 마음에 드시나요?<end_of_turn>
      CPU times: user 7.98 s, sys: 1.39 s, total: 9.36 s
      Wall time: 11.2 s

      오디오와 이미지를 입력으로 받을 수 있게 되면서 더욱 다양한 방식으로 활용될 수 있을겁니다.

      구글에 있는 예제들을 보면 아래와 같은 것들도 가능하죠.

      • 이미지에 대한 질문 답변하기

      • 두 개의 이미지를 비교하기

      • 이미지에 있는 물체들 인식하기

      • 이미지의 분위기 설명하기

      • 비디오 분석하기 (이미지 리스트와 오디오를 입력)

      • 여러 이미지를 입력하고 시나리오 작성하기

      흥미롭게 읽으셨나요? 상상력을 발휘해서 다양한 분야에 활용해보시면 좋겠습니다.

      읽어주셔서 감사드립니다.


      참고자료

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      shkwak 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기