Linux下运行目标检测yolo26步骤(包含环境配置+模型运行)

q 话不多说直接上步骤;最终目的就是在全新的电脑上安装和使用Pytorch ,在GPU上训练YOLO26

1.确保安装NVIDIA 驱动 < nvidia-smi >

   如果知道显卡类型(RTX 5090 )下载 NVIDIA 官方驱动 | NVIDIA 官网直接下载驱动  

   若不清楚,运行以下命令查看显卡类型 

lspci | grep -i nvidia

输出如下内容,其中 Device  2b87 代表设备号 

01:00.0 VGA compatible controller: NVIDIA Corporation Device 2b87 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 22e8 (rev a1)

安装成功后 执行

nvidia-smi

 查看驱动版本,得到CUDA Version ,在下一步有用。

2. 安装CUDA Toolkit  < nvcc -V >

    CUDA是NVIDIA开发的并行计算平台。

    已知 CUDA Version ,cuda toolkit 需要小于或等于此版本 ,通过官方地址进行下载安装配置环境变量 。    

 参考     Linux下安装cuda和对应版本的cudnn 

  官网 CUDA Toolkit 13.1 Update 1 Downloads | NVIDIA Developer

  通过 nvcc --version  或者  nvcc -V 验证是否成功

3. 安装cuDNN

    cuDNN是深度学习优化的库,选择合适的版本且与CUDA版本适配,官网下载

     参考     Linux下安装cuda和对应版本的cudnn 

Support Matrix — NVIDIA cuDNN Backend

   cuDNN 9.19.1 Downloads | NVIDIA Developer

法一:手动安装,下载合适的版本包

  解压缩,将cudnn内相应文件复制到cuda的安装路径,并修改权限。

  cudnn-linux-x86_64-9.19.1.2_cuda13-archive/为解压缩后的文件路径

  /usr/local/cuda/为cuda的安装路径,按照自己的实际情况替换

 tar -xvf cudnn-linux-x86_64-9.19.1.2_cuda13-archive.tar.xz cd cudnn-linux-x86_64-9.19.1.2_cuda13-archive/ sudo cp ./include/cudnn* /usr/local/cuda/include sudo cp ./lib/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn* /usr/local/cuda/lib64/libcudnn* 
# 验证 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 # 若没有输出执行下面这个 cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

法二:根据apt-get 命令自动安装

  根据cuda12 /13 选择不同的安装命令

cat /usr/include/x86_64-linux-gnu/cudnn_version.h | grep CUDNN_MAJOR -A 2 输出 #define CUDNN_MAJOR 9 # 主版本号:9 #define CUDNN_MINOR 6 # 次版本号:6 #define CUDNN_PATCHLEVEL 0 # 补丁级别:0

后续也可通过pytorch验证

4. 安装conda 选择miniforge < conda --version >

   参考 在ubuntu中安装miniforge并配置-ZEEKLOG博客

      Miniforge:Anaconda 的理想替代品-ZEEKLOG博客 

   验证是否成功 并创建环境

source ~/.bashrc conda --version 创建环境,可指定python版本 conda create -n yolo26 python=3.12 为了后续安装速度快 添加清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes

5.在新建conda环境中安装pytorch

   激活conda 环境: conda activate  yolo26 

    根据cuda toolkit 版本选择合适的pytorch版本

    Get Started

    如果没有开代理,安装可能会很慢,可以将 --index-url 换成清华源

--index-url https://mirrors.tuna.tsinghua.edu.cn/pytorch-wheels/cu128

  在终端输入python ,执行以下代码进行验证

import torch print("PyTorch 版本:", torch.__version__) print("CUDA 是否可用:", torch.cuda.is_available()) print("CUDA 版本:", torch.version.cuda) print("GPU 数量:", torch.cuda.device_count()) print("cuDNN 是否可用:", torch.backends.cudnn.enabled) print("cuDNN 版本:", torch.backends.cudnn.version())

6. 下载YOLO26 并配置环境运行

  ultralytics/ultralytics: Ultralytics YOLO 🚀

   6.1 安装 ultralytics

    可加后缀使用清华源

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple 

  其他库函数,后续执行的时候缺少哪些就pip install  安装。

   6.2 下载yolo26n.pt

    6.3 预测测试

     使用yolo26官方模型进行预测进行测试。

     在主文件下创建 predict.py ,修改source图片路径,并执行 python  predict.py                  

from ultralytics import YOLO import warnings warnings.filterwarnings('ignore') if __name__ == "__main__": mode = YOLO("./yolo26n.pt") results = mode.predict( source='../../test_data/test.jpg', imgsz=640, # stream=True, project='runs/predict', name='yolo26n', save=True, conf=0.5, # visualize=True # visualize model features maps )

    可在 runs/predict/yolo26n/ 查看输出结果

 6.4 训练自己的数据集

  1 准备好数据集文件,按照这样的格式放置

 2 编辑dataset.yaml  修改为 rtts.yaml文件 ,并放置在  /ultralytics/ultralytics/cfg/datasets 下

 path: ./datasets/RTTS/ train: ./datasets/RTTS/images/train val: ./datasets/RTTS/images/val test: ./datasets/RTTS/images/test names: 0: person 1: car 2: biycycle 3: motorbike 4: bus nc: 5

     3  在主文件下创建 train.py ,根据自己的路径设定,并执行 python  train.py     

import sys sys.path.append(".") from ultralytics import YOLO import warnings warnings.filterwarnings("ignore") modle = YOLO("ultralytics/cfg/models/26/yolo26n.yaml") if __name__ == "__main__": modle.train(data="ultralytics/cfg/datasets/rtts.yaml", epochs=200, batch=32, imgsz=640, device='0', workers=8, project='train', name='exp', ) 

 可在runs/detect/train/exp 下查看训练输出;如果无法运行缺少函数库 执行 pip install 进行安装。

    4   为了验证测试集精度,在主文件下创建 val.py ,根据自己的路径设定,并执行 python  val.py 

from ultralytics import YOLO import warnings warnings.filterwarnings("ignore") if __name__ == "__main__": mode = YOLO("./runs/train/exp/weights/best.pt") mode.val( data = "ultralytics/cfg/datasets/rtts.yaml", split = 'test', batch = 32, imgsz = 640, device = '0', workers = 8, project = 'runs/test', name = 'exp' )

  6.5 导出onnx

       在主文件下创建 export.py ,根据自己的路径设定,并执行 python  export.py   

       可通过predict 进行onnx模型预测。

import sys sys.path.insert(0, '.') from ultralytics import YOLO import warnings warnings.filterwarnings("ignore") if __name__ == "__main__": mode = YOLO("./runs/train/exp/weights/best.pt") mode.export( format = "onnx", simplify = True, # opset = None, )

 6.6 onnx 推理

import cv2 import onnxruntime as ort from PIL import Image import numpy as np import random confidence_thres = 0.5 classes = ['person', 'car', 'biycycle', 'motorbike', 'bus'] providers = [ ('CUDAExecutionProvider', { 'device_id': 0, # 可以选择GPU设备ID,如果你有多个GPU }), 'CPUExecutionProvider', # 也可以设置CPU作为备选 ] # 图像前处理 def preprocess(img, input_width, input_height): """ 在执行推理之前预处理输入图像。 返回: image_data: 为推理准备好的预处理后的图像数据。 """ img_height, img_width = img.shape[:2] img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.resize(img, (input_width, input_height)) # (640,640) image_data = np.array(img) / 255.0 image_data = np.transpose(image_data, (2, 0, 1)) image_data = np.expand_dims(image_data, axis=0).astype(np.float32) return image_data, img_height, img_width def postprocess(un_output, input_width, input_height, img_width, img_height): """ 对模型输出进行后处理,提取过滤后的边界框、得分和类别ID。 参数: un_output (numpy.ndarray): 模型的输出。 onnx的输出为 1x300x6 input_width (int): 模型输入宽度。 input_height (int): 模型输入高度。 img_width (int): 原始图像宽度。 img_height (int): 原始图像高度。 返回: boxes,scores,labels [] [] [] """ # 计算边界框坐标的缩放因子 x_factor = img_width / input_width y_factor = img_height / input_height print(f"img_width :{img_width},x_factor:{x_factor},y_factor:{y_factor}") un_outputs = np.squeeze(un_output[0]) #300*6 [ x1 y1 x2 y2 nc_id conf ] boxes, scores, class_ids = [], [], [] for det in un_outputs: x1, y1, x2, y2, conf,class_id, = det if conf >= confidence_thres: boxes.append([ int(x1 * x_factor), int(y1 * y_factor), int(x2 * x_factor), int(y2 * y_factor) ]) scores.append(conf) class_ids.append(int(class_id)) labels = [classes[cid] for cid in class_ids] if classes is not None else [str(cid) for cid in class_ids] return boxes, scores, labels def init_detect_model(model_path): session = ort.InferenceSession(model_path, providers=providers) model_inputs = session.get_inputs() input_shape = model_inputs[0].shape input_width = input_shape[2] input_height = input_shape[3] return session, model_inputs, input_width, input_height def detect_object(image, un_session, model_inputs, input_width, input_height): if isinstance(image, Image.Image): result_image = np.array(image) else: result_image = image img_data, img_height, img_width = preprocess(result_image, input_width, input_height) un_outputs = un_session.run(None, {model_inputs[0].name: img_data}) box,score,label = postprocess(result_image, un_outputs, input_width, input_height, img_width, img_height) return box,score,label def draw_boxes(image, boxes, scores, labels, use_random_colors=True): for (x1, y1, x2, y2), score, label in zip(boxes, scores, labels): color = ( random.randint(50, 255), random.randint(50, 255), random.randint(50, 255), ) if use_random_colors else (0, 255, 0) cv2.rectangle(image, (x1, y1), (x2, y2), color, 2) text = f"{label} {score:.2f}" (text_width, text_height), _ = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 0.6, 1) overlay = image.copy() cv2.rectangle(overlay, (x1, y1 - text_height - 5), (x1 + text_width, y1), color, -1) image = cv2.addWeighted(overlay, 0.6, image, 0.4, 0) cv2.putText(image, text, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 1, cv2.LINE_AA) return image if __name__ == '__main__': un_model_path = "./runs/detect/train/exp/weights/best.onnx" print(f"un_model_path:{un_model_path}") un_session, model_inputs, input_width, input_height = init_detect_model(un_model_path) # 读取图像文件 image_data = cv2.imread("../../test_data/g1.jpg") boxes,scores,labels= detect_object(image_data,un_session, model_inputs, input_width, input_height) # print(boxes,scores,labels) result = draw_boxes(image_data.copy(), boxes, scores, labels, use_random_colors=True) # 将检测后的图像保存到文件 cv2.imwrite("./g11.jpg", result) 

大体步骤就是这些,如有错误请批评指正。

注意事项

  • 每步操作后验证输出是否正常
  • 缺失依赖时使用pip install补充

Read more

Spring Boot 数据导入导出与报表生成

Spring Boot 数据导入导出与报表生成

Spring Boot 数据导入导出与报表生成 24.1 学习目标与重点提示 学习目标:掌握Spring Boot数据导入导出与报表生成的核心概念与使用方法,包括数据导入导出的定义与特点、Spring Boot与数据导入导出的集成、Spring Boot与数据导入导出的配置、Spring Boot与报表生成的基本方法、Spring Boot的实际应用场景,学会在实际开发中处理数据导入导出与报表生成问题。 重点:数据导入导出的定义与特点、Spring Boot与数据导入导出的集成、Spring Boot与数据导入导出的配置、Spring Boot与报表生成的基本方法、Spring Boot的实际应用场景。 24.2 数据导入导出概述 数据导入导出是Java开发中的重要组件。 24.2.1 数据导入导出的定义 定义:数据导入导出是指将数据从一个系统导入到另一个系统,或从一个系统导出到另一个系统的过程。 作用: * 实现数据的迁移。 * 实现数据的备份。 * 实现数据的共享。 常见的数据导入导出格式: * CSV:Comma-Separated Values,逗号分

By Ne0inhk
Flutter 第三方库 spa 的鸿蒙适配实战 - 打造单页应用架构、动态渲染路由状态及鸿蒙大屏多窗体验优化方案

Flutter 第三方库 spa 的鸿蒙适配实战 - 打造单页应用架构、动态渲染路由状态及鸿蒙大屏多窗体验优化方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 第三方库 spa 的鸿蒙适配实战 - 打造单页应用架构、动态渲染路由状态及鸿蒙大屏多窗体验优化方案 前言 随着移动端交互的日益复杂,用户对 App 的流畅度要求已不仅仅停留在“帧率”上,更多的是关于页面切换的“无缝感”。单页应用(Single Page Application, SPA)模式,通过在一个长生命周期的视图内动态替换内容节点,有效地避免了频繁的页面推栈(Push/Pop)带来的布局重绘开销。 spa 库是 Flutter 生态中一个非常独特且高效的路由增强工具。它将路由状态抽象为一套可观察的树状结构,让开发者能像管理 Web 应用一样管理 Flutter 的页面状态。 在鸿蒙系统(OpenHarmony)适配实战中,面对折叠屏的灵活切换和平板的多窗协同,spa 提供了一种天然的“响应式分发”基座。

By Ne0inhk
【前端进阶之旅】2026 年 5 个最佳 React UI 库

【前端进阶之旅】2026 年 5 个最佳 React UI 库

文章目录 * 前言 * 一、2026 年领先的 React.js UI Libraries * 1. Material-UI(MUI):持续领跑的王者 * 2. Shadcn UI:年度最大黑马 * 3. Ant Design:功能全面、适应性极强的 UI 库 * 4. Chakra UI:以 Accessibility 和易用性为核心 * 5. HeroUI:美观、快速、现代 * 6. (Bonus)Headless UI:Tailwind 的最佳搭档 * 总结 前言 在 React UI 库的世界里,又迎来了充满新变化的一年。如果你一直关注这个领域,就会知道

By Ne0inhk

图文问答新玩法:GLM-4.6V-Flash-WEB实战分享

图文问答新玩法:GLM-4.6V-Flash-WEB实战分享 你有没有试过这样操作:打开网页,拖一张照片进去,敲下“这张图里的人在做什么?为什么背景墙上的画风格这么特别?”,不到两秒,答案就清清楚楚地弹出来——不是关键词堆砌,不是模板套话,而是有逻辑、带细节、分点说明的一段自然语言回复。这不是Demo视频里的剪辑效果,而是今天用一台RTX 4090笔记本就能跑起来的真实体验。 过去做图文问答,要么得装一堆依赖、调半天环境,要么得注册API密钥、等配额审批;想本地部署?光模型加载就得卡住五分钟,更别说多轮对话和图像上传了。直到看到 GLM-4.6V-Flash-WEB 这个镜像名时,我第一反应是:“又一个名字带Flash的,怕不是又在吹延迟”。结果实测下来,它真把“网页即服务”这件事做踏实了:不依赖云端、不绕开浏览器、不强制用CLI,连我妈都能自己点开网页传图提问。 这不是一款追求参数规模的视觉大模型,而是一次面向真实使用场景的工程重构。它把“看图说话”这件事,从实验室流程变成了开箱即用的工作流。你可以把它嵌进内部知识库页面,让客服同事上传客户截图后一键获取问题摘要;

By Ne0inhk