【yolov5的简单使用】3.模型的训练

1.如何把train.py文件跑起来

首先默认使用的coco128数据集,这个数据集需要放到根目录的同等级文件夹下,如果没有会自动从这个github网址上下载

一般在pycharm上是下载不了的,因此需要挂上加速器手动从该网址上下载,并且把它放到这个文档指定的目录中。

接下来是设置batch_size,一开始是16,本电脑的显卡大概4G显存,经过测试4才可以跑起来。

接着是运行过程中遇到的bug及解决方法。

刚刚运行的时候报这个错,这是还没开始第一轮训练的时候就报的错,大概意思就是dataset里面有两行使用了np.int这个数据类型,在numpy1.2之后的版本就已经不支持了,现在只支持使用np.int32或者np.int64。或者说直接把它改成int也可以。

这两处报错的地方分别是dataset.py的第411行和第439行,如下图所示

按照他的提示,改成int或者np.int32或者np.int64之后,再运行,会发现它能跑完第一轮的train和val,但是在生成标签的时候会报错

这次的报错根源在torch里面,这样就不能随便修改torch里面的代码了。但是发现最深一层的错误还是由于numpy造成的,报错的理由是没有找到与这个函数相匹配的数据类型,猜测是作者写yolov5的第五代版本的时候用到了numpy之前的版本的一些写法,而我现在电脑上装的1.24版本已经不支持这种写法了。现在有两个选择,一个是下载1.2版本之前的numpy,并且把刚刚在dataset文件中改的两行内容改回去,另一个选择是选择numpy1.2版本以上,但是比1.24稍微低一点的版本看看能不能解决问题。上网搜寻只有一个帖子涉及到这个问题,它使用的numpu是1.23.5版本,于是从删除原来的numpy:pip uninstall numpy,并且从镜像中下载1.23.5版本的numpy,成功解决问题

pip install numpy==1.23.5 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

运行结束后,训练的数据会存放在./runs/train/exp文件夹下,其中weights文件夹下存放的是权值文件,best.pt是效果最好的那一轮的权值,last.pt是最近一次训练的那一轮的权值。其他文件则是一些数据的可视化。

2.对所有参数的解释

#指定初始化的权值的路径,也就是在这个权值文件的基础上进行训练,为空就是从头开始训练
parser.add_argument('--weights', type=str, default='yolov5m.pt', help='initial weights path')
#指定模型的结构,从./models里面的四个yolov5.yaml里面选择
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')
#设置超参数,可以用data/hyp.scratch.yaml和data/hyp.finetune.yaml,其中finetune是微调,适用于voc数据集
parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
#设施训练多少轮
parser.add_argument('--epochs', type=int, default=300)
#设置batchsize,本电脑显存设为4
parser.add_argument('--batch-size', type=int, default=4, 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')
#断点继续训练,假如在exp16文件夹下存放训练到第9轮就中断运行的权值文件,那么吧default改成"runs/train/exp16/weights/last.pt"
#这样就会在它的基础上继续从第十轮开始训练。注意路径不能传根目录下的“yolov5m.pt”文件,因为他还需要exp文件夹下的其他文件来知道训练的具体情况
#因此路径只能从runs/train/exp()下面选
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')
#设置为true就使用adam优化器,不然就选另一个
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')
#workers建议从0逐渐往上加,看看能不能运行
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')
#设置为true就只会保存在exp里面
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')

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-17 18:20:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-17 18:20:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-17 18:20:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-17 18:20:01       20 阅读

热门阅读

  1. 二十一、Pod的安全策略

    2024-02-17 18:20:01       30 阅读
  2. gem5学习(20):替换策略——Replacement Policies

    2024-02-17 18:20:01       30 阅读
  3. Linux-SSH被攻击-解决方案

    2024-02-17 18:20:01       32 阅读
  4. MySQL篇之索引创建与失效

    2024-02-17 18:20:01       30 阅读
  5. C#面:简述 CTS , CLS , CLR , IL

    2024-02-17 18:20:01       31 阅读
  6. 算法——图论——最短路径——Floyd / 传递闭包

    2024-02-17 18:20:01       31 阅读
  7. C语言——oj刷题——获取月份天数

    2024-02-17 18:20:01       31 阅读
  8. 【Linux】指令 【whereis】

    2024-02-17 18:20:01       32 阅读
  9. C++特殊类设计

    2024-02-17 18:20:01       31 阅读
  10. 257.二叉树的所有路径

    2024-02-17 18:20:01       31 阅读