YOLO的train.py核心代码含义
def parse_opt(known=False):
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
parser.add_argument('--data', type=str, default=ROOT / 'det_sample/Alternaria_Boltch/data.yaml', help='dataset.yaml path')
parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=300, help='total training epochs')
parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs, -1 for autobatch')
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
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('--noval', action='store_true', help='only validate final epoch')
parser.add_argument('--noautoanchor', action='store_true', help='disable AutoAnchor')
parser.add_argument('--noplots', action='store_true', help='save no plot files')
parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
parser.add_argument('--cache', type=str, nargs='?', const='ram', help='image --cache ram/disk')
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('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')
parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')
parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')
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('--cos-lr', action='store_true', help='cosine LR scheduler')
parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
parser.add_argument('--patience', type=int, default=300, help='EarlyStopping patience (epochs without improvement)')
parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')
parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')
parser.add_argument('--seed', type=int, default=0, help='Global training seed')
parser.add_argument('--local_rank', type=int, default=-1, help='Automatic DDP Multi-GPU argument, do not modify')
# Logger arguments
parser.add_argument('--entity', default=None, help='Entity')
parser.add_argument('--upload_dataset', nargs='?', const=True, default=False, help='Upload data, "val" option')
parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval')
parser.add_argument('--artifact_alias', type=str, default='latest', help='Version of dataset artifact to use')
return parser.parse_known_args()[0] if known else parser.parse_args()
以下是代码中各行的详细解释:
def parse_opt(known=False):
- 定义了一个名为
parse_opt
的函数,接受一个布尔参数known
,用于决定是否返回解析的已知参数(True
)或所有参数(False
)。
parser = argparse.ArgumentParser()
- 创建一个
ArgumentParser
对象,用于管理和解析命令行参数。
parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
- 添加
--weights
参数,指定初始权重文件的路径。type=str
表示参数值应为字符串类型,default
提供了一个默认值,help
提供了对该参数的描述。
parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
- 添加
--cfg
参数,指定模型配置文件(model.yaml
)的路径。
parser.add_argument('--data', type=str, default=ROOT / 'det_sample/Alternaria_Boltch/data.yaml', help='dataset.yaml path')
- 添加
--data
参数,指定数据集配置文件(dataset.yaml
)的路径。default
提供了一个默认路径。
parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
- 添加
--hyp
参数,指定超参数配置文件(hyp.scratch-low.yaml
)的路径。
parser.add_argument('--epochs', type=int, default=300, help='total training epochs')
- 添加
--epochs
参数,指定训练的总轮数。type=int
表示参数值应为整数类型,default
提供了一个默认值。
parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs, -1 for autobatch')
- 添加
--batch-size
参数,指定训练的总批量大小。-1
表示自动批量大小调整。
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
- 添加
--imgsz
、--img
和--img-size
参数,用于指定训练和验证的图像大小。提供了三个别名,均为整数类型,默认值为640
像素。
parser.add_argument('--rect', action='store_true', help='rectangular training')
- 添加
--rect
参数,为布尔型开关参数。如果指定该参数,表示启用矩形训练。
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
- 添加
--resume
参数,允许从最近的检查点恢复训练。nargs='?'
表示该参数可选,const=True
使得如果该参数存在,则其值为True
,default=False
表示默认为False
。
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
- 添加
--nosave
参数,为布尔型开关参数。如果指定该参数,表示只保存最终的检查点。
parser.add_argument('--noval', action='store_true', help='only validate final epoch')
- 添加
--noval
参数,为布尔型开关参数。如果指定该参数,表示只在最后一个周期进行验证。
parser.add_argument('--noautoanchor', action='store_true', help='disable AutoAnchor')
- 添加
--noautoanchor
参数,为布尔型开关参数。如果指定该参数,表示禁用自动锚点。
parser.add_argument('--noplots', action='store_true', help='save no plot files')
- 添加
--noplots
参数,为布尔型开关参数。如果指定该参数,表示不保存绘图文件。
parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
- 添加
--evolve
参数,允许进化超参数。nargs='?'
表示该参数可选,const=300
表示如果参数存在,默认值为300
。
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
- 添加
--bucket
参数,指定 Google Cloud Storage 的桶名。
parser.add_argument('--cache', type=str, nargs='?', const='ram', help='image --cache ram/disk')
- 添加
--cache
参数,指定图像缓存类型。nargs='?'
表示该参数可选,const='ram'
表示如果参数存在,默认值为'ram'
。
parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
- 添加
--image-weights
参数,为布尔型开关参数。如果指定该参数,表示使用加权图像选择进行训练。
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
- 添加
--device
参数,指定 CUDA 设备(如0
、0,1,2,3
或cpu
)。
parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
- 添加
--multi-scale
参数,为布尔型开关参数。如果指定该参数,表示在训练过程中随机调整图像大小(±50%)。
parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
- 添加
--single-cls
参数,为布尔型开关参数。如果指定该参数,表示将多类别数据作为单类别进行训练。
parser.add_argument('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')
- 添加
--optimizer
参数,指定优化器类型。choices
限定了允许的值,default
提供了默认值。
parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
- 添加
--sync-bn
参数,为布尔型开关参数。如果指定该参数,表示使用同步批归一化,仅在分布式数据并行(DDP)模式下可用。
parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')
- 添加
--workers
参数,指定数据加载器的最大工作线程数(每个 RANK,在 DDP 模式下)。
parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')
- 添加
--project
参数,指定保存训练结果的项目路径。
parser.add_argument('--name', default='exp', help='save to project/name')
- 添加
--name
参数,指定实验名称,用于保存训练结果。
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
- 添加
--exist-ok
参数,为布尔型开关参数。如果指定该参数,表示允许覆盖已有的项目/名称,不自动增加版本号。
parser.add_argument('--quad', action='store_true', help='quad dataloader')
- 添加
--quad
参数,为布尔型开关参数。如果指定该参数,表示启用四倍数据加载器。
parser.add_argument('--cos-lr', action='store_true', help='cosine LR scheduler')
- 添加
--cos-lr
参数,为布尔型开关参数。如果指定该参数,表示使用余弦学习率调度器。
parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
- 添加
--label-smoothing
参数,指定标签平滑系数(默认为0.0
)。
parser.add_argument('--patience', type=int, default=300, help='EarlyStopping patience (epochs without improvement)')
- 添加
--patience
参数,指定早停的耐心(没有改善的轮数后停止训练,默认为300
)。
parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')
- 添加
--freeze
参数,指定冻结的层数。nargs='+'
表示接受一个或多个值,type=int
表示值为整数类型,default
提供了默认值。
``