qihoo360/RzenEmbed

Model

RzenEmbed-v2-7B

16

4 commits

2 linked in READMEs

updated Nov 6, 2025

See the code

README

RzenEmbed-v2-7B

RzenEmbed-v2-7B is a multimodal embedding model developed and open-sourced by 360CVGroup. It achieves state-of-the-art (SOTA) results on the MMEB-V2, MMEB-Visdoc, and MMEB-Video benchmarks (as of September 29, 2025).

arXiv GitHub Benchmark

MMEB-V2

ModelModel Size (B)OverallImage-OverallVideo-OverallVisdoc-Overall
RzenEmbed-v2-7B8.2971.6175.9255.7377.06
seed-1.6-embeddingunknown71.2777.7855.3473.44
Ops-MM-embedding-v1-7B8.2967.6172.7253.7670.34
Ops-MM-embedding-v1-2B2.2163.4469.0347.5666.96
interestFM-UIR-CAFe-7B8.0360.6367.5642.463.92
VLM2Vec-V2.0-Qwen2VL-2B2.2158.0264.8534.8565.36
gme-Qwen2-VL-7B-Instruct8.2957.8355.9538.4375.18
gme-Qwen2-VL-2B-Instruct2.2154.0851.8933.6472.71

MMEB-Image

ModelsModel Size(B)Image-OverallI-CLSI-QAI-RETI-VG
seed-1.6-embeddingunknown77.7876.0673.9777.991.25
RzenEmbed-v2-7B8.2975.9270.6171.6778.592.1
QQMM-embed-v28.2975.2872.9771.8576.0187.42
ReCo-7B8.2973.8770.9571.5273.6687.70
OEmbedding-v1-7B8.2972.7970.0568.173.8488.25
Ops-MM-embedding-v1-7B8.2972.7269.6569.5873.0987.15
QQMM-embed8.2972.1870.0769.5271.1887.08
B3_Qwen2_7B8.2972.0070.0066.5074.1084.60

MMEB-Video

ModelsModel Size(B)Video-OverallV-CLSV-QAV-RETV-MRET
RzenEmbed-v2-7B8.2955.7358.8263.550.9745.54
seed-1.6-embeddingunknown55.3454.9960.8551.3353.45
Ops-MM-embedding-v1-7B8.2953.7659.6862.2245.7243.21
interestFM-UIR-CAFe-7B8.0342.4035.8158.6634.4439.53
gme-Qwen2-VL-7B-Instruct8.2938.4337.4450.3528.3736.96
interestFM-UIR-CAFe-0.5B0.8935.8733.9041.7229.6939.69
LamRA-Ret8.2934.9639.2742.624.2632.84
VLM2Vec-V2.0-Qwen2VL-2B2.2134.5839.3034.3228.7736.82

MMEB-Visdoc

ModelsModel Size(B)Visdoc-OverallViDoRe-V1ViDoRe-V2VisRAGVisDoc-OOD
RzenEmbed-v2-7B8.2977.0689.760.788.744.38
gme-Qwen2-VL-7B-Instruct8.2975.1889.4455.6184.9944.4
seed-1.6-embeddingunknown73.4485.5356.5784.7443.14
gme-Qwen2-VL-2B-Instruct2.2172.7186.1553.9682.5243.12
colpali-v1.32.9270.9783.6051.9881.1343.12
Ops-MM-embedding-v1-7B8.2970.3480.0559.5979.3243.34
Ops-MM-embedding-v1-2B2.2166.9676.3953.1877.6441.17
VLM2Vec-V2.0-Qwen2VL-2B2.2165.3675.5244.8679.3839.43

Usage

Text-to-Image Retrieval

Retrieve images that match text captions.

from rzen_embed_inference import RzenEmbed

rzen = RzenEmbed("qihoo360/RzenEmbed")

queries = [
    "A curious kitten and a gentle puppy share a moment of connection on the grass.",
    "Fresh fridge full of berries yogurt milk and snacks."
]
candidates = [
    "assets/example1.jpg",
    "assets/example2.jpg",
]

query_instruction = "Find me an everyday image that matches the given caption: "
candidate_instruction = "Represent the given image."

# Generate embeddings and compute similarity
query_embeds = rzen.get_fused_embeddings(instruction=query_instruction, texts=queries)
candidate_embeds = rzen.get_fused_embeddings(instruction=candidate_instruction, images=candidates)

# Calculate text-to-image similarity scores
similarity_scores = query_embeds @ candidate_embeds.T
print(similarity_scores)

Image-to-Text Retrieval

Find text captions that best match given images.

from rzen_embed_inference import RzenEmbed

rzen = RzenEmbed("qihoo360/RzenEmbed")

queries = [
    "assets/example1.jpg",
    "assets/example2.jpg",
]
candidates = [
    "A curious kitten and a gentle puppy share a moment of connection on the grass.",
    "Fresh fridge full of berries yogurt milk and snacks."
]

query_instruction = "Find an image caption describing the given everyday image."

query_embeds = rzen.get_fused_embeddings(instruction=query_instruction, images=queries)
candidate_embeds = rzen.get_fused_embeddings(texts=candidates)

# Calculate image-to-text similarity scores
similarity_scores = query_embeds @ candidate_embeds.T
print(similarity_scores)

Document Retrieval

Match text queries with document images for information retrieval.

from rzen_embed_inference import RzenEmbed

rzen = RzenEmbed("qihoo360/RzenEmbed")

queries = [
    "What is the main variable being analyzed on the x-axis of these graphs?",
    "What is the personnel costs in the 4th year?"
]
candidates = [
    "assets/example3.jpg",
    "assets/example4.jpg",
]

query_instruction = "Find a document image that matches the given query: "
candidate_instruction = "Understand the content of the provided document image."

# Generate embeddings for document retrieval
query_embeds = rzen.get_fused_embeddings(instruction=query_instruction, texts=queries)
candidate_embeds = rzen.get_fused_embeddings(instruction=candidate_instruction, images=candidates)

# Calculate text-to-document similarity
similarity_scores = query_embeds @ candidate_embeds.T
print(similarity_scores)

Video Retrieval

Retrieve videos based on text captions.

import cv2
import numpy as np
from rzen_embed_inference import RzenEmbed

def extract_frames(video_path, num_frames):
    cap = cv2.VideoCapture(video_path)
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    frame_indices = np.linspace(0, total_frames - 1, num_frames, dtype=int)
    frames = []
    for idx in frame_indices:
        cap.set(cv2.CAP_PROP_POS_FRAMES, idx)
        ret, frame = cap.read()
        if ret:
            frames.append(Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)))
        else:
            break
    cap.release()
    return frames

rzen = RzenEmbed("qihoo360/RzenEmbed")

queries = [
    "A traditional boat glides along a river lined with blooming cherry blossoms under an overcast sky in a modern cityscape.",
    "Tiny ginger kitten meows cutely by the water."
]

# Extract frames from videos
video_path_list = [
    "assets/example5.mp4",
    "assets/example6.mp4",
]
candidates = [extract_frames(video_path, num_frames=8) for video_path in video_path_list]

query_instruction = "Find the video snippet that corresponds to the given caption: "
candidate_instruction = "Understand the content of the provided video."

# Generate embeddings for video retrieval
query_embeds = rzen.get_fused_embeddings(instruction=query_instruction, texts=queries)
candidate_embeds = rzen.get_fused_embeddings(instruction=candidate_instruction, images=candidates)

# Calculate text-to-video similarity scores
similarity_scores = query_embeds @ candidate_embeds.T
print(similarity_scores)

Citation

If you find RzenEmbed useful for your research and applications, please cite using this BibTeX:

@article{jian2025rzenembed,
  title={RzenEmbed: Towards Comprehensive Multimodal Retrieval},
  author={Jian, Weijian and Zhang, Yajun and Liang, Dawei and Xie, Chunyu and He, Yixiao and Leng, Dawei and Yin, Yuhui},
  journal={arXiv preprint arXiv:2510.27350},
  year={2025}
}
qwen2_vl
safetensors

Contributors

BI
binwang777

2 commits

xiechunyu

2 commits

qihoo360/RzenEmbed

Model

RzenEmbed-v2-7B

16

4 commits

2 linked in READMEs

updated Nov 6, 2025

See the code

README

RzenEmbed-v2-7B

RzenEmbed-v2-7B is a multimodal embedding model developed and open-sourced by 360CVGroup. It achieves state-of-the-art (SOTA) results on the MMEB-V2, MMEB-Visdoc, and MMEB-Video benchmarks (as of September 29, 2025).

arXiv GitHub Benchmark

MMEB-V2

ModelModel Size (B)OverallImage-OverallVideo-OverallVisdoc-Overall
RzenEmbed-v2-7B8.2971.6175.9255.7377.06
seed-1.6-embeddingunknown71.2777.7855.3473.44
Ops-MM-embedding-v1-7B8.2967.6172.7253.7670.34
Ops-MM-embedding-v1-2B2.2163.4469.0347.5666.96
interestFM-UIR-CAFe-7B8.0360.6367.5642.463.92
VLM2Vec-V2.0-Qwen2VL-2B2.2158.0264.8534.8565.36
gme-Qwen2-VL-7B-Instruct8.2957.8355.9538.4375.18
gme-Qwen2-VL-2B-Instruct2.2154.0851.8933.6472.71

MMEB-Image

ModelsModel Size(B)Image-OverallI-CLSI-QAI-RETI-VG
seed-1.6-embeddingunknown77.7876.0673.9777.991.25
RzenEmbed-v2-7B8.2975.9270.6171.6778.592.1
QQMM-embed-v28.2975.2872.9771.8576.0187.42
ReCo-7B8.2973.8770.9571.5273.6687.70
OEmbedding-v1-7B8.2972.7970.0568.173.8488.25
Ops-MM-embedding-v1-7B8.2972.7269.6569.5873.0987.15
QQMM-embed8.2972.1870.0769.5271.1887.08
B3_Qwen2_7B8.2972.0070.0066.5074.1084.60

MMEB-Video

ModelsModel Size(B)Video-OverallV-CLSV-QAV-RETV-MRET
RzenEmbed-v2-7B8.2955.7358.8263.550.9745.54
seed-1.6-embeddingunknown55.3454.9960.8551.3353.45
Ops-MM-embedding-v1-7B8.2953.7659.6862.2245.7243.21
interestFM-UIR-CAFe-7B8.0342.4035.8158.6634.4439.53
gme-Qwen2-VL-7B-Instruct8.2938.4337.4450.3528.3736.96
interestFM-UIR-CAFe-0.5B0.8935.8733.9041.7229.6939.69
LamRA-Ret8.2934.9639.2742.624.2632.84
VLM2Vec-V2.0-Qwen2VL-2B2.2134.5839.3034.3228.7736.82

MMEB-Visdoc

ModelsModel Size(B)Visdoc-OverallViDoRe-V1ViDoRe-V2VisRAGVisDoc-OOD
RzenEmbed-v2-7B8.2977.0689.760.788.744.38
gme-Qwen2-VL-7B-Instruct8.2975.1889.4455.6184.9944.4
seed-1.6-embeddingunknown73.4485.5356.5784.7443.14
gme-Qwen2-VL-2B-Instruct2.2172.7186.1553.9682.5243.12
colpali-v1.32.9270.9783.6051.9881.1343.12
Ops-MM-embedding-v1-7B8.2970.3480.0559.5979.3243.34
Ops-MM-embedding-v1-2B2.2166.9676.3953.1877.6441.17
VLM2Vec-V2.0-Qwen2VL-2B2.2165.3675.5244.8679.3839.43

Usage

Text-to-Image Retrieval

Retrieve images that match text captions.

from rzen_embed_inference import RzenEmbed

rzen = RzenEmbed("qihoo360/RzenEmbed")

queries = [
    "A curious kitten and a gentle puppy share a moment of connection on the grass.",
    "Fresh fridge full of berries yogurt milk and snacks."
]
candidates = [
    "assets/example1.jpg",
    "assets/example2.jpg",
]

query_instruction = "Find me an everyday image that matches the given caption: "
candidate_instruction = "Represent the given image."

# Generate embeddings and compute similarity
query_embeds = rzen.get_fused_embeddings(instruction=query_instruction, texts=queries)
candidate_embeds = rzen.get_fused_embeddings(instruction=candidate_instruction, images=candidates)

# Calculate text-to-image similarity scores
similarity_scores = query_embeds @ candidate_embeds.T
print(similarity_scores)

Image-to-Text Retrieval

Find text captions that best match given images.

from rzen_embed_inference import RzenEmbed

rzen = RzenEmbed("qihoo360/RzenEmbed")

queries = [
    "assets/example1.jpg",
    "assets/example2.jpg",
]
candidates = [
    "A curious kitten and a gentle puppy share a moment of connection on the grass.",
    "Fresh fridge full of berries yogurt milk and snacks."
]

query_instruction = "Find an image caption describing the given everyday image."

query_embeds = rzen.get_fused_embeddings(instruction=query_instruction, images=queries)
candidate_embeds = rzen.get_fused_embeddings(texts=candidates)

# Calculate image-to-text similarity scores
similarity_scores = query_embeds @ candidate_embeds.T
print(similarity_scores)

Document Retrieval

Match text queries with document images for information retrieval.

from rzen_embed_inference import RzenEmbed

rzen = RzenEmbed("qihoo360/RzenEmbed")

queries = [
    "What is the main variable being analyzed on the x-axis of these graphs?",
    "What is the personnel costs in the 4th year?"
]
candidates = [
    "assets/example3.jpg",
    "assets/example4.jpg",
]

query_instruction = "Find a document image that matches the given query: "
candidate_instruction = "Understand the content of the provided document image."

# Generate embeddings for document retrieval
query_embeds = rzen.get_fused_embeddings(instruction=query_instruction, texts=queries)
candidate_embeds = rzen.get_fused_embeddings(instruction=candidate_instruction, images=candidates)

# Calculate text-to-document similarity
similarity_scores = query_embeds @ candidate_embeds.T
print(similarity_scores)

Video Retrieval

Retrieve videos based on text captions.

import cv2
import numpy as np
from rzen_embed_inference import RzenEmbed

def extract_frames(video_path, num_frames):
    cap = cv2.VideoCapture(video_path)
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    frame_indices = np.linspace(0, total_frames - 1, num_frames, dtype=int)
    frames = []
    for idx in frame_indices:
        cap.set(cv2.CAP_PROP_POS_FRAMES, idx)
        ret, frame = cap.read()
        if ret:
            frames.append(Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)))
        else:
            break
    cap.release()
    return frames

rzen = RzenEmbed("qihoo360/RzenEmbed")

queries = [
    "A traditional boat glides along a river lined with blooming cherry blossoms under an overcast sky in a modern cityscape.",
    "Tiny ginger kitten meows cutely by the water."
]

# Extract frames from videos
video_path_list = [
    "assets/example5.mp4",
    "assets/example6.mp4",
]
candidates = [extract_frames(video_path, num_frames=8) for video_path in video_path_list]

query_instruction = "Find the video snippet that corresponds to the given caption: "
candidate_instruction = "Understand the content of the provided video."

# Generate embeddings for video retrieval
query_embeds = rzen.get_fused_embeddings(instruction=query_instruction, texts=queries)
candidate_embeds = rzen.get_fused_embeddings(instruction=candidate_instruction, images=candidates)

# Calculate text-to-video similarity scores
similarity_scores = query_embeds @ candidate_embeds.T
print(similarity_scores)

Citation

If you find RzenEmbed useful for your research and applications, please cite using this BibTeX:

@article{jian2025rzenembed,
  title={RzenEmbed: Towards Comprehensive Multimodal Retrieval},
  author={Jian, Weijian and Zhang, Yajun and Liang, Dawei and Xie, Chunyu and He, Yixiao and Leng, Dawei and Yin, Yuhui},
  journal={arXiv preprint arXiv:2510.27350},
  year={2025}
}
qwen2_vl
safetensors

Contributors

BI
binwang777

2 commits

xiechunyu

2 commits