文章目录
使用YOLOv4训练DeepFashion2数据集详解
一、引言
在计算机视觉领域,目标检测是一个非常重要的任务,而YOLO(You Only Look Once)系列模型因其速度快、性能好而广受欢迎。DeepFashion2数据集是一个大规模的服装数据集,包含了丰富的服装图像和标注信息,适合用来训练和测试目标检测模型。本文将详细介绍如何使用YOLOv4模型来训练DeepFashion2数据集,以达到对服装进行检测的目的。
二、准备工作
1、数据集和代码准备
首先,我们需要准备好DeepFashion2数据集和YOLOv4的代码。DeepFashion2数据集可以从其官方GitHub仓库获取。YOLOv4的代码我们可以使用bubbliiiing的PyTorch实现,这份实现包含了一些训练的技巧,比如Cosine scheduler learning rate,Mosaic,CutMix,label smoothing,CIoU等。
2、环境配置
确保你的Python环境已经安装了PyTorch、CUDA等必要的库,并且你的机器拥有足够的GPU资源来支持训练。
三、数据预处理
1、生成训练和验证集标签
我们需要将DeepFashion2数据集中的标注信息转换成YOLOv4可以识别的格式。可以使用以下命令生成训练集和验证集的标签文件:
python example.py --datasets COCO --img_path ./train/image/ --label train.json --convert_output_path YOLO/ --img_type ".jpg" --manipast_path train.txt --cls_list_file fashion_classes.txt
python example.py --datasets COCO --img_path ./validation/image/ --label valid.json --convert_output_path YOLO/ --img_type ".jpg" --manipast_path valid.txt --cls_list_file fashion_classes.txt
上述命令会生成train.txt
和valid.txt
两个文件,这两个文件包含了训练和验证集的路径和标注信息。
2、调整数据集路径
如果标签文件中的路径不是绝对路径,需要将数据集的图像按照以下结构组织,并放到项目路径下面:
- DeepFashion2
- train
- image
- validation
- image
四、模型训练
1、修改配置文件
由于我们有验证集的标注,需要修改train_with_tensorboard.py
中的代码,以使用我们生成的训练集和验证集标签文件。具体修改如下:
[line 142]:
- annotation_path = '2007_train.txt'
+ train_path = 'train.txt'
+ val_path = 'valid.txt'
[line 179]:
- val_split = 0.1
- with open(annotation_path) as f:
- lines = f.readlines()
- np.random.seed(10101)
- np.random.shuffle(lines)
- np.random.seed(None)
- num_val = int(len(lines)*val_split)
- num_train = len(lines) - num_val
+ with open(train_path) as f:
+ train_lines = f.readlines()
+ with open(val_path) as f1:
+ val_lines = f1.readlines()
+ np.random.seed(10101)
+ np.random.shuffle(train_lines)
+ np.random.shuffle(val_lines)
+ np.random.seed(None)
+ num_train = int(len(train_lines))
+ num_val = int(len(val_lines))
2、开始训练
完成上述修改后,可以按照项目的说明文档操作开始训练。训练过程中,可以监控TensorBoard来查看损失和准确率等指标。
五、使用示例
训练完成后,我们可以使用训练好的模型来进行预测。以下是使用YOLOv4模型进行预测的简单示例代码:
from models.common import DetectMultiBackend
from utils.general import non_max_suppression, scale_coords, xyxy2xywh
from utils.torch_utils import select_device, load_classifier
# Load model
device = select_device('')
model = DetectMultiBackend('yolov4/yolov4.pt', device=device, dnn=False)
stride, names, pt, jit, onnx = model.stride, model.names, model.pt, model.jit, model.onnx
# Load image
img_path = 'data/images/bus.jpg'
img = cv2.imread(img_path) # BGR
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Inference
img = letterbox(img, new_shape=640)[0]
img = img[:, :, ::-1].transpose(2, 0, 1)
img = np.ascontiguousarray(img)
img = torch.from_numpy(img).to(device)
img = img.float()
if len(img.shape) == 3:
img = img[None] # expand for batch dim
pred = model(img, augment=False)[0]
# Apply NMS
pred = non_max_suppression(pred, 0.25, 0.45, classes=None, agnostic=False)
# Process detections
for i, det in enumerate(pred): # detections per image
if len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img_path.shape).round()
for *xyxy, conf, cls in reversed(det):
label = f'{names[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, img_path, label=label, color=colors[int(cls)], line_thickness=3)
# Save and show results
cv2.imwrite('output.jpg', img)
六、总结
通过上述步骤,我们详细介绍了如何使用YOLOv4模型来训练DeepFashion2数据集。这个过程包括了数据准备、数据预处理、模型训练和使用示例。希望这篇文章能帮助你更好地理解和应用YOLOv4模型在服装检测任务上的应用。
版权声明:本博客内容为原创,转载请保留原文链接及作者信息。
参考文章:
标签:YOLOv4,训练,img,--,train,DeepFashion2,path,详解 From: https://blog.csdn.net/NiNg_1_234/article/details/144493068