日期:2024.10.7.
随着Ultralytics的更新,yolov5-v11可以统一使用Ultralytics包体,我之前分析的yolov5关键代码定位在Ultralytics中不适用,这篇博客更新一下。
1. Ultralytics包体版本:
bash
$ pip list | grep ultralytics
ultralytics 8.2.101
ultralytics-thop 2.0.8
2. 测试代码
我不确定yolov10的预处理入口和其他yolo版本是否一样,大家感兴趣自己测试一下
python
from ultralytics import YOLO
# Load a model
model = YOLO("yolov10n.pt") # build a new model from YAML
# Train the model with data augmentation enabled
results = model.train(
data="your_path1/your_dataset.yaml",
epochs=150,
imgsz=320,
batch=8,
project='your_path2',
name='train',
pretrained=True,
)
3. train阶段预处理入口
- 文件:ultralytics/data/base.py
- 类:class BaseDataset(Dataset):
- 函数:def load_image(self, i, rect_mode=True):
在base.py文件中的---->BaseDataset类---->load_image函数
4. val阶段预处理函数入口
- 文件:ultralytics/data/augment.py
- 类:class LetterBox:
- 函数:def call(self, labels=None, image=None):
在augment.py文件中的---->LetterBox类---->__call__函数
5. 验证方法
5.1. 方法1:
修改预处理方法,查看训练结果存放的文件夹your_path2/train
,这个文件夹在第2节的测试代码中指定,文件夹内可以看到train和val阶段的图片
5.2. 方法2
打断点查看进入Warmup
或Forward
的图片,打断点的位置:
- 文件:ultralytics/engine/trainer.py
- 类:class BaseTrainer:
- 函数:def _do_train(self, world_size=1):
- 在函数中找到for i, batch in pbar:并打断点
对batch中的img,查看或保存到本地就可以验证了。
python
images = batch['img']
save_path = "./image_{}.jpg" # 用你自己的路径
# 遍历每一张图片
for i in range(images.shape[0]):
# 获取第 i 张图片的 Tensor,形状 [3, 320, 320]
img_tensor = images[i]
# 调整维度顺序,从 [3, 320, 320] -> [320, 320, 3]
img_np = img_tensor.permute(1, 2, 0).numpy()
# 将Tensor数值范围从[0, 1](假设这是你的数据范围)转换为[0, 255],并转换为uint8类型
img_np = (img_np).astype(np.uint8)
# 使用 PIL Image 将 NumPy 数组转换为图像
img_pil = Image.fromarray(img_np)
# 保存图片
img_pil.save(save_path.format(i)) # 保存图片路径中带有索引i