ONNX 模型库
返回模型

说明文档

房间图像相似度模型

用于测量客房图像相似度的 Siamese 网络模型。

模型概述

该模型用于测量住宿客房图像之间的相似度,以识别相同的物理客房。使用基于 EfficientNetV2 的 Siamese 网络来计算图像相似度。

模型信息

  • 模型名称: similarity_model_0.6
  • 基础模型: timm/tf_efficientnetv2_s
  • 图像大小: 224x224
  • 通道: RGB (3通道)
  • 归一化: ImageNet 标准 (mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

使用方法

使用 Python 调用模型

import torch
import onnxruntime as ort
import numpy as np
from PIL import Image
from torchvision import transforms

# 加载 PyTorch 模型
model = torch.load('similarity_model_0.6.pth', map_location='cpu')
model.eval()

# 使用 ONNX 模型 (更快的推理)
onnx_session = ort.InferenceSession('similarity_model_0.6.onnx')

# 图像预处理
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

def calculate_similarity_pytorch(img1_path, img2_path):
    \"\"\"使用 PyTorch 模型计算相似度\"\"\"
    img1 = transform(Image.open(img1_path)).unsqueeze(0)
    img2 = transform(Image.open(img2_path)).unsqueeze(0)
    
    with torch.no_grad():
        similarity = torch.sigmoid(model(img1, img2))
    
    return similarity.item()

def calculate_similarity_onnx(img1_path, img2_path):
    \"\"\"使用 ONNX 模型计算相似度 (推荐)\"\"\"
    img1 = transform(Image.open(img1_path)).numpy()
    img2 = transform(Image.open(img2_path)).numpy()
    
    # ONNX 模型推理
    input_feed = {
        'input1': img1.astype(np.float32),
        'input2': img2.astype(np.float32)
    }
    
    similarity = onnx_session.run(None, input_feed)[0]
    return similarity[0][0]

# 示例使用
similarity_score = calculate_similarity_onnx(\"room1.jpg\", \"room2.jpg\")
print(f\"相似度: {similarity_score:.4f}\")

批量处理

def calculate_batch_similarity(image_pairs):
    \"\"\"一次性计算多对图像的相似度\"\"\"
    similarities = []
    
    for img1_path, img2_path in image_pairs:
        similarity = calculate_similarity_onnx(img1_path, img2_path)
        similarities.append(similarity)
    
    return similarities

# 示例
image_pairs = [
    (\"room1.jpg\", \"room2.jpg\"),
    (\"room3.jpg\", \"room4.jpg\"),
    (\"room5.jpg\", \"room6.jpg\")
]

similarities = calculate_batch_similarity(image_pairs)
for i, sim in enumerate(similarities):
    print(f\"第 {i+1} 对相似度: {sim:.4f}\")

模型文件

  • similarity_model_0.6.pth: PyTorch 模型文件
  • similarity_model_0.6.onnx: ONNX 模型文件 (推理优化)
  • similarity_model_0.6_model_info.json: 模型元数据
  • similarity_model_0.6_inference_example.py: 推理示例代码

性能

  • 准确率: 90% 以上
  • F1 Score: 0.90 以上
  • 处理速度: 500 图像对/秒以上 (基于 ONNX 模型)
  • 内存使用: 2GB 以下 (GPU 推理时)

训练数据

该模型使用以下数据进行训练:

预训练 (Pretraining)

  • 正样本对: 原始图像与增强后的图像 (同一客房)
  • 负样本对: 不同客房的图像

微调 (Fine-tuning)

  • 正样本对: 同一客房的不同图像
  • 负样本对: 不同客房的图像

模型架构

  • 骨干网络: EfficientNetV2-Small
  • Siamese 结构: 使用相同的骨干网络处理两张图像
  • 损失函数: Focal Loss (针对不平衡数据集优化)
  • 输出: 0-1 之间的相似度分数

预处理要求

  1. 图像大小: 224x224 像素
  2. 颜色空间: RGB
  3. 归一化: 使用 ImageNet 标准值
  4. 裁剪: 中心裁剪 (center crop)
  5. 支持格式: JPG, PNG, JPEG

许可证

Apache 2.0 License

参考

该模型是 Room Clusterer 项目的一部分。更多信息请参考 项目仓库

使用案例

直接使用

该模型可直接用于以下用途:

  • 客房图像去重: 识别同一客房不同角度/光照的图像
  • 住宿图像聚类: 按相似客房类型对图像进行分组
  • 图像相似度搜索: 查找与给定图像最相似的图像
  • 质量管理: 验证客房图像的一致性

下游使用

可以基于该模型构建以下应用:

  • 住宿管理系统: 客房图像自动分类与管理
  • 旅游平台: 基于客房图像的推荐系统
  • 房地产平台: 搜索相似的客房风格
  • 图像数据库: 大规模图像相似度搜索引擎

使用范围限制

该模型不适用于以下用途:

  • 其他领域图像: 测量非客房类型图像的相似度
  • 实时视频: 测量视频帧之间的相似度
  • 3D 空间分析: 利用空间关系或深度信息

偏差、风险和限制

已知限制

  1. 图像质量依赖: 低质量或噪声较多的图像可能导致性能下降
  2. 光照条件: 比较不同光照条件的图像时准确率可能降低
  3. 角度变化: 即使是同一客房,拍摄角度差异较大时相似度可能被测得较低
  4. 领域专用: 该模型专门针对住宿客房图像,在其他领域性能有限

建议

  • 图像预处理: 对图像进行一致的尺寸和质量预处理
  • 阈值设置: 根据用途设置适当的相似度阈值 (通常为 0.7-0.8)
  • 批量处理: 处理大量图像时建议使用 ONNX 模型

开始使用模型

请参考上方"使用方法"部分的代码示例开始使用该模型。

训练细节

训练数据

  • 数据集大小: 约 50,000 张客房图像
  • 图像对: 200,000 对正样本对, 200,000 对负样本对
  • 数据增强: 通过旋转、裁剪、颜色调整等进行数据增强
  • 标注: 基于客房 ID 的自动标注

训练流程

预处理

  1. 图像大小调整: 调整为 224x224 像素
  2. 中心裁剪: 按正方形比例进行中心裁剪
  3. 归一化: 使用 ImageNet 标准值进行归一化
  4. 数据增强: 训练过程中应用随机变换

训练超参数

  • 批次大小: 64
  • 学习率: 1e-4 (预训练), 5e-5 (微调)
  • 轮数: 30 (预训练), 15 (微调)
  • 优化器: AdamW
  • 调度器: Cosine Annealing
  • 正则化: Dropout (0.1), Weight Decay (1e-4)

速度、大小和时间

  • 训练时间: 约 8 小时 (基于 RTX 3080)
  • 模型大小: 25MB (PyTorch), 12MB (ONNX)
  • 推理速度: 500 对/秒 (ONNX, CPU), 2000 对/秒 (ONNX, GPU)

评估

测试数据、因素和指标

测试数据

  • 验证集: 10,000 对图像
  • 测试集: 5,000 对图像
  • 数据划分: 按客房 ID 划分以防止数据泄露

因素

  • 客房类型: 各类客房类型的性能分析
  • 图像质量: 高清/低清图像的性能对比
  • 光照条件: 自然光/人工光条件下的性能

指标

  • 准确率: 所有预测中正确预测的比例
  • 精确率: 预测为相似的样本中实际相似的比例
  • 召回率: 实际相似的样本中被正确预测的比例
  • F1-Score (F1分数): 精确率和召回率的调和平均值
  • AUC-ROC: ROC 曲线下面积

结果

摘要

  • 整体准确率: 92.3%
  • F1-Score: 0.91
  • AUC-ROC: 0.95
  • 推理速度: 500 对/秒 (ONNX, CPU)

模型检查

可解释性

  • Grad-CAM: 可视化模型关注的图像区域
  • 相似度分布: 分析正/负样本对的相似度分数分布
  • 错误分类分析: 分析被错误分类案例的模式

技术规格

模型架构和目的

  • 架构: Siamese Network with EfficientNetV2-Small backbone
  • 目的: 测量图像对的相似度
  • 输出: 0-1 之间的相似度分数
  • 损失函数: Focal Loss (α=0.25, γ=2.0)

计算基础设施

硬件

  • GPU: NVIDIA RTX 3080 (10GB VRAM)
  • CPU: Intel i7-10700K
  • RAM: 32GB DDR4
  • 存储: 1TB NVMe SSD

软件

  • Python: 3.9
  • PyTorch: 1.12.0
  • ONNX Runtime: 1.12.0
  • CUDA: 11.6
  • 其他: timm, torchvision, PIL

引用

如果您使用该模型,请按以下格式引用:

BibTeX:

@misc{room_image_similarity_model,
  title={Room Image Similarity Model: Siamese Network for Hotel Room Image Comparison},
  author={Your Name},
  year={2024},
  howpublished={Hugging Face Model Hub},
  url={https://huggingface.co/ondame/room-image-similarity}
}

APA:

Your Name. (2024). Room Image Similarity Model: Siamese Network for Hotel Room Image Comparison. Hugging Face Model Hub. https://huggingface.co/your-username/room-image-similarity

术语表

  • Siamese Network (孪生网络): 使用相同网络处理两个输入以计算相似度的神经网络结构
  • EfficientNetV2: 用于高效图像分类的 CNN 架构
  • Focal Loss: 针对不平衡数据集优化的损失函数
  • ImageNet 归一化: 使用 ImageNet 数据集的均值和标准差进行图像归一化

更多信息

ondame/room-image-similarity

作者 ondame

image-feature-extraction transformers
↓ 0 ♥ 0

创建时间: 2025-09-26 06:49:03+00:00

更新时间: 2025-11-18 03:48:58+00:00

在 Hugging Face 上查看

文件 (8)

.gitattributes
README.md
encoder.onnx ONNX
head.onnx ONNX
inference_example.py
model.onnx ONNX
model.pth
model_info.json