


图片和标签没有问题,训练有200多张,标签有几十个空的,划分是
├── 训练/
│ ├── magics/
│ └── labels/
└── 验证/
├── magics/
└── labels/
yaml也没毛病啊,nc1,name也瞎编了个名字,路径也都是指向图片



上午好☀️☀️☀️️
本答案参考通义千问
你提到的 YOLOv6n 训练中 mAP 始终为 0,这通常意味着模型在训练过程中未能正确学习到目标检测的特征。虽然你说图片和标签没有问题,但可能还有一些细节被忽略了。以下是一些可能导致 mAP 为 0 的原因及解决方案。
.txt)中的每一行是:class_id x_center y_center width height,且所有值都应归一化到 [0,1] 范围内。nc: 1,即只有一种类别。labels/ 文件夹中是否确实只有一个类别的标注(如所有标签文件中只包含一个数字 0)。nc 配置错误,也可能导致模型无法识别。train 和 val,路径结构如下:
├── train/
│ ├── magics/
│ └── labels/
└── val/
├── magics/
└── labels/
train/labels/ 和 val/labels/ 中的标签文件与对应的图像文件一一对应。train/images/ 和 val/images/ 中的图像文件名与 .txt 标签文件名一致(例如 image1.jpg 对应 image1.txt)。.txt 文件为空。[0 0.5 0.5 0.5 0.5]),以避免训练失败。nc: 1 # 类别数
names: ['your_class_name'] # 类别名称
train: ./data/train/images # 训练图像路径
val: ./data/val/images # 验证图像路径
labels/ 目录。train 和 val 的路径是相对于当前工作目录的。import os
def check_labels(data_dir):
for label_file in os.listdir(os.path.join(data_dir, 'labels')):
with open(os.path.join(data_dir, 'labels', label_file), 'r') as f:
lines = f.readlines()
for line in lines:
parts = line.strip().split()
if len(parts) != 5:
print(f"Invalid label format in {label_file}: {line}")
else:
class_id, x, y, w, h = map(float, parts)
if not (0 <= class_id < 1 or class_id == 0): # 假设只有一种类别
print(f"Invalid class ID in {label_file}: {class_id}")
if any(not (0 <= v <= 1) for v in [x, y, w, h]):
print(f"Invalid coordinates in {label_file}: {line}")
check_labels('./data/train')
check_labels('./data/val')
.txt 文件:
find ./data/train/labels -type f -empty -delete
find ./data/val/labels -type f -empty -delete
.yaml 文件,确保 train 和 val 指向的是图像目录,不是标签目录:
train: ./data/train/magics # 图像目录
val: ./data/val/magics # 图像目录
import json
import os
def convert_coco_to_yolo(json_path, output_dir):
with open(json_path, 'r') as f:
data = json.load(f)
images = data['images']
annotations = data['annotations']
image_id_to_filename = {img['id']: img['file_name'] for img in images}
category_id_to_name = {cat['id']: cat['name'] for cat in data['categories']}
for ann in annotations:
image_id = ann['image_id']
filename = image_id_to_filename[image_id]
x, y, w, h = ann['bbox']
class_id = ann['category_id']
class_name = category_id_to_name[class_id]
# 归一化坐标
x /= 1024 # 假设图像尺寸是 1024x1024
y /= 1024
w /= 1024
h /= 1024
label_file = os.path.join(output_dir, os.path.splitext(filename)[0] + '.txt')
with open(label_file, 'a') as f:
f.write(f"{class_id} {x} {y} {w} {h}\n")
# data.yaml
train: ./data/train/magics
val: ./data/val/magics
nc: 1
names: ['your_class_name']
如果你能提供具体的 data.yaml 内容或部分标签文件内容,我可以进一步帮你排查问题。