在WSL Ubuntu下使用Conda搭建YOLO开发环境并完成一个完整的训练和部署流程是个不错的实践。虽然搜索结果中的信息提供了一个在Ubuntu下安装Miniconda、配置conda环境,安装PyTorch,安装YOLO等相关库的基本步骤,但为了给你一个更清晰、可靠的指南,我将结合更通用的方法,为你梳理一个详细的步骤和完整示例。
🔧 环境搭建
- **安装 Miniconda**
在WSL Ubuntu终端中执行以下命令来安装Miniconda(一个轻量级的Conda发行版):
```bash
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b
~/miniconda3/bin/conda init bash
source ~/.bashrc
```
安装完成后,重启终端或运行 `source ~/.bashrc` 来激活conda。
- **创建并激活Conda环境**
创建一个独立的虚拟环境可以避免包版本冲突。
```bash
conda create -n yolo_env python=3.9 -y
conda activate yolo_env
```
激活后,终端提示符前会显示 `(yolo_env)`。
- **安装 PyTorch 和 Torchvision**
你需要根据你的CUDA版本安装对应的PyTorch。访问 [PyTorch官网](https://pytorch.org/get-started/locally/) 获取最适合你环境的安装命令。
- **如果你有NVIDIA GPU并已配置好CUDA**(在WSL终端输入 `nvidia-smi` 可查看CUDA版本),可以安装支持GPU的PyTorch,例如对于CUDA 12.1:
```bash
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
```
- **如果你没有GPU或使用CPU**,安装CPU版本的PyTorch即可:
```bash
conda install pytorch torchvision torchaudio cpuonly -c pytorch
```
**验证PyTorch安装**:在激活的 `yolo_env` 环境中启动Python,运行以下代码进行验证:
```python
import torch
print(torch.version) # 打印PyTorch版本
print(torch.cuda.is_available()) # 如果输出True,则表示GPU版本的PyTorch可用;如果输出False,则不可用
```
- **安装 YOLOv8 及相关库**
这里我们以Ultralytics的YOLOv8为例,它封装得很好,易于使用。
```bash
pip install ultralytics
```
这个命令会自动安装YOLO运行所需的所有依赖,如 `opencv-python`, `numpy`, `pillow` 等。
基本验证:安装完成后,可以尝试导入YOLO来验证:
```python
from ultralytics import YOLO
print("YOLO库安装成功!")
```
🚀 完整项目示例:训练一个目标检测模型
这里我们以一个简单的例子,使用YOLOv8在公开的COCO128数据集上训练一个目标检测模型。
- **准备数据集**
YOLOv8内置了对COCO128数据集的支持,它会自动下载。
如果你想使用自己的数据,需要将数据组织成YOLO格式( images 、 labels目录,以及train.txt、val.txt等描述文件)。
- **训练模型**
创建一个Python脚本(例如 `train.py`),内容如下:
```python
from ultralytics import YOLO
加载一个预训练模型,这里选择中等大小的yolov8m模型
model = YOLO('yolov8m.pt')
训练模型
results = model.train(
data='coco128.yaml', # 数据集配置文件,YOLOv8会自动处理COCO128
epochs=50, # 训练轮数,根据你的需求调整
imgsz=640, # 输入图像大小
batch=16, # 批次大小,根据你的GPU内存调整。如果内存不足,减小这个值
device='cuda', # 使用GPU训练,如果是CPU,则设置为 device='cpu'
workers=4, # 数据加载的线程数
lr0=0.01, # 初始学习率
lrf=0.01, # 最终学习率系数 (lr0 * lrf)
momentum=0.937, # 动量
weight_decay=0.0005, # 权重衰减
save_period=10 # 每10个epoch保存一次检查点
)
```
在终端运行这个脚本:
```bash
python train.py
```
训练过程中,模型权重和日志会默认保存在 `runs/detect/train/` 目录下。
- **评估模型**
训练结束后,你可以使用验证集评估模型性能。创建一个 `eval.py` 脚本:
```python
from ultralytics import YOLO
加载训练好的最佳模型 (通常保存在 runs/detect/train/weights/best.pt)
model = YOLO('runs/detect/train/weights/best.pt')
在验证集上评估模型
metrics = model.val() # 默认会使用训练时 data 参数对应的验证集
print(f"mAP50-95: {metrics.box.map}")
print(f"mAP50: {metrics.box.map50}")
```
- **使用模型进行预测**
使用训练好的模型对图像或视频进行预测。创建一个 `predict.py` 脚本:
```python
from ultralytics import YOLO
import cv2
加载训练好的最佳模型
model = YOLO('runs/detect/train/weights/best.pt')
预测单张图片
results = model('path/to/your/image.jpg', save=True) # `save=True` 会保存带检测框的图片
预测视频
results = model('path/to/your/video.mp4', save=True)
也可以使用摄像头实时预测 (0 通常代表默认摄像头)
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model(frame, verbose=False) # verbose=False 减少输出
annotated_frame = results[0].plot()
cv2.imshow('YOLO Detection', annotated_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
预测结果默认会保存在 `runs/detect/predict/` 目录下。
- **模型导出(为部署准备)**
为了将模型部署到生产环境,你通常需要将其导出为更高效的格式,如ONNX或TensorRT。
```python
from ultralytics import YOLO
model = YOLO('runs/detect/train/weights/best.pt')
导出模型为 ONNX 格式
success = model.export(format='onnx') # 导出后的模型默认保存在同一目录下
```
导出的ONNX模型可以被许多推理引擎(如ONNX Runtime)加载和使用。
💡 改善模型的思路
-
**数据层面**:确保你的数据集质量高、标注准确。如果数据量小,可以考虑使用**数据增强**(YOLO训练时默认会开启一些数据增强,你也可以在 `model.train()` 中通过 `augment=True` 参数开启或自定义)。
-
**超参数调优**:调整学习率(`lr0`)、批次大小(`batch`)、优化器等超参数。YOLOv8的 `model.train()` 方法提供了很多可调参数。
-
**更换模型**:YOLOv8提供了从n到x不同尺寸的模型(如 `yolov8n.pt`, `yolov8s.pt`, `yolov8m.pt`, `yolov8l.pt`, `yolov8x.pt`)。模型越大通常精度越高,但速度越慢。你可以根据你的精度和速度需求选择合适的模型。
-
**更长的训练时间**:适当增加训练轮数(`epochs`)。
⚠️ 注意事项
-
**版本兼容性**:PyTorch、CUDA(如果使用GPU)、Conda环境下的Python包之间可能存在版本依赖问题,务必确保它们兼容。遇到问题时,查看官方文档通常是首选。
-
**WSL2下的GPU支持**:确保你的Windows系统已安装适配WSL的NVIDIA显卡驱动,并在WSL2中能够正确识别GPU(通过 `nvidia-smi` 命令验证)。
-
**性能**:WSL2的I/O性能可能低于原生Linux,将项目文件放在WSL文件系统内(如 `~/project`)通常比在 `/mnt/c/`(Windows盘符)访问更快。
希望这个详细的指南能帮助你在WSL Ubuntu下顺利搭建YOLO开发环境并完成训练和部署。如果你在具体操作过程中遇到问题,比如CUDA版本匹配或者依赖包安装出错,可以随时提问。