CenOS7部署YOLO11大模型实现图像识别功能
前段时间收到反馈说我们摄像头识别算法误判率有些高(就人形火焰识别等),所以就想有没有什么办法来降低这种误判,网上搜了一下相关资料就找到了这个方案,就是接入 YOLO11 大模型用来进一步进行图片识别,然后直接过滤掉误判的就可以了(以下教程是我在新服务器上二次安装整理的,已经把一些坑都排除了,确保可用!)
首先是 YOLO官网,里面有很多版本和详细的使用说明,我之所以选这个就是因为这个看起来比较好部署,对服务器/电脑要求没那么高,功能上也能满足我的需要(可以进行图片识别和自定义训练)

好了下面我们来进行安装
首先因为我手上只有 CentOS7 的服务器,而且没有带显卡,这个对大模型训练其实是很不友好的
如果不太确定是否有显卡可以先用下面命令确认一下是否有显卡
lspci | grep -i nvidia
可能会提示下面这个,就是没有 pciutils 工具
[root@ecm-74de data]# lspci | grep -i nvidia -bash: lspci: command not found
我们安装一下就可以
yum install -y pciutils
再次执行可以看到没有输出,因为我这个服务器就是不带显卡的
(base) [root@ecm-74de ~]# lspci | grep -i nvidia
(base) [root@ecm-74de ~]#
接下来我们需要安装基本环境,这个是基于 Python 的,然后要注意 CentOS7 实在太老了,只能用下面这个版本的,我已经试过了几个版本
# 安装 Python 管理工具
yum install -y wget git
# 安装 Miniconda(轻量版 Conda)
# 下载旧版本(兼容 CentOS 7)
wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh -O ~/miniconda.sh
# 静默安装到 ~/miniconda
bash ~/miniconda.sh -b -p ~/miniconda
# 把 conda 命令加入 PATH
echo 'export PATH=~/miniconda/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 测试
conda --version
which python
python --version
正常的能看到下面信息
[root@ecm-957e ~]# conda --version
conda 23.3.1
[root@ecm-957e ~]# which python
/root/miniconda/bin/python
[root@ecm-957e ~]# python --version
Python 3.8.16
创建 YOLO11 专用环境
conda create -n yolo11 python=3.8 -y
# 初始化
conda init bash
# 刷新一下
source ~/.bashrc
# 上面的执行完成后激活环境
conda activate yolo11
看到下面的就是成功了,主要看最后一行 (yolo11) [root@ecm-957e ~]#
下面命令都需要在 (yolo11) 环境下执行的,后面如果退出去了需要重新进入直接执行 conda activate yolo11 就可以了
[root@ecm-957e ~]# conda init bash
no change /root/miniconda/condabin/conda
no change /root/miniconda/bin/conda
no change /root/miniconda/bin/conda-env
no change /root/miniconda/bin/activate
no change /root/miniconda/bin/deactivate
no change /root/miniconda/etc/profile.d/conda.sh
no change /root/miniconda/etc/fish/conf.d/conda.fish
no change /root/miniconda/shell/condabin/Conda.psm1
no change /root/miniconda/shell/condabin/conda-hook.ps1
no change /root/miniconda/lib/python3.8/site-packages/xontrib/conda.xsh
no change /root/miniconda/etc/profile.d/conda.csh
modified /root/.bashrc
==> For changes to take effect, close and re-open your current shell. <==
[root@ecm-957e ~]# source ~/.bashrc
(base) [root@ecm-957e ~]# conda activate yolo11
(yolo11) [root@ecm-957e ~]#
安装 YOLO11 依赖(CPU 版本)
pip install --upgrade pip
有个警告不管它
(yolo11) [root@ecm-957e ~]# pip install --upgrade pip
Requirement already satisfied: pip in ./miniconda/envs/yolo11/lib/python3.8/site-packages (24.2)
Collecting pip
Downloading pip-25.0.1-py3-none-any.whl.metadata (3.7 kB)
Downloading pip-25.0.1-py3-none-any.whl (1.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 9.7 MB/s eta 0:00:00
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 24.2
Uninstalling pip-24.2:
Successfully uninstalled pip-24.2
Successfully installed pip-25.0.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
继续安装下一个依赖,这个有些久要等等
pip install ultralytics opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
安装 libGL ,CentOS 7 最小化系统默认不带 OpenGL 运行库,而 OpenCV 在 import 时必须加载 libGL
yum install -y mesa-libGL
安装完验证一下是否成功
yolo version
下面这样的就是成功了,可以看到第一次有个警告,我也不知道为啥,但是再执行就没有了,所以不管它
(yolo11) [root@ecm-957e ~]# yolo version
WARNING ⚠️ user config directory '/root/.config/Ultralytics' is not writable, using '/tmp/Ultralytics'. Set YOLO_CONFIG_DIR to override.
Creating new Ultralytics Settings v0.0.6 file ✅
View Ultralytics Settings with 'yolo settings' or at '/tmp/Ultralytics/settings.json'
Update Settings with 'yolo settings key=value', i.e. 'yolo settings runs_dir=path/to/dir'. For help see https://docs.ultralytics.com/quickstart/#ultralytics-settings.
8.3.243
(yolo11) [root@ecm-957e ~]# yolo version
8.3.243
接着我们再去下载一个官方已经训练好的权重文件,国内可能下载不成功,我这边有下载好的 yolo11n.pt(不知道为啥上传后选不了发布形式,默认就是VIP的)
# 也可以直接浏览器访问 https://huggingface.co/Ultralytics/YOLO11/resolve/main/yolo11n.pt
wget https://huggingface.co/Ultralytics/YOLO11/resolve/main/yolo11n.pt
我们创建一个文件目录,里面放一些图片,这个官方的权重文件好像主要是识别人、车、箱子之类的东西,需要检测其它的东西可能需要我们自己再训练,怎么训练这个后面再讲,你也可以先去官方文档看看,就是下载一个工具然后标记图片画框,然后让大模型跑一下
# 创建目录,在里面放一些图片
mkdir images
再创建一个脚本用来处理执行
touch yolo_test.py
注意里面的路径换成自己的文件路径
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from ultralytics import YOLO
import os
# --------------------------
# 配置参数
# --------------------------
model_path = "/data/yolo11n.pt" # 模型文件路径
input_dir = "/data/images/" # 测试图片目录
# --------------------------
# 加载模型
# --------------------------
model = YOLO(model_path)
# --------------------------
# 扫描图片并检测
# --------------------------
for img_name in os.listdir(input_dir):
img_path = os.path.join(input_dir, img_name)
if not os.path.isfile(img_path):
continue
# 模型预测
results = model.predict(source=img_path, device="cpu", save=False)
# 获取检测类别
detected_classes = []
for box in results[0].boxes:
cls_idx = int(box.cls)
cls_name = results[0].names[cls_idx]
detected_classes.append(cls_name)
# 判定结果输出
if detected_classes:
print(f"[✅] 图片: {img_name}, 检测到: {detected_classes}")
else:
print(f"[❌] 图片: {img_name}, 未检测到目标")
执行一下
python ./yolo_test.py
可以看到下面的内容
(yolo11) [root@ecm-957e data]# python ./yolo_test.py
image 1/1 /data/images/941dd00883cef10d4478d2fb8d2f8cd2.jpeg: 640x480 (no detections), 265.0ms
Speed: 4.4ms preprocess, 265.0ms inference, 0.9ms postprocess per image at shape (1, 3, 640, 480)
[❌] 图片: 941dd00883cef10d4478d2fb8d2f8cd2.jpeg, 未检测到目标
image 1/1 /data/images/9dbdf4cda1514043a97699a5e06827d3_2.jpg: 384x640 1 car, 1 suitcase, 130.6ms
Speed: 18.0ms preprocess, 130.6ms inference, 1.0ms postprocess per image at shape (1, 3, 384, 640)
[✅] 图片: 9dbdf4cda1514043a97699a5e06827d3_2.jpg, 检测到: ['suitcase', 'car']
image 1/1 /data/images/ed89d655f272fca92edad7480c9ae40f.jpeg: 640x448 (no detections), 71.5ms
Speed: 1.6ms preprocess, 71.5ms inference, 0.5ms postprocess per image at shape (1, 3, 640, 448)
[❌] 图片: ed89d655f272fca92edad7480c9ae40f.jpeg, 未检测到目标
image 1/1 /data/images/ef3d14bdfd9247be9e2bd1ff14239c7b_0.jpg: 384x640 1 person, 39.4ms
Speed: 3.7ms preprocess, 39.4ms inference, 0.7ms postprocess per image at shape (1, 3, 384, 640)
[✅] 图片: ef3d14bdfd9247be9e2bd1ff14239c7b_0.jpg, 检测到: ['person']
image 1/1 /data/images/e118ca3c999b4f0a8463f5889332e98b_1.jpg: 384x640 2 persons, 2 suitcases, 2 bottles, 142.1ms
Speed: 1.7ms preprocess, 142.1ms inference, 0.8ms postprocess per image at shape (1, 3, 384, 640)
[✅] 图片: e118ca3c999b4f0a8463f5889332e98b_1.jpg, 检测到: ['bottle', 'person', 'bottle', 'suitcase', 'suitcase', 'person']
image 1/1 /data/images/8b10bb52bb434c40b6d72a9ec799af86_1.jpg: 384x640 7 suitcases, 33.9ms
Speed: 1.5ms preprocess, 33.9ms inference, 0.7ms postprocess per image at shape (1, 3, 384, 640)
[✅] 图片: 8b10bb52bb434c40b6d72a9ec799af86_1.jpg, 检测到: ['suitcase', 'suitcase', 'suitcase', 'suitcase', 'suitcase', 'suitcase', 'suitcase']
image 1/1 /data/images/9dbdf4cda1514043a97699a5e06827d3_1.jpg: 384x640 (no detections), 33.4ms
Speed: 1.5ms preprocess, 33.4ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640)
[❌] 图片: 9dbdf4cda1514043a97699a5e06827d3_1.jpg, 未检测到目标
image 1/1 /data/images/76f1752b8593431caeed9f4f74521f44_0.jpg: 384x640 1 person, 33.4ms
Speed: 1.5ms preprocess, 33.4ms inference, 0.7ms postprocess per image at shape (1, 3, 384, 640)
[✅] 图片: 76f1752b8593431caeed9f4f74521f44_0.jpg, 检测到: ['person']
image 1/1 /data/images/0d842ec6242060a8cbfa30ce5e2a34aa.jpeg: 640x448 2 persons, 1 car, 1 truck, 44.4ms
Speed: 1.9ms preprocess, 44.4ms inference, 0.8ms postprocess per image at shape (1, 3, 640, 448)
[✅] 图片: 0d842ec6242060a8cbfa30ce5e2a34aa.jpeg, 检测到: ['person', 'person', 'car', 'truck']
根据这个识别结果大家也看出来了,有的图片显示未检测到目标,这是因为有些图片真的啥都没有,还有一些就是这个模型没有训练到的物体就识别不了,我们可以去官网找下我们需要的训练好的模型也可以自己训练
最后就是怎么用这个的问题,这里只说思路,因为也不是很难
1.使用 Python 服务:用 Python 写一个小服务(REST API 或 gRPC),负责接收图片 → 调用 YOLO 模型 → 返回检测结果
2.PyTorch → ONNX → Java:把 YOLO 模型导出成 ONNX,在 Java 使用 ONNX Runtime
3.使用 Deep Java Library (DJL)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)