赞
踩
这里使用python环境训练而不使用ultralytics包,内容参考docs.ultralytics
- from ultralytics import YOLO
-
- # 建议添加一个main作为程序入口,可以避免某些多线程报错
- if __name__ == '__main__':
-
- ## 加载模型(三选一)
- # 1.使用配置文件构建模型
- model = YOLO("yolov8n.yaml") # build a new model from scratch
- # 2.使用预训练模型构建
- model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
- # 3.使用预训练模型
- model = YOLO('yolov8n.yaml').load('yolov8n.pt') # 从配置构建并传递权重#
-
- ## 使用模型
-
- # 训练,可以传入的传参参考ultralytics/cfg/default.yaml里面的Train settings部分
- model.train(data="coco128.yaml", epochs=3) # train the model
-
- # 评估
- metrics = model.val() # evaluate model performance on the validation set
-
- # 推理,可以传入的传参参考ultralytics/cfg/default.yaml里面的Prediction settings部分
- results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
- # 导出onnx格式模型文件
- path = model.export(format="onnx") # export the model to ONNX format
model = YOLO("yolov8n.yaml"),会从Model中的_new方法构建模型
- # 根据yaml配置文件初始化一个模型
- def _new(self, cfg: str, task=None, model=None, verbose=True):
- """
- Initializes a new model and infers the task type from the model definitions.
- Args:
- cfg (str): model configuration file
- task (str | None): model task
- model (BaseModel): Customized model.
- verbose (bool): display model info on load
- """
- cfg_dict = yaml_model_load(cfg) # 加载yaml配置文件
- self.cfg = cfg # self.cfg存储模型配置文件路径
-
- # 如果传入的任务类型参数不为空,则将其赋值给实例变量task;调用guess_model_task函数从模型配置文件中head或文件名猜测任务类型
- self.task = task or guess_model_task(cfg_dict)
- # model为none,执行smart_load方法返回任务模型的类(ClassificationModel/DetectionModel等)
- model = model or self.smart_load('model')
- # 使用模型配置字典,verbose和RANK实例化上行任务模型的类。verbose是日志显示
- self.model = model(cfg_dict, verbose=verbose and RANK == -1) # build model
- # 将配置文件路径保存到self.overrides字典中
- self.overrides['model'] = self.cfg
-
- # Below added to allow export from yamls
- # 将默认配置文件ROOT / 'cfg/default.yaml'参数字典与self.overrides字典合并,即为default.yaml中的model赋值了。
- args = {**DEFAULT_CFG_DICT, **self.overrides} # combine model and default args, preferring model args
- # 给实例化的self.model添加args属性,args为一个配置参数的字典
- self.model.args = {k: v for k, v in args.items() if k in DEFAULT_CFG_KEYS} # attach args to model
- # 给实例化的self.model添加task属性
- self.model.task = self.task
model = YOLO("yolov8n.pt"),会从Model中的_load方法构建模型。
- # 根据.pt权重文件初始化一个模型
- def _load(self, weights: str, task=None):
- """
- Initializes a new model and infers the task type from the model head.
- Args:
- weights (str): model checkpoint to be loaded
- task (str | None): model task
- """
- # 获取weights文件后缀名
- suffix = Path(weights).suffix
- # 如果是.pt,调用attempt_load_one_weight(weights)方法尝试加载该模型
- if suffix == '.pt':
- self.model, self.ckpt = attempt_load_one_weight(weights)
- # 从模型参数中获取任务类型 self.task,(eg:detect)
- self.task = self.model.args['task']
- # 调用_reset_ckpt_args方法保存{“data”:值,"imgsz":值,"single_cls":值 ,"task":值}到self.overrides字典和更新self.model.args
- self.overrides = self.model.args = self._reset_ckpt_args(self.model.args)
- # 模型路径赋值给self.ckpt_path
- self.ckpt_path = self.model.pt_path
- # 不是“.pt”后缀的权重文件
- else:
- # 检查文件是否存在,如果不存在,则尝试下载或查找文件,返回文件路径。
- weights = check_file(weights)
- self.model, self.ckpt = weights, None
- # 调用guess_model_task从文件名推测任务名
- self.task = task or guess_model_task(weights)
- # 权重文件路径赋值给self.ckpt_path
- self.ckpt_path = weights
-
- # 模型路径 weights 和任务类型 self.task 分别存储在 self.overrides字典中
- self.overrides['model'] = weights
- self.overrides['task'] = self.task
model = YOLO('yolov8n.yaml').load('yolov8n.pt') ,会从Model中的_new方法构建模型,并调用load方法将.pt文件模型参数加载到模型中。
- @smart_inference_mode()
- def load(self, weights='yolov8n.pt'):
- # 将指定权重文件中的参数加载到模型中。使用eg:model = YOLO('yolov8n.yaml').load('yolov8n.pt')构建模型时用到
- """
- Transfers parameters with matching names and shapes from 'weights' to model.
- """
- # 检查self.model 是PyTorch 模型
- self._check_is_pytorch_model()
-
- # 如果传入的 weights 参数是字符串路径或 Path 对象,
- # 则调用 attempt_load_one_weight 方法尝试加载单个权重文件。
- # 将加载后的模型赋值给 weights,并将当前模型的相关信息(epoch,best_fitness,model,ema,train_args...)赋值给 self.ckpt。
- if isinstance(weights, (str, Path)):
- weights, self.ckpt = attempt_load_one_weight(weights)
- # 将weights中与self.model模型参数名称和形状匹配的参数加载到模型中
- self.model.load(weights)
- return self
程序进入ultralytics/models/yolo/model.py的YOLO类中执行初始化,继承Model类
- # Ultralytics YOLO 声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。