Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >immich机器学习基础和配置使用

immich机器学习基础和配置使用

作者头像
用户1160092
发布于 2024-12-05 06:02:24
发布于 2024-12-05 06:02:24
3.7K00
代码可运行
举报
文章被收录于专栏:MUM笔记MUM笔记
运行总次数:0
代码可运行

immich的机器学习基础

之前的一篇文字说了,如何私有化部署自己的私有相册, immich提供的照片相关的AI功能,如人脸检查,搜索等,参考告别付费会员,部署适合个人的相册库

这些功能是靠ghcr.io/immich-app/immich-machine-learning这个镜像提供的。这个镜像独立于主要的immich-server。镜像的主要主要为server端提供人工智能相关的接口。这个镜像可以独立部署,也可以集成部署,当然也可以选择不部署。这个根据自己机器的性能来看,如果只是照片备份或者简单的相册功能,可以不用,不过提供的AI功能是真的好用。担心机器性能的,官方推荐的2个核心, 4G内存是完全可以部署起来的。

实现这些智能功能的容器叫做immich-machine-learning, 机器学习。 这是人工智能领域的一个技术,即通过计算机程序的自我学习,实现像人一样,能够智能的完成一些工作或者判断一些事务。

比如,immich的一个功能,照片搜索,其实就是一个以文搜图的场景,这个在baidu等搜索引擎上很常见,但是要搬到你家的NAS或者软路由上,没有后台强大的服务器支持,需要怎么实现呢?

这里依靠一个叫模型的东西。这个大家可能听过:大模型,chatGPT等的关键技术也是这个。 正常我要识别一张照片是猫,而不是狗,可以通过观看他得外貌,耳朵、鼻子,体型等特征,基于我们得认知,得到结论。计算机也是一样,,对于一张猫得照片,不过它不知道什么鼻子嘴巴,它需要通过建立一个数学模型,集合大量得数据,经过一复杂的运算,得到一套标准(这就是所谓的训练):然后给定一张新得照片,符合这个标准得,就是猫(所谓得推理)。

模型就是把训练得结果保存起来,然后应用根据相应得接口要求去调用并返回,这样我们得设备或者程序就智能了。

当然是智能还是智障,和你的模型(标准)、机器资源(快慢)、输入(符合度)都有关。

模型:你选择了什么样的模型,就表明你具备了什么能力,是识图,还是识字得模型是不一样得。在识图一类得模型中,训练得越好得,精确度越高。

机器资源:就是你允许模型的地方,你如果内存、cpu这些都不够,你让他判断得时候,直接OOM了,那也是不行的。

输入:就是你让他判断得是什么,如果是一个识图得模型,你让让他写作,风马牛不相及,他肯定干不了。

开源社区,做好了很多的模型,大家可以直接用,具体可以到hugingface站点:https://huggingface.co/ 去查询和下载。这些模型用的过程中,也可以进行二次训练,这个站点也提供了训练的数据集。

私有部署immich遇到的问题

immich得机器学习中,用了2类模型:人脸识别模型,和搜索模型。

这两类模型其实很多,但是得让immich能够调用(即前面说得遵循得规则),所以immich得文档里面提了很多支持得模型。 具体选择什么样得模型,怎么配置,在immich的web端可以进行配置,参考这里:

可以设置是否启用,调用的接口是什么。下面可以对每一个功能设置相关的参数,比如用什么样的模型,具体检查的精确度等。

但是第一次部署完成之后,照片备份完成,按照页面设置,开启智能搜索, 模型按照默认的选择,发现搜索等功能都用不了。

查看immich-machine-learning得日志,发现很多这样的打印,都是下载失败:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[11/26/24 07:47:31] INFO Downloading detection model 'buffalo_l'. This may take a while. [11/26/24 07:47:32] WARNING Failed to load detection model 'buffalo_l'. Clearing cache. [11/26/24 07:47:32] WARNING Attempted to clear cache for model 'buffalo_l', but cache directory does not exist [11/26/24 07:47:32] WARNING Failed to load detection model 'buffalo_l'. Clearing cache. [11/26/24 07:47:32] WARNING Attempted to clear cache for model 'buffalo_l', but cache directory does not exist [11/26/24 07:47:33] INFO Downloading visual model 'ViT-B-32__openai'. This may take a while. [11/26/24 07:49:42] INFO Downloading detection model 'buffalo_l'. This may take a while. [11/26/24 07:49:42] WARNING Failed to load visual model 'ViT-B-32__openai'. Clearing cache. [11/26/24 07:49:42] WARNING Attempted to clear cache for model 'ViT-B-32__openai', but cache directory does not exist [11/26/24 07:51:54] INFO Downloading visual model 'ViT-B-32__openai'. This may take a while.

查看了下代码,官方站点提供的是通过huggingface的接口下载的,但是国内因为大家都知道的原因,下载肯定失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from huggingface_hub import snapshot_download
...

 def _download(self) -> None:
        ignore_patterns = [] if self.model_format == ModelFormat.ARMNN else ["*.armnn"]
        snapshot_download(
            f"immich-app/{clean_name(self.model_name)}",
            cache_dir=self.cache_dir,
            local_dir=self.cache_dir,
            ignore_patterns=ignore_patterns,
        )

不过hugeface,在国内有镜像站,HF-mirror : https://hf-mirror.com。这里尝试从国内镜像站下载了,手动传上去。

模型下载

在查阅资料的时候,了解到immich默认的搜索模型ViT-B-32__openai不支持中文,于是搜索的模型换成了XLM-Roberta-Large-Vit-B-16Plus。参考hf-mirror首页得如何使用,下载方式有很多。

这里我选择了git的方式直接全部拉下来。

模型记得选择immich-app这个拥者的。下载过程如下;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 确保安装了git和lfs,用如下命令验证是否安装了
git lfs install
# 如果没有安装

# 根据系统选择更新软件源,参考这里https://github.com/git-lfs/git-lfs/blob/main/INSTALLING.md
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
apt-get install git-lfs

# 安装完成之后直接下载对应得模型文件,XLM-Roberta-Large-Vit-B-16Plus和buffalo_l
git clone https://hf-mirror.com/immich-app/XLM-Roberta-Large-Vit-B-16Plus
git clone https://hf-mirror.com/immich-app/buffalo_l

修改安装docker-compose文件

默认得compose文件,模型并没有持久化保存,所以修改docker-compose文件中 immich_machine_learning得volume部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - /data/immich/modelcache:/cache   # 修改这里,根据个人情况,我这里是/data/immich/modelcache
    env_file:
      - immich.env
    restart: always
    healthcheck:
      disable: false

如果你的immich是部署在有GPU得机器上,可以选择开启GPU硬件加速,可以提高搜索、识别得速度。参考compose中注释掉得部分

然后将模型放到你得本地路径下,这里遇到了一个小坑:这个模型得目录结构。 最开始我是这样得结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
└── modelcache
    ├── buffalo_l
    └── XLM-Roberta-Large-Vit-B-16Plus

然后日志还是提示失败。查了下,好像也没找到相关资料,都是直接下载了放到对应目录下,不知道是不是版本更新了。然后我在下载得代码/usr/src/app/models/base.py里面加了一条log

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def download(self) -> None:
        if not self.cached:
            log.info(self.model_path)  # 增加得日志打印
            log.info(
                f"Downloading {self.model_type.replace('-', ' ')} model '{self.model_name}'. This may take a while."
            )
            self._download()

看到日志路径应该是这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[11/28/24 17:10:53] INFO     /cache/clip/XLM-Roberta-Large-Vit-B-16Plus/visual/model.onnx   
...
[11/28/24 20:29:14] INFO     /cache/facial-recognition/buffalo_l/detection/model.onnx  

原来在模型前面还有一个路径,分别是clip和facial-recognition,按照以上得路径,重新存放我们git拉下的目录,结构如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
├── modelcache
│   ├── clip
│   │ └── XLM-Roberta-Large-Vit-B-16Plus
│   └── facial-recognition
│       └── buffalo_l

然后在看容器的log,就没有发现错误了。

机器学习功能验证验证

到配置页面,修改搜索得模型为XLM-Roberta-Large-Vit-B-16Plus

修改之后,需要手动触发任务,更新数据

等待任务完成,我就可以快速得搜索了。速度算不上多快,属于能接受的范围,如果我机器配置高一点,应该会更快。

比如这里,我搜索关键字沙漠,就把几年前去沙漠得照片都搜索出来了

总结

之前一篇文章,immich作为自己私有得在线相册是非常方便得,今天配置完成了机器学习相关的内容,不管是web端,还是app端,都非常方便,都媲美商业软件了。关于immich的人工智能功能,说几点大家可能关心得吧:

  1. 资源占用问题。我限制了机器得配置2核心4G。 在日常过程中,资源基本是空闲得。包括搜索得时候,占用资源也很少。 只有在更换模型,触发后台任务更新得时候占用较高。此时得负载在200%左右。这个是完全能接受得,因为immich得这个任务更新不是一直都在运行,第一次批量上传完成之后运行即可。后面的任务都可以增量运行。
  2. 关于模型选择问题,官方提供的,毕竟不是适合中文的,前面说的地图也是这样。 所以这个需要自己去找到合适的模型。模型的名称里面体现了一些训练的参数等,比如这里两个模型用的_l16Plus,代表的含义是不一样,不同的模型,对资源占用,精确度等都不一样,有精力的可以看下模型的介绍自己验证下。
  3. 模型下载,不同的技术框架,得到的模型是不一样的。比如这里我们用到的是onnx,这个不是主要的,主要的是遵循相应的框架接口。下载的时候,不知道,可以像我这样,直接全部拉下来,路径匹配好就行。不用纠结这些文件我都不认识,我该下哪个。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MUM笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
群晖DS218+做maven私服(nexus3)
本人是个Java工程师,在家里撸代码时台式机、笔记本、虚拟机都可能用来编译构建maven项目,此时如果家里有个maven私服,对构建速度的提升效果是明显的;
程序员欣宸
2020/05/26
1.5K0
使用 Nexus3镜像搭设私有仓库(Bower 、Docker、Maven、npm、NuGet、Yum、PyPI)
 Nuget 是免费、开源的包管理工具,专注于在 .Net、.Net Core 平台应用开发过程中第三方组件库的管理,相对于传统单纯的 dll 引用要方便、科学得多。  其中 nuget.org 是最著名的 NuGet 公开库,但是企业内部开发的(业务)公共组件因为私密性或商业机密不能上传到公共库中,所以企业内部需要搭建一个私有的 NuGet 仓库【私服】来支持。虽然微软有提供的 NugetServer,但 NugetServer 用起来并不那么方便。  而且企业有可能不止使用 C# 一种语言,可能其他的语言组件也需要管理,比如:Java、Docker 镜像 等,NugetServer 就捉襟见肘,本文我给大家带来一款全能型的私服软件 Nexus。
心莱科技雪雁
2019/04/22
6.4K0
使用 Nexus3镜像搭设私有仓库(Bower 、Docker、Maven、npm、NuGet、Yum、PyPI)
Maven私服Nexus3.x环境构建操作记录
Maven介绍 Apache Maven是一个创新的软件项目管理和综合工具。 Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件。 Maven最强大的功能就是能够自动下载项目依赖库。 Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。 在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复
洗尽了浮华
2018/01/23
9.4K1
Maven私服Nexus3.x环境构建操作记录
使用Docker基于Nexus3快速搭建Maven私有仓库
启动容器并将宿主机/usr/local/nexus-data(目录需要提前创建)目录映射到容器/nexus-data目录,这样就可以保存容器产生的文件了,具体请百度查询docker相关信息。 安装完成。
吟风者
2019/11/22
4.7K3
Linux搭建Nexus3.X构建maven私服
如果Linux硬件配置比较低的话,建议修改为合适的大小,否则会出现运行崩溃的现象
后端码匠
2019/10/22
2.5K0
Nexus搭建Maven私有仓库
访问 http://192.168.2.132:8081 进入登录界面 使用默认管理员身份登录,帐号:admin,密码:上一步得到的密码
大忽悠爱学习
2022/08/23
1.3K0
Nexus搭建Maven私有仓库
本地私服仓库nexus3.3.1使用手册
私服架构 私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服
小柒2012
2018/04/16
8.6K0
本地私服仓库nexus3.3.1使用手册
Nexus3常用功能备忘
本文聚焦nexus3的使用,不在此讨论部署的细节,推荐使用docker来部署,我这里是在一台家用NAS上通过docker部署的,详情可参考《群晖DS218+做maven私服(nexus3)》
程序员欣宸
2020/05/26
1.4K0
【Maven】008-Maven 私服搭建与使用
Maven私服(Repository Manager)是一个用于管理和分发构建制品(如JAR、WAR、POM文件等)的服务器。它允许团队在本地搭建一个中央存储库,用于保存和分享项目构建所需的依赖项。一些常见的Maven私服产品包括 Nexus、Artifactory 和 Apache Archiva 。
訾博ZiBo
2025/01/06
4090
【Maven】008-Maven 私服搭建与使用
Maven使用教程二:nexus私服搭建及使用
1.打开命令行,切换到nexus-3.2.1-01/bin目录下,回车。例:C:\Nexus\nexus-3.2.1-01\bin 2.输入:nexus.exe/run,并回车 3.执行后出现以下信息表示安装成功:
一枝花算不算浪漫
2019/11/20
5.4K0
Maven 私服 Nexus3
采用一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。
BUG弄潮儿
2021/04/26
1K1
超简单部署使用Maven私库 Nexus
通过Log in登录,默认账户是admin,第一次密码是在admin.password文件中,登录后会要求你修改密码
全栈程序员站长
2022/09/09
1.3K0
Maven私服Nexus的搭建
Maven用户直接连接远程仓库下载构件的做法是Maven不建议使用的(尤其是对一个开发团队来说),Maven的最佳实践就是使用Maven私服来构建整个团队的项目部署和管理。私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
Criss@陈磊
2019/10/12
1.8K0
Nexus 私有制品库搭建
Nexus 是Maven 仓库管理器,管理开发所需要的构件。如果每次都是从 Apache 提供的 Maven中央仓库去下载所需要的构件,那么这通常不是一个好的做法。应该在本地架设一个Maven仓库服务器,再代理远程仓库的同时维护本地仓库,以节省带宽和时间,那么Nexus可以满足这样的需求。
BUG弄潮儿
2022/04/15
1.5K0
Nexus 私有制品库搭建
Docker安装Nexus3私服以及使用
nexus的全称是Nexus Repository Manager,是Sonatype公司的一个产品。它是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。
全栈程序员站长
2022/09/14
5K1
Docker安装Nexus3私服以及使用
Nexus3.x安装及配置
前置条件要求存在jdk1.8的环境 下载 这里之所以要特地提下下载是因为这个东西是真难下,我的电脑本身一直没有安装过专门的下载工具(度盘不算),一般下载都是走网盘或者浏览器直接下载,这次无论度盘的离线下载还是浏览器下载都非常慢甚至下载失败(100M光纤),在服务器上使用wget同样很慢,最后安装了迅雷使用迅雷下载后速度快很多,看来下载确实需要专业的下载工具,下载完成后上传到服务器上即可,当然也可以直接在服务器上使用wget下载,如果不嫌弃下载的慢的话: 官方下载页:https://ww
似水的流年
2018/06/13
7K0
Docker 方式安装、运行 Nexus3 、重置默认密码、推送 jar 包到私服
执行命令:mvn clean deploy -Dmaven.test.skip=true 推送 jar 到私服:
微风-- 轻许--
2019/08/01
3.3K0
使用 Docker 搭建私有软件仓库 Nexus 3
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
soulteary
2020/03/08
8730
使用 Docker 搭建私有软件仓库 Nexus 3
部署maven及Nexus私服
Maven是属于apache软件基金会下一个开源免费的项目,是跨平台的项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理,可以在代码进行部署的过程中自动解决项目中代码的依赖环境,需要从maven的镜像仓库中进行下载依赖环境,通常下载比较慢,企业中会在公司内部搭建nexus(私服),将构建项目中的依赖环境保存到nexus服务器中,提高访问速度。
小手冰凉
2020/05/06
3.2K0
Nexus简介及小白使用IDEA打包上传到Nexus3私服详细教程
开始在使用Maven时,总是会听到nexus这个词,一会儿maven,一会儿nexus,为什么它总是和maven一起被提到呢?
全栈程序员站长
2022/07/02
5.4K0
Nexus简介及小白使用IDEA打包上传到Nexus3私服详细教程
相关推荐
群晖DS218+做maven私服(nexus3)
更多 >
交个朋友
加入[跨境业务] 腾讯云官方方案交流站
共享跨境方案指南 洞察行业动向
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验