yolov5 训练笔记

本文介绍了如何安装和使用labelimg工具,以及详细解释了YOLOv5训练中的关键参数,包括权重路径、模型配置、数据集路径和超参数设置,同时提及了多GPU训练的选项。
摘要由CSDN通过智能技术生成

数据标注

labelimg安装

pip install PyQt5
pip install pyqt5-tools
pip install lxml
pip install labelimg

labelimg启动

labelimg ./data classes.txt

classes.txt 中存放标签

labelimg使用

train.py 参数

parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/coco128.yaml', help='data.yaml path')
parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=300)
parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
parser.add_argument('--rect', action='store_true', help='rectangular training')
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
parser.add_argument('--notest', action='store_true', help='only test final epoch')
parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')
parser.add_argument('--project', default='runs/train', help='save to project/name')
parser.add_argument('--entity', default=None, help='W&B entity')
parser.add_argument('--name', default='exp', help='save to project/name')
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
parser.add_argument('--quad', action='store_true', help='quad dataloader')
parser.add_argument('--linear-lr', action='store_true', help='linear LR')
parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
opt = parser.parse_args()

常用参数

parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/yolo5s.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/coco128.yaml', help='data.yaml path')
parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=300)
parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')

weights

指定初始权重文件,需要从官网上下载

cfg

选择model文件 ,选择和weights对应的就可以了

data

训练数据的配置文件

train: ../coco128/images/train2017/  # 训练数据保存位置
val: ../coco128/images/train2017/  # 验证数据保存位置

# 类别的数量
nc: 80

# 类别的名称
names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
         'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
         'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
         'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
         'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
         'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
         'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
         'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
         'hair drier', 'toothbrush' ]

hyp

lr0: 0.01  # 初始学习率 (SGD=1E-2, Adam=1E-3)
lrf: 0.2  # 最终的OneCycleLR学习率 (lr0 * lrf)
momentum: 0.937  # SGD动量/Adam beta1
weight_decay: 0.0005  # 优化器权重衰减
warmup_epochs: 3.0  # 预热周期数
warmup_momentum: 0.8  # 预热初始动量
warmup_bias_lr: 0.1  # 预热初始偏置学习率
box: 0.05  # 边框损失增益
cls: 0.5  # 类别损失增益
cls_pw: 1.0  # 类别BCELoss正权重
obj: 1.0  # 目标损失增益 (与像素比例)
obj_pw: 1.0  # 目标BCELoss正权重
iou_t: 0.20  # IoU训练阈值
anchor_t: 4.0  # 锚点倍数阈值
# anchors: 3  # 每个输出层的锚点数 (0为忽略)
fl_gamma: 0.0  # 焦点损失gamma (efficientDet默认gamma=1.5)
hsv_h: 0.015  # 图像HSV-色调增强 (分数)
hsv_s: 0.7  # 图像HSV-饱和度增强 (分数)
hsv_v: 0.4  # 图像HSV-值增强 (分数)
degrees: 0.0  # 图像旋转 (+/- 度)
translate: 0.1  # 图像平移 (+/- 分数)
scale: 0.5  # 图像缩放 (+/- 增益)
shear: 0.0  # 图像剪切 (+/- 度)
perspective: 0.0  # 图像透视 (+/- 分数), 范围 0-0.001
flipud: 0.0  # 图像上下翻转 (概率)
fliplr: 0.5  # 图像左右翻转 (概率)
mosaic: 1.0  # 图像马赛克 (概率)
mixup: 0.0  # 图像混合 (概率)

epochs

训练轮数 默认为300

batch-size

一次往GPU哪里塞多少张图片了,决定了显存占用大小,默认是16。

理论是能尽量跑满显存为佳(越大越好),但实际测试下来,当为8的倍数时效率更高一点

resume

是否继续训练,如果继续训练将default 改成 True

parser.add_argument('--resume', nargs='?', const=True, default=True, help='resume most recent training')

开始训练

有两种方式,可以直接在文件中修改参数,然后直接运行train.py(不推荐)

也可以通过命令语句输入参数

python train.py  --epochs 100 --data ../yolo/A.yaml --weights yolov5s.pt 

断点续训

有两种场景,第一种是训练异常中断 只需要把resume 改成True 然后把weights改成 中断之前最后一次保存的模型,一般在runs/train/exp_/weights/last.pt下

第二种是想修改训练数据 ,再继续训练

同样进行上述步骤,最后在runs\train\exp_ 的opt.yaml中修改参数即可

多gpu训练

python -m torch.distributed.launch --nproc_per_node 2 train.py --batch-size 64 --data coco.yaml --weights yolov5s.pt

具体参考YOLOv5多GPU训练_yolov5 训练时检测到多块gpu会自动分布式训练吗-CSDN博客

有什么问题可以在评论区交流呀

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值