菜单

机器学习组件

相关源文件

概述

机器学习(ML)组件是 Immich 架构中的一个独立服务,负责对媒体资产执行各种基于 AI 的分析。它提供包括人脸识别、对象检测、智能搜索和反向地理编码在内的功能,通过使照片和视频更易于搜索和发现来增强用户体验。

该服务使用 Python 和 FastAPI 构建,并支持多种硬件加速选项,以在不同的部署环境中实现最佳性能。

来源

架构与集成

机器学习组件作为一个独立的微服务运行,通过 HTTP API 调用与 Immich 主服务器通信。它异步处理任务,使主服务器能够继续处理用户请求,同时在后台执行密集的机器学习操作。

当新的媒体资产上传到 Immich 时,它们首先会进行基本元数据提取。然后,服务器通过 BullMQ 作业队列排队 ML 处理作业。机器学习组件接收这些作业,处理资产,并将结果返回给服务器,服务器随后将结果存储在 PostgreSQL 数据库中(向量数据使用 pgvecto.rs 存储)。

来源

ML 功能

面部识别

人脸识别系统自动检测照片中的人脸,并将其分组为独特的身份。这使用户能够按人物浏览照片,并在其整个媒体库中找到特定的人。

  1. 人脸检测 - 识别图像中人脸出现的位置
  2. 人脸嵌入 - 生成每个人脸的数值表示
  3. 人脸聚类 - 将相似的人脸分组
  4. 用户分配 - 允许用户命名检测到的人

该系统使用 InsightFace 库进行高精度人脸识别。

目标检测

对象检测识别照片中的常见对象和场景,无需手动标记即可实现基于内容的搜索。用户可以搜索诸如“海滩”、“山脉”、“狗”等内容,并找到相关的图像。

智能搜索 (CLIP)

CLIP(对比语言-图像预训练)模型支持基于自然语言的图像搜索。它创建图像的向量嵌入,可以通过文本描述进行查询,从而实现比标签或关键字更灵活、更直观的搜索功能。

反向地理编码

反向地理编码通过将原始 GPS 坐标转换为有意义的位置名称(如城市、国家和兴趣点)来丰富照片的位置数据。

来源

处理流程

来源

硬件加速选项

ML 组件支持多种硬件加速选项,以优化在不同平台上的性能

加速选项目标硬件描述
CPU通用 x86/ARM 处理器默认选项,适用于所有系统
CUDANVIDIA GPU适用于配备 NVIDIA 显卡的系统
OpenVINO英特尔 CPU/GPU/VPU适用于英特尔硬件(CPU、集成显卡、神经计算棒)
ROCmAMD GPU适用于配备 AMD 显卡的系统
ArmNNARM 处理器针对基于 ARM 的设备进行优化
RKNN瑞芯微处理器适用于基于瑞芯微的设备

这些选项在容器部署期间进行配置,允许用户选择最符合其硬件的选项。

来源

配置

ML 组件通过环境变量进行配置

可变描述默认
IMMICH_ML_DEVICE硬件加速设备 (cpu, cuda, openvino, rocm, armnn, rknn)cpu
IMMICH_ML_CLIP_MODEL用于智能搜索的 CLIP 模型ViT-B-32::openai
IMMICH_ML_FACE_RECOG_MODEL人脸识别模型buffalo_l
IMMICH_ML_WORKER_COUNT工作进程数量根据 CPU 核心数自动检测
IMMICH_ML_CACHE_FOLDER缓存已下载模型的文件夹/cache

特定的硬件加速选项可能具有额外的配置变量。例如,OpenVINO 支持可指定不同的设备(CPU、GPU、VPU)。

来源

实现细节

模型管理

ML 组件使用模型管理器按需下载、缓存和加载 ML 模型。模型从 Hugging Face 模型中心下载并本地缓存,以便更快地访问。

API 端点

ML 服务公开了几个 RESTful API 端点,主 Immich 服务器可以调用这些端点

性能考量

  • ML 组件设计为运行多个工作进程以并行处理资产
  • 模型加载经过优化以最大程度减少内存使用
  • 向量操作在可用时使用硬件加速
  • 模型推理在可能的情况下进行批处理以提高吞吐量

来源

部署图

来源

依赖项

ML 组件依赖于多个 Python 库

  • fastapi: API 的 Web 框架
  • huggingface-hub: 用于访问 ML 模型
  • insightface: 人脸识别与分析
  • opencv-python-headless: 图像处理
  • pillow: 图像处理
  • tokenizers: 用于 CLIP 的文本分词
  • onnxruntime: ML 模型推理(支持各种特定硬件变体)

来源

结论

机器学习组件是 Immich 的关键组成部分,可实现高级搜索和发现功能。它旨在灵活且高性能,支持各种硬件加速选项以适应不同的部署环境。该组件与主服务器异步工作,提供 AI 驱动的功能,而不会影响用户界面的响应能力。