调用yolo11模型训练
时间: 2025-06-28 20:04:44 浏览: 18
### 使用YOLOv11模型进行训练
#### 配置环境
为了确保YOLOv11能够在环境中顺利运行,首先需要安装必要的依赖库。Python及其相关开发包是必不可少的一部分。对于深度学习框架的选择,PyTorch因其灵活性和支持广泛的硬件加速选项成为首选。
```bash
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
```
除了上述基础组件外,还需要额外安装一些辅助工具来简化操作流程并增强功能特性:
```bash
pip install ultralytics PyQt5 qtconsole qtfusion opencv-python-headless matplotlib scikit-image tensorboardX
```
最后一步涉及设置计算设备,默认情况下会优先尝试使用GPU资源;如果不可用,则自动切换至CPU模式[^3]。
```python
import os
import torch
from ultralytics import YOLO # 导入YOLO模型
device = "cuda:0" if torch.cuda.is_available() else "cpu"
print(f'Using {device} device')
```
#### 准备数据集
针对特定应用场景的数据收集至关重要。这里假设已经有一个名为`Underwater`的数据集用于水下物体检测任务。接下来的操作将围绕此数据展开说明。
- **指定路径**:利用`abs_path()`函数获取当前项目根目录下的`datasets/Underwater/underwater.yaml`文件作为配置源,并转换成适用于各种平台的标准形式。
```python
from QtFusion.path import abs_path
data_name = "Underwater"
data_path = abs_path('datasets/Underwater/underwater.yaml', path_type='current').replace(os.sep, '/')
```
- **调整参数**:合理设定`workers`(工作线程数)与`batch_size`(批次大小),这两个因素共同决定了数据预处理阶段的速度及稳定性[^2]。
```python
workers = 4 # 增加并发度可以加快读取速度
batch_size = 16 # 批量越大占用显存越多但可能带来更好的收敛效果
```
- **验证结构**:确认所选目录确实存在预期子项,比如图片存储位置、标签信息等,从而避免后续可能出现的问题。
```python
dataset_dir = os.path.dirname(data_path)
assert os.path.exists(dataset_dir), f'Dataset directory not found at {dataset_dir}'
print(f'Successfully loaded dataset configuration from:\n{data_path}')
```
#### 启动训练过程
完成前期准备工作之后就可以着手于正式的训练环节了。考虑到YOLO架构本身具备高度优化的特点,在大多数情况下只需关注几个核心超参即可达到不错的效果。
- 加载预训练权重有助于缩短整个周期内的探索时间,特别是在迁移学习场景中显得尤为重要。官方通常会提供多种版本供开发者按需选用。
```python
model = YOLO('yolov11.pt') # 替换为实际存在的预训练模型名称
model.to(device)
```
- 定义损失函数和优化器策略也是不可或缺的一环。默认推荐采用交叉熵配合AdamW的方式来进行梯度下降求解最优解。
```python
optimizer = torch.optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.0005)
criterion = torch.nn.CrossEntropyLoss()
```
- 接下来便是循环迭代地喂给网络输入样本直至满足终止条件为止。期间还需定期保存checkpoint以便随时恢复进度或评估中间成果。
```python
epochs = 100
for epoch in range(epochs):
running_loss = 0.0
for i, (inputs, labels) in enumerate(train_loader): # train_loader应提前创建好
inputs, labels = inputs.to(device), labels.to(device)
outputs = model(inputs)
loss = criterion(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
running_loss += loss.item()
avg_loss = running_loss / len(train_loader.dataset)
print(f'[Epoch {epoch + 1}/{epochs}] Loss: {avg_loss:.4f}')
if (epoch + 1) % 10 == 0:
checkpoint_file = f'yolov11_epoch_{epoch + 1}.pth'
torch.save({
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': avg_loss,
}, checkpoint_file)
print(f'Model saved to {checkpoint_file}\n')
print('Training completed.')
```
阅读全文
相关推荐

















