保姆级官方YOLOv7训练自己的数据集及项目部署详解
1. 前置条件
在开始使用官方YOLOv7训练自己的数据集之前,需要先安装以下软件和库:
- Anaconda或Miniconda
- PyTorch
- CUDA(如果需要GPU加速)
同时,还需要一些基本编程知识,如Python语言基础、深度学习算法基础等。
2. 下载官方YOLOv7代码
在终端中使用以下代码将官方YOLOv7代码库clone到本地计算机:
git clone https://github.com/wang-xinyu/tensorrtx.git
3. 数据集准备
在使用官方YOLOv7训练自己的数据集之前,需要对数据集进行一些处理。首先,需要将数据集划分为训练集和测试集,通常使用70%的数据作为训练集,30%的数据作为测试集。然后,还需要将数据集标注为每个物体的位置和类别。YOLOv7支持的数据集格式包括VOC格式和COCO格式。最后,还需要使用数据增强的方法对训练集进行增强。
以下示例是使用VOC格式数据集的数据准备代码:
# 初始化VOC数据集对象
voc_dataset = VOCDataset('path/to/voc/dataset', 'trainval', transform=transforms.Compose([Normalizer(), Augmenter(), Resizer()]))
# 迭代读取VOC数据集的训练图片和标注
dataloader = DataLoader(voc_dataset, batch_size=1, shuffle=False, num_workers=0, collate_fn=collater)
for idx, data in enumerate(dataloader):
# 保存训练图片
cv2.imwrite('path/to/train/images/' + str(idx) + '.jpg', data['img'].squeeze(0).permute(1,2,0).numpy().astype(np.uint8))
# 保存训练图片的标注
with open('path/to/train/labels/' + str(idx) + '.txt', 'w') as f:
boxes = data['annot'].squeeze(0).numpy()
for bbox in boxes:
if bbox[0] < 0:
break
label = voc_classes[int(bbox[4])]
x1, y1, x2, y2 = bbox[:4] * np.array([data['img'].shape[3], data['img'].shape[2], data['img'].shape[3], data['img'].shape[2]])
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)
f.write(f"{label} {x1} {y1} {x2} {y2}\n")
4. 训练YOLOv7模型
在数据集准备完毕后,可以开始使用官方YOLOv7训练自己的数据集。训练模型需要使用train.py
脚本,可以通过修改--data
参数指定自己的数据集路径、--cfg
参数指定模型配置文件、--epochs
参数指定训练轮数等参数进行自定义。
以下示例是使用VOC格式数据集的训练代码:
# 进入YOLOv7代码库目录
cd tensorrtx/yolov7
# 运行训练脚本
python3 train.py --data /path/to/voc/ --cfg ./cfg/yolov7-custom.cfg --epochs 30 --weights '' --name yolov7-custom
5. 模型部署
经过数轮训练后,YOLOv7模型就可以用于目标检测和物体识别。下面是使用YOLOv7模型进行目标检测的示例代码:
# 加载YOLOv7模型
model = attempt_load('weights/yolov7-custom.pt', map_location=torch.device('cuda:0' if torch.cuda.is_available() else 'cpu'))
# 初始化测试图片
img = cv2.imread('path/to/test/image.jpg')
# 进行目标检测
orig_size = img.shape[:2]
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = preprocess(img, opt.img_size).cuda()
pred = model(img)[0]
pred = non_max_suppression(pred, 0.1, 0.5)
# 可视化检测结果
for i, det in enumerate(pred):
if det is not None and len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], orig_size).round()
for *xyxy, conf, cls in det:
label = f'{voc_classes[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, img0, label=label, color=colors[int(cls)], line_thickness=3)
# 保存检测结果
cv2.imwrite('path/to/test/image_detection.jpg', img0)
6. 总结
本文详细介绍了如何使用官方YOLOv7训练自己的数据集,并讲解了模型训练和部署的流程和示例代码。希望能够对大家了解YOLOv7目标检测和物体识别算法有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:保姆级官方yolov7训练自己的数据集及项目部署详解 - Python技术站