python 跑yolov5 训练数据集遇到的问题
C:\Users\ASUS\.conda\envs\yolov5\python.exe C:/Users/ASUS/Desktop/yolov5_material/yolov5-master/train.py
Apex recommended for faster mixed precision training: https://github.com/NVIDIA/apex
{'lr0': 0.01, 'momentum': 0.937, 'weight_decay': 0.0005, 'giou': 0.05, 'cls': 0.58, 'cls_pw': 1.0, 'obj': 1.0, 'obj_pw': 1.0, 'iou_t': 0.2, 'anchor_t': 4.0, 'fl_gamma': 0.0, 'hsv_h': 0.014, 'hsv_s': 0.68, 'hsv_v': 0.36, 'degrees': 0.0, 'translate': 0.0, 'scale': 0.5, 'shear': 0.0}
Namespace(adam=False, batch_size=16, bucket='', cache_images=False, cfg='models/yolov5s.yaml', data='data/coco128.yaml', device='', epochs=300, evolve=False, img_size=[416, 416], multi_scale=False, name='', noautoanchor=False, nosave=False, notest=False, rect=False, resume=False, single_cls=False, weights='')
Using CUDA device0 _CudaDeviceProperties(name='NVIDIA GeForce RTX 3060 Laptop GPU', total_memory=6143MB)
Start Tensorboard with "tensorboard --logdir=runs", view at http://localhost:6006/
Traceback (most recent call last):
File "C:/Users/ASUS/Desktop/yolov5_material/yolov5-master/train.py", line 387, in
train(hyp)
File "C:/Users/ASUS/Desktop/yolov5_material/yolov5-master/train.py", line 70, in train
data_dict = yaml.load(f, Loader=yaml.FullLoader) # model dict
File "C:\Users\ASUS\.conda\envs\yolov5\lib\site-packages\yaml\__init__.py", line 81, in load
return loader.get_single_data()
File "C:\Users\ASUS\.conda\envs\yolov5\lib\site-packages\yaml\constructor.py", line 49, in get_single_data
node = self.get_single_node()
File "C:\Users\ASUS\.conda\envs\yolov5\lib\site-packages\yaml\composer.py", line 36, in get_single_node
document = self.compose_document()
File "C:\Users\ASUS\.conda\envs\yolov5\lib\site-packages\yaml\composer.py", line 55, in compose_document
node = self.compose_node(None, None)
File "C:\Users\ASUS\.conda\envs\yolov5\lib\site-packages\yaml\composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
File "C:\Users\ASUS\.conda\envs\yolov5\lib\site-packages\yaml\composer.py", line 127, in compose_mapping_node
while not self.check_event(MappingEndEvent):
File "C:\Users\ASUS\.conda\envs\yolov5\lib\site-packages\yaml\parser.py", line 98, in check_event
self.current_event = self.state()
File "C:\Users\ASUS\.conda\envs\yolov5\lib\site-packages\yaml\parser.py", line 439, in parse_block_mapping_key
"expected , but found %r" % token.id, token.start_mark)
yaml.parser.ParserError: while parsing a block mapping
in "data/coco128.yaml", line 11, column 1
expected end>, but found ''
in "data/coco128.yaml", line 18, column 2
目前还未解决求高手解惑
参考GPT的内容和自己的思路:
根据错误信息,这个问题似乎是由于 data/coco128.yaml 文件中的格式问题导致的。具体来说,解析这个文件时出现了一个错误,因为它期望一个块结束符,但却遇到了一个块映射开始符。
要解决这个问题,可以检查 data/coco128.yaml 文件的第 11 行开始,看看有没有任何格式问题,例如缩进、拼写错误等。同时,还应该检查这个文件的第 18 行,确保它遵循了正确的 YAML 格式。
下是一个简单的 Python 脚本示例,用于使用 YOLOv5 进行目标检测:
import torch
import cv2
from PIL import Image
import argparse
# 解析命令行参数
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='yolov5s.pt', help='模型权重')
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='图像大小')
parser.add_argument('--conf-thres', type=float, default=0.25, help='置信度阈值')
parser.add_argument('--iou-thres', type=float, default=0.45, help='IoU 阈值')
parser.add_argument('--device', default='', help='设备 ID(例如:0 或 0,1 或 cpu)')
parser.add_argument('--source', type=str, default='data/images', help='图像/视频路径,0 表示从摄像头获取')
parser.add_argument('--view-img', action='store_true', help='显示输出图像')
parser.add_argument('--save-txt', action='store_true', help='保存检测结果到 .txt 文件')
parser.add_argument('--classes', nargs='+', type=int, help='需要检测的物体类别(默认:所有类别)')
args = parser.parse_args()
# 加载模型
model = torch.hub.load('ultralytics/yolov5', 'custom', path_or_model=args.weights, force_reload=True)
# 设置设备
device = torch.device('cuda:0' if torch.cuda.is_available() and args.device != 'cpu' else 'cpu')
# 加载图像或视频
if args.source == '0':
cap = cv2.VideoCapture(0)
else:
cap = cv2.VideoCapture(args.source)
# 处理每一帧
while True:
ret, frame = cap.read()
if not ret:
break
# 转换为 PIL 图像并进行检测
img = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
results = model(img, size=args.img_size, conf=args.conf_thres, iou=args.iou_thres, classes=args.classes)
# 在输出图像上绘制检测结果
if args.view_img:
results.render()
# 保存检测结果到 .txt 文件
if args.save_txt:
results.save()
# 如果按下 'q' 键,则退出程序
if cv2.waitKey(1) == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
该回答引用ChatGPT
这个错误是由于在解析"data/coco128.yaml"文件时遇到了语法错误。根据错误信息,它似乎是在第11行遇到了错误。可能是因为在该行缺少一个结束标记,或者该行中有语法错误。同时,在第18行,解析器预期结束块映射,但是它遇到了一个新的块映射,也就是说该行有语法错误。
建议检查"data/coco128.yaml"文件的第11和18行,确认文件中的格式是否正确,并且所有的块映射都已正确地关闭
格式问题,yaml的字典格式要求冒号后面必须要有一个空格(),如果是多行的话,每一行开头都要有一个空格
去掉这个空格就跟你报一样的错误了。像Pycharm就会检查yaml文件格式,不对的话就会泛红,建议你换pycharm试试看。