前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >immich机器学习基础和配置使用

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

作者头像
用户1160092
发布2024-12-05 14:02:24
发布2024-12-05 14:02:24
4870
举报
文章被收录于专栏:MUM笔记

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
复制
[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
复制
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
复制
# 确保安装了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
复制
 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
复制
.
└── modelcache
    ├── buffalo_l
    └── XLM-Roberta-Large-Vit-B-16Plus

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

代码语言:javascript
复制
    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
复制
[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
复制
├── 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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • immich的机器学习基础
  • 私有部署immich遇到的问题
  • 模型下载
  • 修改安装docker-compose文件
  • 机器学习功能验证验证
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档