1.错误更改
main中相关参数
python
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/yolov5s.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=3)
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=0, 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()
coco128.yaml中代码:
python
# COCO 2017 dataset http://cocodataset.org - first 128 training images
# Train command: python train.py --data coco128.yaml
# Default dataset location is next to /yolov5:
# /parent_folder
# /coco128
# /yolov5
# download command/URL (optional)
download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: coco128/images/train2017 # 128 images
val: coco128/images/train2017 # 128 images
# number of classes
nc: 80
# class names
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' ]
首先你先运行一次train.py然后他会帮你下载coco127数据集,然后如果出现unzip的错误
你就需要自己解压缩一下。
其中coco128.yaml中的train与val是一个文件路径且该路径是你解压以后的images/train2017
如果下载不了资源如下:【免费】coco128数据集,coco128数据集下载_coco128数据集下载资源-CSDN文库
此时应该会报错多处:
一处是:
python
AttributeError: module 'numpy' has no attribute 'int'.
此时你要去上面找报错的.py文件,窗口一般有,然后将改窗口中的所有np.int改成int
我改了好多处这个错每次运行都改一次直到没有这个错误
另一处是:
python
RuntimeError: result type Float can't be cast to the desired output type long int
这里的long int可能是int64
然后按照本博客更改就没问题了:
2.相关参数详解
参数解释:default是默认的意思,action是选中后才执行的意思。
第一个是默认权重(初始化权重),如果从头开始训练的话可以把default改成'',第二个参数是模型配置,就是第一个训练模型的相关配置,相关配置在下图文件中:
上述两行按上图配置的意思为,本次初始权重无,模型相关配置为yolov5s。
上面的data表示本次训练所用数据集,然后hyp.scratch是适配coco数据集的超参数。
上面两个第一个是训练轮数,我设置为3轮为了快点训练结束,一般是300,batchsize类似于我另一个小土堆系列学习笔记里面的batchsize就是一次处理多少张图片。
img-size是处理时把一张图片压缩后的大小,建议与参数--cfg中的模型要求大小相匹配,下面一个如果选中就是利用矩阵训练方式训练(用于图像处理时减少图像中不必要信息的产生)。img-size匹配模型如下:
python
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
本行代码就是问你是否要在上次训练完以后的模型接着训练注意此时把default改成True不行 ,应当把defalut="上次模型的路径",注意此时会沿用上一次的基本参数,比如我把epochs改成5,然后resume上一次的由于上一次的epochs是3,他也只训练3轮具体解释如下图:
上面一个如果指定了就是只保存最后一轮的关键数据(.pt文件),下面一个如果选中的就是仅在最后一轮测试测试集。
python
parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
此行参数可以看这个blog目标检测之锚点与锚框_锚点和锚框-CSDN博客
python
parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
此行代码是用于超参数调优,具体如下链接:yolov5选择合适自己的超参数-超参数进化Hyperparameter Evolution_yolov5超参数进化-CSDN博客
python
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
上一行参数暂时无用,下面一行指定后可以将图片放入缓存区以便于更快训练。
可以看下面的链接:YOLOV5代码理解------类权重系数和图像权重系数_yolov5 imagesweight-CSDN博客
python
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%%')
上面一个是用于选定训练设备,下面一个是对图像进行变换让图像大小变换。
python
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')
上一个参数是是否用多重类别训练如果选中就是不用,下面一个是是否使用Adam优化器优化梯度否则为SGD。
python
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')
--sync-bn 是否开启跨卡同步BN;开启参数后即可使用 SyncBatchNorm多 GPU 进行分布式训练。
--local_rank是ddp参数,不可更改,用于单卡多GPU分布训练。
python
parser.add_argument('--workers', type=int, default=0, 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')
'--workers'数据装载时cpu所使用的线程数,在每轮加载图片时,dataloader一次性创建workers数量个工作进程,每个进程都负责调度一个batchsize的数据,并加载到内存中,dataloader从内存找到本轮所需要的batch,如果找到就使用,如果没有就要继续加载batch到内存。、
'--project'训练结果存放地默认时"runs/train"
--entity是以实体的方式保存模型,在机器学习和深度学习的上下文中,"实体"(entity)通常指的是用于版本控制、追踪实验以及管理模型训练过程中的各种资源的一个标识符或名称。这个概念在使用一些特定的工具和服务时尤为重要,比如Weights & Biases (W&B),它是一个流行的机器学习实验跟踪平台。
--name就是新建一个default中的一个文件存参数project下面,最后每次的训练都存在该文件夹下。
python
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')
上一个就是如果选中了就不新建name里面的文件夹了比如第一个exp,如果在训练一个就会有exp1,如果选中这个参数,再一次训练就不会新建一个exp1而是存在exp里。
下一个就是quad可以看看这个,yolov5的quad dataloader参数讲解-CSDN博客
python
parser.add_argument('--linear-lr', action='store_true', help='linear LR')
如果选中就是上一个(线性方式)来调整优化器学习速率,下面一个就是用cos的方式来修改优化器速率。
python
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')
'--label-smoothing'是光滑标签防止过拟合。
--upload_dataset上传数据集作为Artifact Table,在Weights & Biases (W&B) 中,Artifact 是一种用于存储和版本控制数据集、模型和其他文件的机制。Artifact 可以帮助你更好地管理和跟踪实验中使用的数据,确保可重复性和透明性。Artifact Table 则是一种结构化的方式来展示和分析这些数据。Artifact Table 允许你以表格的形式存储和查看数据集,这对于数据分析和可视化非常有用。
'--bbox_interval'可以指定边界框的日志间隔用于W&B库
在使用 Weights & Biases (W&B) 进行模型训练时,记录边界框(bounding box)图像可以帮助你可视化模型的预测结果,并跟踪其性能随时间的变化。设置边界框图像的日志记录间隔可以控制这些图像被记录的频率,从而平衡日志的详细程度和存储开销。
'--save_period'设置每隔几轮保存一个模型日志,默认“-1”是不用w&b库保存
python
parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
数据集版本标识默认采用最后一个版本。