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

 

posted @ 2025-04-27 14:45  wenluderen  阅读(292)  评论(0)    收藏  举报