YOLOv7项目运行

YOLOv7项目运行

代码:WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (github.com)

论文:[2207.02696] YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (arxiv.org)

代码里面也含有论文

推理

On video:

python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source yourvideo.mp4

On image:

python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg

detect.py

parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default='yolov7.pt', help='model.pt path(s)')
    parser.add_argument('--source', type=str, default='inference/images', help='source')  # file/folder, 0 for webcam
    parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
    parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')
    parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')

解释:weights:训练好的模型路径 source:测试图片的路径。 img-size:图片输入的大小。 conf-thres:置信度的下线。 iou-thres:IOU的阈值 device:GPU的编号,或者设置为cpu。 然后就可以运行detect.py脚本了。

具体见YOLOv7项目的readme

demo:Google Colab

image-20240925180156914

训练

项目来源:【安全帽识别-新手任务】-视觉算法打榜-极市开发者平台 (cvmart.net)

自带数据集

1.数据集制作

由于该项目自带数据集,不用做特别处理,直接运行脚本/project/train/src_repo/run.sh

#训练脚本 -->执行数据集划分、转换脚本,执行YOLOV5训练模块。
#run.sh
rm  -r /project/train/src_repo/dataset
#创建数据集相关文件夹
mkdir /project/train/src_repo/dataset
mkdir /project/train/src_repo/dataset/Annotations
mkdir /project/train/src_repo/dataset/images
mkdir /project/train/src_repo/dataset/ImageSets
mkdir /project/train/src_repo/dataset/labels
mkdir /project/train/src_repo/dataset/ImageSets/Main

cp /home/data/831/*.xml /project/train/src_repo/dataset/Annotations
cp /home/data/831/*.jpg  /project/train/src_repo/dataset/images
#执行数据集划分、转换
python /project/train/src_repo/split_train_val.py --xml_path /project/train/src_repo/dataset/Annotations  --txt_path /project/train/src_repo/dataset/ImageSets/Main
cp /project/train/src_repo/voc_label.py /project/train/src_repo/dataset
python /project/train/src_repo/dataset/voc_label.py

得到:

image-20240925224952108

Annotations文件夹存放的是之前的xml标注文件,images存放的是所有图片,labels文件夹存放的是所有yolov7需要的标注文件,以.txt文件呈现,test.txt trian.txt val.txt都是划分的数据集,里面存放的是相应的图片数据位置,剩下的ImageSets放的是划分文件的名字,.cache文件存放的是运行过程中产生的缓存,不重要

总之,得到以下格式的数据集就行:

image-20240925225703334

左边是所有图片和标签在一个文件夹下,用文档进行划分;右边是将图片和标签直接划分到对应文档下(注意images-labels/test-train,图片标签在上级目录,而不是test和train

2.创建yaml文件

将标签数据、类别数量及名称按以下格式写好:

image-20240925180957432

3.运行脚本训练

# train p5 models
!python train.py --weights '' --cfg cfg/training/yolov7.yaml --data data/helmet.yaml --epochs 300 --batch-size 16 

YOLOv7比YOLOv5参数更多,训练速度相比要慢,而且由于网络原因,我这还没训练完就断了

image-20240925230420207

还好有继续训练机制,使用–resume参数,从上次最后一个开始:

!python train.py --weights 'train/src_repo/yolov7/runs/train/exp6/weights/last.pt' --cfg cfg/training/yolov7.yaml --data data/helmet.yaml --epochs 300 --batch-size 16 --resume

完成:

image-20240925230618395

遇到的问题

Traceback (most recent call last):
  File "train.py", line 616, in <module>
    train(hyp, opt, device, tb_writer)
  File "train.py", line 248, in train
    image_weights=opt.image_weights, quad=opt.quad, prefix=colorstr('train: '))
  File "/project/train/src_repo/yolov7/utils/datasets.py", line 78, in create_dataloader
    prefix=prefix)
  File "/project/train/src_repo/yolov7/utils/datasets.py", line 392, in __init__
    cache, exists = torch.load(cache_path), True  # load
  File "/usr/local/lib/python3.7/dist-packages/torch/serialization.py", line 608, in load
    return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
  File "/usr/local/lib/python3.7/dist-packages/torch/serialization.py", line 777, in _legacy_load
    magic_number = pickle_module.load(f, **pickle_load_args)
_pickle.UnpicklingError: STACK_GLOBAL requires str

数据标签的cache的原因

因此删除.cache文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值