数据标注
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博客
有什么问题可以在评论区交流呀