Python指定使用gpu

本文介绍了如何在命令行中指定GPU运行Python脚本,包括使用CUDA_VISIBLE_DEVICES环境变量、在脚本内设置以及多GPU和多进程运行的方法。同时提供了查看GPU状态的命令,帮助优化实验环境资源利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令行指定显卡GPU运行python脚本

在大型机构分配的服务器集群中,需要使用GPU的程序默认都会在第一张卡上进行,如果第一张卡倍别人占用或者显存不够的情况下,程序就会报错说没有显存容量,所以能够合理地利用GPU资源能帮助你更快更好地跑出实验效果。因此,这里特地总结了一些指定GPU运行python程序的教程供大家学习。

1、指定使用GPU0运行脚本(默认是第一张显卡, 0代表第一张显卡的id,其他的以此类推)

第一种方式:

CUDA_VISIBLE_DEVICES=0 python ***.py

第二种方式:在python脚本文件中添加如下内容进行指定:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

如果在脚本文件中已经写明了第二种方式,则不支持第一种方式的指定。

2、指定使用多张显卡运行脚本

在GPU的id为0和1的两张显卡上运行***.py程序:

CUDA_VISIBLE_DEVICES=0,1 python ***.py

3、在单张显卡的情况下开启多个进程运行脚本

命令行程序如下:(其中NUM_GPUS_YOU_HAVE代表运行的进程数)

说明:程序会根据卡的容量分配成两个程序,不一定在两张卡,有时候一张卡的容量够则会在该张卡上开启新的进程。

python -m torch.distributed.launch --nproc_per_node=NUM_GPUS_YOU_HAVE ***.py

5、查看GPU状态

1、单次查看

nvidia-smi

2、隔一秒查看GPU状态:

watch -n 1 nvidia-smi
<think>好的,用户现在想做一个基于YOLO的视觉检测系统来识别人脸,需要详细步骤、流程思路以及必要的软件和功能包。首先,我需要考虑用户可能的背景,可能是刚入门的开发者或者有一定经验但需要具体指导的人。用户的需求是构建一个完整的系统,所以需要覆盖从数据准备、模型选择、训练、部署到实际应用的全流程。 首先,确定使用YOLO的哪个版本。用户的需求是人脸检测,YOLOv8在精度和速度上都有优势,且支持多任务,可能更适合。需要推荐YOLOv8,因为它是最新的,社区活跃,支持导出多种格式,适合部署。 接下来是数据准备。人脸检测需要标注好的数据集,常见的有WIDER FACE、FDDB等,但用户可能需要自己收集数据或使用公开数据集。需要说明如何标注数据,比如使用LabelImg工具,格式为YOLO需要的txt文件,每个目标的类别、坐标等。 然后是环境搭建。需要Python、PyTorch、Ultralytics库(YOLOv8官方库),以及相关依赖如OpenCV、Matplotlib等。可能需要说明安装步骤,比如使用pip安装ultralytics,配置CUDA(如果有GPU)。 模型训练部分,需要调整YOLO的配置文件,比如修改nc(类别数,人脸是1类),调整超参数(学习率、批次大小),数据路径等。训练前可能需要数据划分(训练集、验证集、测试集),并确保数据格式正确。训练过程中需要监控指标(mAP、精确率、召回率),调整参数以优化效果。 模型验证和调优,使用验证集评估模型性能,分析漏检、误检情况,可能需要数据增强(旋转、翻转、亮度调整)来提升泛化能力。如果效果不好,考虑迁移学习(使用预训练权重)或调整模型大小(如从nano到small)。 部署部分,用户可能需要将模型部署到不同平台,比如PC端(Python脚本)、边缘设备(树莓派、Jetson)或移动端(Android/iOS)。需要说明如何导出模型为ONNX、TFLite等格式,使用推理框架(如ONNX Runtime、TensorRT)加速。对于实时检测,需要考虑摄像头输入,使用OpenCV读取视频流,模型推理,绘制边界框和标签。 功能扩展,比如加入人脸对齐、识别(结合其他模型如ArcFace),或者报警功能(检测到人脸时触发)。需要说明如何集成其他模块,可能需要多线程处理以提高实时性。 必要的软件和功能包包括:标注工具(LabelImg)、Python环境、PyTorch、Ultralytics、OpenCV、ONNX(可选)、TensorRT(可选)等。需要列出具体的安装命令和版本建议。 还需要考虑用户可能遇到的问题,比如数据标注错误、训练时过拟合、部署时的性能问题,给出解决思路,比如增加数据多样性、调整正则化参数、模型量化等。 最后,总结整个流程,确保用户能一步步跟随操作,从数据准备到系统运行,都有明确的指导。 </think> 构建基于YOLO的人脸检测系统需遵循**数据准备→环境搭建→模型训练→验证调优→部署应用**的全流程,以下是详细步骤、工具链及关键思路: ### 一、明确需求与目标 - **核心目标**:实时检测图像/视频中的人脸(单类别检测,类别标签为“face”); - **性能要求**:根据部署场景(如PC端/边缘设备)权衡速度与精度(如PC端可接受640×640分辨率+30FPS,树莓派需320×320+15FPS); - **扩展功能(可选)**:人脸跟踪(结合DeepSORT)、异常报警(如检测到人脸触发通知)。 ### 二、数据准备(关键基础) #### 1. 数据集选择与收集 - **公开数据集(优先推荐)**: - **WIDER FACE**:最常用的人脸检测数据集,包含32,203张图像、393,703个人脸标注(覆盖不同姿态、遮挡、光照); - **FDDB(Face Detection Data Set and Benchmark)**:专注于非约束环境下的人脸检测,包含5,171张图像; - **自定义数据**:若需特定场景(如戴口罩人脸),可通过手机/摄像头采集(建议≥1000张,覆盖不同角度、光照、遮挡)。 #### 2. 数据标注与格式转换 - **标注工具**:使用`LabelImg`(支持YOLO格式)或`Roboflow`(在线标注+自动格式转换); - **标注要求**: - 标签仅1类(“face”),标注框需紧密包围人脸(避免包含过多背景); - 格式需符合YOLO要求:每个图像对应一个`.txt`文件,每行格式为`[类别ID] [x_center] [y_center] [width] [height]`(坐标均为归一化到0-1的浮点数); - **数据划分**:按8:1:1划分训练集、验证集、测试集(如总数据1000张,训练800,验证100,测试100)。 ### 三、环境搭建(软件与依赖) #### 1. 基础环境 - **操作系统**:Windows/Linux(推荐Ubuntu 20.04+,对PyTorch、CUDA支持更好); - **Python**:3.8-3.10(YOLOv8依赖); - **GPU(可选但推荐)**:NVIDIA GPU(如RTX 3060+),需安装CUDA 11.7+、cuDNN 8.5+(加速训练)。 #### 2. 关键库与工具 - **YOLOv8官方库**:`ultralytics`(集成训练、推理、导出全流程),安装命令: ```bash pip install ultralytics ``` - **OpenCV**:图像/视频处理(读取摄像头、绘制检测框),安装: ```bash pip install opencv-python ``` - **其他依赖**:`matplotlib`(可视化)、`pandas`(指标分析)、`scipy`(NMS后处理优化)。 ### 四、模型训练(核心步骤) #### 1. 选择YOLO版本与模型大小 - **推荐YOLOv8**:最新版支持更优的检测头设计(如动态锚框)和多任务能力,且对人脸小目标检测优化更好; - **模型变体选择**: - **YOLOv8n(nano)**:轻量级(参数量3M),适合边缘设备(如树莓派),速度快但精度略低; - **YOLOv8s(small)**:平衡精度与速度(参数量11M),适合PC端或中端边缘设备; - **YOLOv8m(medium)**:高精度(参数量25M),适合对精度要求高的场景(如安防监控)。 #### 2. 配置训练参数 - **创建数据配置文件(`.yaml`)**:指定训练/验证/测试集路径、类别数(nc=1)、类别名称(names: ['face'])。 示例`face_data.yaml`: ```yaml train: ./datasets/face/train/images # 训练集图像路径 val: ./datasets/face/val/images # 验证集图像路径 test: ./datasets/face/test/images # 测试集图像路径(可选) nc: 1 # 类别数(人脸) names: ['face'] # 类别名称 ``` - **调整模型配置(可选)**:YOLOv8默认模型(如`yolov8s.yaml`)已适配通用目标检测,人脸检测可微调: - 增大检测头的特征图分辨率(如从P3-P5调整为P2-P4),提升小目标(人脸)检测能力; - 调整锚框大小(通过`k-means`聚类人脸标注框的宽高,生成更适配的先验锚框)。 #### 3. 启动训练 使用`ultralytics`库的API或命令行训练: ```python from ultralytics import YOLO # 加载预训练模型(迁移学习,加速收敛) model = YOLO('yolov8s.pt') # 训练模型(指定数据配置、批次大小、轮次等) results = model.train( data='face_data.yaml', # 数据配置文件路径 epochs=100, # 训练轮次(人脸数据建议80-150) batch=16, # 批次大小(根据GPU内存调整,如8G GPU设8-16) imgsz=640, # 输入图像尺寸(640×640,小目标可降至320×320) device=0, # 使用GPU(0表示第一张卡,CPU设为'cpu') lr0=0.01, # 初始学习率(默认0.01,可微调) ) ``` #### 4. 训练监控与调优 - **指标监控**:通过训练日志或`runs/detect/train/`目录下的`results.csv`查看[email protected](人脸检测核心指标)、精确率(Precision)、召回率(Recall); - **过拟合处理**:若验证集mAP远低于训练集,可增加数据增强(如随机遮挡、颜色抖动)或添加正则化(如`weight_decay=0.0005`); - **欠拟合处理**:若训练集mAP低,可增大模型复杂度(如从v8n换v8s)或延长训练轮次(如200轮)。 ### 五、模型验证与测试 #### 1. 验证集评估 使用`model.val()`评估验证集性能: ```python metrics = model.val() # 自动加载训练好的模型,输出mAP、精确率等指标 print(metrics.box.map) # 打印[email protected](目标:≥0.85为优秀) ``` #### 2. 测试集可视化 手动测试单张图像或视频,观察漏检(未检测到人脸)、误检(非人脸被检测)情况: ```python results = model('test_image.jpg') # 推理单张图像 for result in results: boxes = result.boxes # 检测框信息(xyxy坐标、置信度、类别) for box in boxes: x1, y1, x2, y2 = map(int, box.xyxy[0]) # 转换为像素坐标 cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) # 绘制检测框 cv2.imshow('Face Detection', img) cv2.waitKey(0) ``` ### 六、模型部署(实际应用) #### 1. 模型导出(适配不同平台) - **PC端/服务器(Python)**:直接使用`.pt`文件,通过`YOLO`类加载推理; - **边缘设备(树莓派/Jetson)**:导出为轻量级格式(如`ONNX`、`TFLite`、`TensorRT`)以提升速度: ```python # 导出为ONNX格式(支持INT8量化) model.export(format='onnx', imgsz=640, int8=True) # int8量化降低计算量 ``` - **移动端(Android/iOS)**:导出为`CoreML`(iOS)或`TFLite`(Android),结合原生APP调用(如Android使用`ML Kit`)。 #### 2. 实时检测系统开发 - **摄像头输入**:使用OpenCV读取摄像头流(`cv2.VideoCapture(0)`); - **推理循环**:逐帧推理,过滤低置信度检测(如置信度<0.5的框丢弃); - **结果可视化**:绘制检测框、置信度分数,输出到屏幕或存储为视频。 示例代码(实时摄像头检测): ```python import cv2 from ultralytics import YOLO model = YOLO('best.pt') # 加载训练好的模型 cap = cv2.VideoCapture(0) # 打开摄像头(0为默认摄像头) while cap.isOpened(): ret, frame = cap.read() if not ret: break # 推理并绘制结果 results = model(frame) annotated_frame = results[0].plot() # 自动绘制检测框和标签 cv2.imshow('Face Detection', annotated_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` ### 七、扩展功能(可选) - **人脸跟踪**:结合DeepSORT算法,对连续帧中的同一人脸分配ID,实现轨迹跟踪; - **异常报警**:检测到人脸时,通过`smtplib`发送邮件或调用GPIO触发蜂鸣器(边缘设备); - **精度优化**:若检测小人脸效果差,可改用更高分辨率输入(如1280×1280)或级联模型(如YOLOv8检测大脸+小模型检测小脸)。 ### 必要软件与功能包总结 | **类别** | **工具/库** | **说明** | |----------------|---------------------------|---------------------------------------| | 数据标注 | LabelImg、Roboflow | 生成YOLO格式的标注文件 | | 训练框架 | ultralytics(YOLOv8) | 集成训练、推理、导出全流程 | | 图像/视频处理 | OpenCV | 摄像头读取、图像绘制、视频编解码 | | 模型加速 | TensorRT、ONNX Runtime | 部署时加速推理(尤其边缘设备) | | 环境依赖 | Python 3.8-3.10、PyTorch | 基础运行环境(PyTorch需匹配CUDA版本) |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IRevers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值