EmbeddingGemma 2를 개선하여 스마트폰에서 구동 가능한 영상 판별 모델 Reflex-2 개발
요약
본 기사는 Google의 EmbeddingGemma 2를 기반으로 영상 및 소리 판별 모델인 Reflex-2를 개발한 내용을 다룹니다. Reflex-2는 낙상, 이상 상황 포착 등 현장 데이터를 클라우드 전송 없이 스마트폰에서 빠르게 판별할 수 있도록 최적화되었습니다. Gemini와 비교했을 때, Reflex-2는 정확도가 높고 판별 속도가 압도적으로 빠르다는 장점을 보여줍니다.
핵심 포인트
- EmbeddingGemma 2를 기반으로 영상/소리 판별 모델 Reflex-2 개발
- 현장 데이터를 클라우드 전송 없이 기기에서 실시간 판별 가능
- Gemini 대비 높은 정확도와 매우 빠른 판별 속도(예: 낙상 판별 0.28초)
- 개발 과정 및 코드, 판별기는 GitHub/Hugging Face에 공개
지난 글에서는 Google의 Gemma 4 E4B를 기반으로, frontier LLM의 정확도와 Jev의 속도를 가진 4B 크기의 판별 모델 Reflex-1을 만들었습니다.
Reflex-1은 문장과 이미지를 다룹니다. 이번에는 그 연장선으로 영상과 소리를 다루었습니다. 돌봄 카메라에 찍힌 사람이 넘어졌거나, 방범 카메라에 이상이 포착되었거나, 유리창이 깨지는 소리가 났을 때와 같은 현장에서 발생한 일을, 영상을 외부로 빼내지 않고 손안의 기기에서 그 자리에서 판별할 수 있을까 하는 질문입니다.
지난 글 말미에 각 기업들이 자신들의 목적에 맞는 모델을 직접 만들고 운영하고 싶다고 적었습니다. 이번에는 현장의 영상이나 소리를 예시로 보여주면, 몇 분 만에 판별이 가능한 형태로 만들었습니다. 기반으로는 Google이 2026년 10월 6일에 공개한 EmbeddingGemma 2를 사용했습니다.
돌봄 카메라의 낙상, 방범 카메라의 이상 상황, 유리창 깨지는 소리 등을 AI로 판별하고 싶다고 가정해 봅시다. Gemini와 같은 frontier LLM은 영상을 읽을 수 있지만, 한 번의 판별에 몇 초에서 십여 초가 걸리고, 영상을 클라우드로 전송해야 합니다. 판별 전문 AI인 Jev는 빠르지만, 영상을 읽지는 못합니다. 둘 다 가중치가 공개되어 있지 않아 현장의 영상이나 소리로 학습시킬 수도 없습니다.
Google이 공개한 검색용 오픈 모델 EmbeddingGemma 2(7.4억 파라미터)를 기반으로, 판별하고 싶은 것의 예시를 보여주며 학습시켜 영상과 소리를 판별하는 Reflex-2를 만들었습니다. 학습은 판별마다 몇 분 만에 끝나고, 카메라 영상을 재생하면서 판별할 수 있습니다. 문의 형식은 Jev와 동일합니다.
| Gemini 3.8 Flash | Reflex-2 |
|---|---|
| 낙상 판별(동일 40개) | 85.0% / 1회 6.95초 |
| 소리 10종 판별(동일 40개) | 85% / 1회 3.66초 |
| ... | |
| 개발은 GPU 1대로 2일이 걸렸으며, 외부 비용은 비교용 API 사용료 약 $1.3였습니다. |
코드와 판별기는 공개했습니다.
- GitHub: https://github.com/matu79go/reflex-2
- Hugging Face: https://huggingface.co/matu79go/Reflex-2
- Colab: https://colab.research.google.com/github/matu79go/reflex-2/blob/main/notebooks/quickstart.ipynb
아래 2개는 Reflex-2와 Gemini 3.8 Flash에 동일한 영상과 동일한 소리를 판별하게 하고, 답변까지의 속도와 정확도를 비교한 영상입니다.
영상 1: 집 안에서 사람이 넘어졌을 때, 몇 초 만에 알아챌 수 있는가
'넘어졌다!'는 순간부터 시계가 움직입니다. Reflex-2는 넘어진 후 12초 만에 포착했습니다. Gemini는 한 번의 판별에 48초가 걸렸고, 8초 후에 포착하거나 3 장면 중 2 장면에서 놓쳤습니다(영상 전체).
영상 2: 울음소리나 유리창 깨지는 소리를 듣자마자 구별할 수 있는가
Reflex-2는 0.050.09초 만에 4개 모두 정답을 맞혔습니다. Gemini는 310초가 걸렸고, 유리를 '발소리', 알람 시계를 '사이렌'이라고 답했습니다(GIF이므로 소리는 나지 않습니다. 소리가 있는 영상).
Reflex-2는 Google의 EmbeddingGemma 2를 기반으로 영상과 소리를 판별할 수 있도록 개선한 오픈 모델입니다. 돌봄 카메라의 낙상, 방범 카메라의 이상 상황, 울음소리나 유리창 깨지는 소리 등 현장에서 발생한 일을 한순간에 구별합니다.
기반이 되는 EmbeddingGemma 2는 Google이 2026년 10월 6일에 Apache 2.0으로 공개한, 문자·이미지·영상·소리를 같은 768차원 벡터로 변환하는 검색용 모델입니다.
- 발표: https://blog.google/innovation-and-ai/technology/developers-tools/embeddinggemma-2/
- 개발자용 가이드: https://developers.googleblog.com/embeddinggemma-2-the-developer-guide/
- 가중치(Weights): https://huggingface.co/google/embeddinggemma-2
| 항목 | 내용 |
|---|---|
| 크기 | 740M (텍스트 270M, 이미지・영상 170M, 음성 300M). 사용하지 않는 부분은 제외하고 로드할 수 있음 |
| ... | |
| 스마트폰이나 노트북 PC에서 구동되도록 만들어졌습니다. 다만 원래는 '비슷한 것을 찾는' 모델이기 때문에, 그대로만으로는 판별에 거의 사용할 수 없습니다(아래 표에서 보듯이, 넘어짐은 53.8% = 거의 찍기 수준). 이를 판별에 쓸 수 있도록 만든 것이 Reflex-2입니다. |
판별 전용 AI인 Jev는 빠르지만 영상을 읽을 수 없습니다. Gemini와 같은 frontier LLM은 영상을 읽을 수 있지만, 한 번의 판별에 몇 초에서 십여 초가 걸리고, 영상을 클라우드로 보내야 합니다. Reflex-2는 영상을 Jev처럼 순식간의 속도로, frontier LLM과 동등하거나 그 이상의 정확도로, 스마트폰에서 구동 가능한 크기로 판별합니다.
| 수치 | 의미 |
|---|---|
| 약 2초 | 넘어짐을 감지하고 알림이 오기까지 걸리는 시간. Gemini 3.8 Flash는 8초 또는 놓침 |
| 25배× | Gemini보다 빠른 영상 판별 속도 (1회 0.28초 대 6.95초). 음성은 75배(0.05초 대 3.66초) |
| 97.5% · 100% | 넘어짐・음성 정답률. 같은 문제에서 Gemini는 85%·85% |
| 0.7B · 1.5 GB | 스마트폰에서 구동 가능한 크기의 공개 가중치. 영상은 클라우드로 보내지 않음. 1회 비용 없음 |
또 다른 특징은, 현장의 판별을 예시(お手本)만으로 몇 초 만에 만들 수 있다는 것입니다. 넘어짐・침입・유리 깨지는 소리 등 판별하고 싶은 것의 예시를 수십 개 보여주면, 그 자리에서 판별기가 만들어집니다. 가중치가 공개되지 않은 Jev나 frontier LLM에게는 자신의 현장 영상이나 음성으로 판별을 학습시킬 수 없습니다.
이번에는 로지스틱 회귀(Logistic Regression)로 학습시켰습니다. 새로운 점은, 기반이 되는 것이 영상과 음성을 하나의 벡터로 만들 수 있으며, 게다가 스마트폰에서 구동 가능한 크기라는 점입니다.
영상(1초 1 프레임)/ 음성(16 kHz)
│ EmbeddingGemma 2(가중치는 고정. 건드리지 않음)
▼
...
본체는 reflex2/model.py 파일 하나입니다. 순서대로 살펴보겠습니다.
sentence-transformers에 영상 경로를 전달하면, 내부적으로 torchcodec을 사용해 디코딩하려고 시도합니다. torchvision 0.26에서 read_video가 사라졌기 때문에, torchcodec이 없는 환경에서는 ImportError가 발생합니다. 개발 기기(aarch64)에서는 여기서 막혔기 때문에, PyAV를 이용해 필요한 프레임만 추출하여 배열로 전달하고 있습니다.
def video_frames(path: str, fps: float = 1.0, max_frames: int = 32, start: float = 0.0, end: float | None = None) -> np.ndarray:
"""Frames sampled evenly over [start, end] at `fps`, at most `max_frames` (the model's default video budget).
Returns uint8 [N, H, W, 3]. Decoding keeps only the frames it needs."""
...
처음에는 모든 프레임을 메모리에 읽은 다음 간격을 두어 처리했기 때문에, 2분 반 영상의 경우 4,000장 이상이 되어 1개당 45초가 걸렸습니다. 원하는 시점의 프레임만 남기는 방식으로 변경하여, 추출 시간은 중앙값 0.20.4초로 단축되었습니다.
음성은 16 kHz 모노럴(mono)로 변환합니다.
영상, 이미지, 음성, 텍스트 등 어떤 종류의 데이터든 768 차원의 단위 벡터 하나로 만듭니다. 텍스트 앞의 task: classification | query:는 공식에서 용도별로 정해 놓은 접두사입니다. [IMG:N] 위치에 영상 토큰이 들어갑니다.
PREFIX = "task: classification | query: "
PROMPT = {"video": "A camera video. [IMG:N]", "image": "A camera image. [IMG:N]", "audio": "An audio clip. [IMG:N]"}
@torch.no_grad()
def embed(self, x, kind: str | None = None) -> np.ndarray:
"""영상(경로 또는 [N,H,W,3] 프레임), 이미지(경로 / PIL / [H,W,3])에 대한 768차 단위 벡터 하나를 반환합니다.
...
모델 로딩 시에는 GPU의 경우 bfloat16, CPU의 경우 float32를 사용하며, 사용하지 않는 모달리티는 제외할 수 있습니다(음성을 제외하면 -300M).
self.device = device or ("cuda" if torch.cuda.is_available() else "cpu")
dtype = torch.bfloat16 if self.device == "cuda" else torch.float32
cfg = {}
...
판별기는 벡터를 표준화한 후 곱셈을 한 번만으로 각 레이블의 확률을 계산하는 다중 클래스 로지스틱 회귀입니다.
@dataclass
class Head:
"""임베딩에 대한 로지스틱 회귀 헤드. probs = softmax(((x - mu) / sd) @ W + b)."""
...
학습은 L2 정규화가 적용된 교차 엔트로피를 L-BFGS로 해결합니다. 볼록 문제(convex problem)이므로 수백 개 예제는 CPU에서 몇 초 만에 처리됩니다.
def fit_head(X: np.ndarray, y: np.ndarray, labels: list, wd: float = 0.1, steps: int = 300, meta: dict | None = None) -> Head:
"""L2 정규화가 적용된 다항 로지스틱 회귀를 L-BFGS로 적합(fit)시킵니다. 수백 개 예제는 CPU에서 몇 초 소요됩니다.
"""
X = np.asarray(X, np.float32)
...
학습해야 할 것은 W (768 × 레이블 수)와 b 뿐입니다. 음성 10종류의 경우 약 7,700개, 낙상 2종류의 경우 약 1,500개에 불과합니다. JSON으로 저장하면 수백 KB 수준입니다. 예제로부터 판별기를 만드는 함수는 이 정도입니다.
def train_head(self, examples: dict, wd: float = 0.1, name: str | None = None) -> Head:
"""examples: {"label": [inputs...], ...}. 입력은 embed()가 수용하는 모든 것을 의미합니다. Head를 반환하고 등록합니다.
"""
labels = list(examples)
...
def decide_vec(self, v: np.ndarray, head) -> dict:
"""이미 가지고 있는 임베딩에 대한 decide()와 동일합니다 (하나의 임베딩이 여러 헤드 역할을 할 수 있습니다)."""
h = self._head(head)
...
벡터(vector) 하나를, 넘어짐·침입·유리 깨지는 소리 등 여러 판별기(criteria)에 재사용할 수 있습니다. 판별기를 늘려도 무거운 부분(벡터화 과정)은 한 번만 하면 됩니다.
학습하지 않은 판별(정답 단어와의 코사인 유사도)도 비교용으로 남겨두었습니다. 아래의 '학습 전' 숫자는 이것으로 산출한 것입니다.
def zero_shot_vec(self, v: np.ndarray, criteria: dict, temperature: float = 0.02) -> dict:
names = list(criteria)
T = np.stack([self.embed(criteria[n] or n, "text") for n in names])
...
카메라용으로는 0.5초마다 직전 4초(1초에 2프레임, 최대 8프레임)를 판별합니다. 판별기는 통째로(1초에 1프레임) 학습시킨 것을 그대로 창에 적용하고 있습니다.
def watch(self, path: str, head, window: float = 4.0, step: float = 0.5, fps: float = 2.0) -> list:
"""Score a video the way a live camera would: every `step` seconds, judge the last `window` seconds.
Returns [(t, probs), ...]."""
...
POST /v1/decisions
을 통해 Reflex-1이나 Jev와 같은 형태의 요청을 받습니다. 입력은 한 번만 벡터화하여 모든 질문에 재사용합니다(질문 2개로 CPU 사용 시 17.6초 → 7.9초가 되었습니다).
def decide(rf: Reflex2, req: dict, lock: threading.Lock) -> dict:
x, kind = _input(req)
out = {}
...
같은 EmbeddingGemma 2를 사용하더라도, 예시로 학습시키기 전과 후의 정답률이 완전히 다릅니다. 채점에는 학습에 사용하지 않은 영상·소리만 사용했습니다. 학습에 걸리는 시간은 예시를 벡터화하는 시간(GPU 1개)과 판별기 학습 시간을 합친 추정치입니다.
| 주제 | 학습에 사용한 예시 | 학습 소요 시간 | 순수 EmbeddingGemma 2 (학습 없음) | Reflex-2 (학습 있음) |
|---|---|---|---|---|
| 넘어짐(모르는 사람 영상) | 약 120개 | 약 1분 | 53.8% | 95.7% |
| ... |
추측은, 넘어짐·방범이 50%, 소리가 10%, 목소리 감정이 12.5%입니다. AUC로 보면, 넘어짐은 0.836 → 0.990, 방범카메라는 0.745 → 0.978입니다.
예시 개수와 정확도 (넘어짐, 모르는 사람 영상으로 채점)
| 예시(각 클래스) | 2개 | 5개 | 10개 | 20개 | 전부(약 60개) |
|---|---|---|---|---|---|
| 정답률 | 70.2% | 85.6% | 88.6% | 93.3% | 95.7% |
| AUC | 0.818 | 0.939 | 0.950 | 0.984 | 0.990 |
프레임의 세밀도: 1초에 1프레임이 더 좋았다
넘어짐은 순간적인 사건이라 1초에 4프레임이 좋을 것이라 예상했지만, 그 반대였습니다. 넘어지기 전과 후 자세의 차이로 충분히 구별되는 것 같습니다.
| 1초에 1프레임 | 1초에 4프레임 | |
|---|---|
| 정답률 / AUC | 95.7% / 0.990 | 93.8% / 0.975 |
| 1개 판별(영상 7초) | 0.30초 | 1.29초 |
| GPU 메모리 | 2.2 GB | 2.7 GB |
여기서는 실제 현장을 가정한 3가지 사례로, Reflex-2와 Gemini 3.8 Flash를 같은 조건에서 비교합니다. 모두 학습에 사용하지 않은 영상·소리로 채점한 실측입니다.
Gemini에게는 Reflex-2에 전달한 것과 같은 프레임(JPEG)이나 같은 소리를 주고, 0~100점 점수 또는 선택지 1개로 답하게 했습니다. Gemini 3.8 Flash는 사고를 끊을 수 없는 모델(Reasoning is mandatory for this endpoint)이므로, effort: minimal
에어리어(area)로 하고 있습니다. 공통 문의 부분은 다음과 같습니다.
def jpeg(a):
b = io.BytesIO()
Image.fromarray(a).save(b, format="JPEG", quality=85)
...
집 안 카메라 영상(GMDCSA24: 3개 집・4명 배우・낙상 79건 및 일반 움직임 81건, MIT License)을 사용하여 낙상이 발생했는지 여부를 판정하게 했습니다. Reflex-2는 전체 160건(학습에 사용되지 않은 사람의 영상으로 채점)에서도 정답률 95.7%를 보였습니다.
| 과제 (동일한 40건 비교) | Gemini 3.8 Flash | Reflex-2 |
|---|---|---|
| 낙상인지, 일반 움직임인지 | 85.0% | 97.5% |
| 1회 판정 시간(중앙값) | 6.95초 | 0.28초 |
Gemini는 낙상 20건 중 6건을 놓쳤습니다(Reflex-2는 놓친 것 0, 오보 1).
평가 방법: 사람별로 제외하기
같은 사람이의 영상이 학습과 채점 모두에 포함되면, 그 사람이나 방을 기억하여 맞추게 됩니다. 따라서 4명 중 3명으로 학습하고 나머지 1명으로 채점을 4회 반복했습니다.
def loso(H, y, subj, k, rng, wd=1e-1):
"""사람별로 제외하여 채점합니다. k > 0이면 학습 측에서 1종류당 k건만 사용합니다."""
s = np.zeros(len(y))
...
영상의 길이만으로 맞추는 것인지도 확인했습니다. 길이의 로그만을 특징으로 한 판별기의 AUC는 0.716이었고, 판별기(0.990)가 이를 크게 상회했습니다.
s_dur = loso(np.log(z["dur"])[:, None], y, subj, 0, np.random.default_rng(0), 1e-3)
r["duration_only_auc"] = round(auc(y, s_dur), 4)
Gemini에게 던진 질문은 다음과 같습니다.
PROMPT = ("These are frames sampled evenly (1 per second) from one home camera video. "
"Rate how likely a person falls down in this video, from 0 (no fall, normal daily activity) to 100 (clearly a fall). "
"Reply with the number only.")
넘어진 후 몇 초 만에 알아챌 수 있는가 (카메라와 동일 조건의 연속 시청)
1회 판정 시간만으로는 실제 감시에서 얼마나 빨리 알아챌 수 있는지 알 수 없습니다. 그래서 카메라와 동일한 조건으로 양쪽에 연속 시청을 시켰습니다.
- Reflex-2: 0.5초마다 직전 4초를 판정(위의
watch) - Gemini: 직전 4초를 보내고, 답변이 돌아온 시점의 직전 4초를 다음으로 보냅니다. 기다리는 동안 일어난 일은 볼 수 없습니다 (실제 운영과 동일)
dur, t, calls, alert = sc["duration"], min(1.0, sc["duration"]), [], None
while len(calls) < a.max_calls and spent <= a.max_usd:
end = min(t, dur)
...
| 카메라 연속 시청 (동일 영상) | 실제 낙상 | Gemini 3.8 Flash | Reflex-2 |
|---|---|---|
| 의자에서 떨어짐 | 3.4초 | 낙상 후 8.3초 | 낙상 후 1.9초 |
| ... |
Gemini의 1회 판정은 4.2~7.6초였습니다. 넘어지기 전 첫 번째는 정확하게 '일반'이라고 답하지만, 다음 답변이 돌아오는 것은 낙상 몇 초 후였고, 게다가 쓰러진 영상에서도 '일반'이라고 답한 장면이 2건 있었습니다.
아래의 선 그래프가 '낙상스러움', 연한 빨간색 영역이 실제 낙상입니다. 침대에 누워 있어도 오보는 없습니다 (영상 전체).
방범 카메라 영상(UCF-Crime의 2가지 분류 버전)을 사용하여 침입/폭행 등의 이상 여부가 포함되었는지, 아니면 일반적인 일상인지 판정하게 했습니다. 1건은 중앙값 75초의 영상으로, 전체에서 균등하게 32프레임을 가져왔습니다. Reflex-2는 평가용 110건 전체에서도 정답률 92.5%(AUC 0.978)를 보였습니다.
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
| 주제(동일 40개로 비교) | Gemini 3.8 Flash | Reflex-2 |
|---|---|---|
| 방범 카메라 영상의 이상 여부 (이상/정상) | 95% | 95% |
| 1회 판별 시간 (중앙값) | 16.1초 | 1.4초 |
평가 방법
학습용 120개(이상 60개・정상 60개)와 평가용 110개로 나누고, 정규화 강도는 학습용의 5분할 중 하나를 선택했습니다. 영상 길이만으로 판별하는 모델(AUC 0.655)과도 비교했습니다.
def pick_wd(X, y, rng):
""학습용 데이터의 5분할로 정규화 강도를 선택한다.""{}
fold = rng.permutation(len(y)) % 5
...
wd = pick_wd(H[tr], y[tr], rng)
s_probe = probe(H[tr], y[tr], H[te], wd)
s_dur = probe(np.log(D[tr])[:, None], y[tr], np.log(D[te])[:, None], 1e-3)
Gemini에게 던진 질문은 다음과 같습니다.
PROMPT = ("These are 32 frames sampled evenly from one surveillance camera video. "
"Rate how likely the video contains an abnormal event (crime, violence, accident, fire, explosion, arrest, etc.) "
"from 0 (completely normal everyday activity) to 100 (clearly abnormal). Reply with the number only.")
돌봄 및 방범에 중요한 10가지 소리(아기 울음소리・유리 깨지는 소리・사이렌・개・문 두드리는 소리・발소리・기침・코골이・알람 시계・불 타는 소리)를 ESC-50의 400개로 판별하게 했습니다. Reflex-2는 400개 전체(학습에 사용하지 않은 소리로 채점)에서도 정답률 96.3%입니다.
| 주제(동일 40개로 비교) | Gemini 3.8 Flash | Reflex-2 |
|---|---|---|
| 10가지 소리 구별 능력 | 85% | 100% |
| 1회 판별 시간 (중앙값) | 3.66초 | 0.05초 |
(소리가 포함된 영상)
평가 방법: ESC-50 공식 5분할
같은 녹음에서 잘라낸 소리가 학습과 채점에 사용되지 않도록, ESC-50의 공식 5분할을 사용하여 1분할씩 빼고 채점했습니다(학습 320개・채점 80개를 5회).
for k in sorted(set(fold)):
tr = fold != k
head = fit_head(H[tr], y[tr], CLASSES, 0.1)
...
Gemini에게는 Reflex-2에 전달하는 것과 동일한 16 kHz 모노럴 wav를 input_audio로 전달하여 10가지 중 하나를 선택하게 했습니다.
def wav_b64(path):
""16 kHz 모노럴 wav로 만들어 base64 (Reflex-2에 전달하는 것과 동일한 소리).""{}
a = (np.clip(audio_wave(path), -1, 1) * 32767).astype(np.int16)
...
prompt = ("Which sound is this? Choose exactly one of: " + ", ".join(CLASSES) + ". Reply with the label only.")
body = {"model": model, "max_tokens": 2000, "temperature": 0, "reasoning": {"effort": "minimal"}, "usage": {"include": True},
"messages": [{"role": "user", "content": [{"type": "input_audio", "input_audio": {"data": b64, "format": "wav"}},...
Gemini가 틀린 것은 6가지였으며, 유리창이 깨지는 소리를 발소리/노크로, 사이렌을 아기 울음소리로, 알람 시계를 사이렌으로, 불의 파직거리는 소리를 노크/발소리로 답변했습니다.
영상과 음성을 스마트폰이나 카메라 같은 기기로 순식간에, 현장의 모범 사례에서 배운 기준으로 판별할 수 있습니다. '실측'은 이번에 확인한 것이며, 다른 것도 동일한 방법으로 만들 수 있습니다.
| 분야 | 사용처 |
|---|---|
| 간호/의료 | 낙상·전락(실측)/ 야간 배회, 움직임 없음 / 기침·코골이(실측), 사레·신음소리 / 침대에서 일어나는 행동 |
| ... | |
| 집・병원・가게・공장의 영상은 외부에 공개하고 싶지 않은 경우가 많습니다. Reflex-2는 카메라 근처나 스마트폰 안에서 판별하기 때문에 영상을 클라우드로 보낼 필요가 없고, 통신비도 1회당 비용이 들지 않습니다. |
| frontier LLM (Gemini 3.8 / GPT-5.6) | Jev (typesafe/jev-1.13) | Reflex-1 (문장・이미지) | Reflex-2 |
|---|---|---|---|
| 영상 판별 | ▲ 정확도는 높지만 1개당 7~16초 | × 미지원 | × 이미지만 |
| 음성 판별 | ▲ 1개당 2~13초 | × 미지원 | × 미지원 |
| ... | |||
| ● 가능/강함 ▲ 조건부 × 불가능. 질문을 문장으로 작성하여 판별시키고 싶을 때는 Reflex-1, 영상이나 음성 판별에는 Reflex-2를 사용합니다. |
조건
- 동일한 입력(동일 프레임, 동일 16 kHz의 음성)을 양쪽에 전달했습니다.
- Reflex-2는 모범 사례로 학습시킨 판별기인 반면,
Gemini는 학습이 없습니다. 학습하지 않은 상태끼리 비교했을 때, 음성의 10가지 종류는 Gemini가 85%를 기록한 것에 비해 순수 EmbeddingGemma 2는 35%로, Gemini 쪽이 더 높습니다. 모범 사례를 수십 개 보여주는 것만으로 이것이 역전되는 것이 이 기사의 핵심입니다. - Gemini는 사고를 최소(effort: minimal)
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기