YOLO12代码解读:如何通过yaml文件构建网络
第一步:在训练py文件里面写: model = YOLO('ultralytics/cfg/models/v12/yolov12x-cthv2.yaml')
说白了,就用一个yaml文件作为参数传递到类:yolo的__init__ 函数里面
第二步:
def __init__(self, model="yolo11n.pt", task=None, verbose=False): """Initialize YOLO model, switching to YOLOWorld if model filename contains '-world'.""" path = Path(model) if "-world" in path.stem and path.suffix in {".pt", ".yaml", ".yml"}: # if YOLOWorld PyTorch model new_instance = YOLOWorld(path, verbose=verbose) self.__class__ = type(new_instance) self.__dict__ = new_instance.__dict__ else: # Continue with default YOLO initialization super().__init__(model=model, task=task, verbose=verbose)

第三步:就是在进入了:ultralytics/engine/model.py 这个文件里面的类:
class Model(nn.Module, PyTorchModelHubMixin, repo_url="https://github.com/ultralytics/ultralytics", pipeline_tag="object-detection", license="agpl-3.0"):
这个类是很复杂,很核心。
https://i.askurl.cn/TgLbIFKM(这里面对参数部分做出了解释,很复杂)
第四步:进入C:\Python311\Lib\site-packages\torch\nn\modules\module.py 的class Module: 的def __init__(self, *args, **kwargs) -> None:
这个是最深层的类,属于torch 范畴了,他没有父类了, 这个Module 有2000多行代码。尼玛,好复杂

这里面就是传递进来一个实例而已
第五步:回到ultralytics/engine/model.py 代码往下执行,经过一系列判断,最后进入:
# Load or create new YOLO model if Path(model).suffix in {".yaml", ".yml"}: self._new(model, task=task, verbose=verbose) else: self._load(model, task=task)
进入:Model._new


浙公网安备 33010602011771号