yoloair使用以及遇到的bug

yolov5代码使用

关于detection.py各个参数的含义可以参考这篇博客
手把手带你调参Yolo v5 (v6.2)(推理)
https://yolov5.blog.csdn.net/article/details/124378167

detect.py

使用窗口方式运行

python detect.py --source img/street.jpg --data data/coco.yaml  --weights weights/yolov5/yolov5s.pt --device 0

修改默认参数运行

parser.add_argument('--weights', nargs='+', type=str, default='weights/yolov5/yolov5s.pt', help='model path(s)')
parser.add_argument('--source', type=str, default='img/street.jpg', help='file/dir/URL/glob, 0 for webcam')
parser.add_argument('--data', type=str, default='data/coco.yaml', help='(optional) dataset.yaml path')

yoloair.models.experimental.py

报错keyerror:‘ema’
在这里插入图片描述
换成 yolov5代码的写法就没错了

# ckpt = (ckpt['ema'] or ckpt['model']).float()  # FP32 model
ckpt = (ckpt['ema' if ckpt.get('ema') else 'model']).float()  # FP32 model

train.py

报错
在这里插入图片描述
此时目录结构mask_data 与 yoloair项目在同一个目录下,yolov5项目中mask_data在yolov5项目下,可以成功运行。但是我把yolov5的mask.yaml文件复制到yoloair可以直接训练。

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]

train: F:/WorkSpace/Python/yolov5/mask_data/train/images/  
val: F:/WorkSpace/Python/yolov5/mask_data/valid/images/  

# number of classes
nc: 2

# class names
names: [ 'mask', 'nomask' ]

# Print classes
# with open('data/coco.yaml') as f:
#   d = yaml.load(f, Loader=yaml.FullLoader)  # dict
#   for i, x in enumerate(d['names']):
#     print(i, x)

用下面合格mask.yaml文件不能直接运行

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]

train: F:/WorkSpace/Python/mask_data/train/images/
val: F:/WorkSpace/Python/mask_data/val/images/
test: F:/WorkSpace/Python/mask_data/test/images/

# number of classes
nc: 2

# class names
names: [ 'mask', 'nomask' ]

把mask_data移动到yoloair目录下还是报错了
在这里插入图片描述

只有debug试一下了,最后获取返回的data数据,发现是路径错了,我是个憨逼
把 val: F:/WorkSpace/Python/mask_data/val/images/ 改成 val: F:/WorkSpace/Python/mask_data/valid/images/ 就没问题了。可以正常训练。

多了一个test的目录,没啥关系,在 utils.general.py 的check_dataset方法中会查验数据集,用字典的形式把train,val,test的目录载入

 # Resolve paths
    path = Path(extract_dir or data.get('path') or '')  # optional 'path' default to '.'
    if not path.is_absolute():
        path = (ROOT / path).resolve()
    for k in 'train', 'val', 'test':
        if data.get(k):  # prepend path
            data[k] = str(path / data[k]) if isinstance(data[k], str) else [str(path / x) for x in data[k]]

猜你喜欢

转载自blog.csdn.net/qq_41398619/article/details/127485084