本专栏会手把手带你从源码了解YOLOv10(后续会陆续介绍YOLOv8、RTDETR等模型),尽可能地完整介绍整个算法,这个专栏会持续创作与更新,大家如果想要本文PDF和思维导图,后台私信我即可(创作不易,不喜勿喷),大家如果发现任何错误和需要修改的地方都可以私信我,我会统一修改。
新建test.py
调动第四行初始化YOLOv10 (ultralytics/models/yolov10/model.py)
YOLOv10继承自BaseModel类,继续做初始化 (ultralytics/engine/model.py)
调用BaseModel类的_load方法加载模型权重 (ultralytics/engine/model.py)
在ultralytics/nn/tasks.py文件中调用attempt_load_one_weight函数加载ckpt,解析得到里面的模型架构
根据pt模型torch加载得到ckpt (ultralytics/nn/tasks.py)
根据ckpt推理得到任务、参数、模型名称等信息,至此完成YOLOv10s模型的初始化(ultralytics/engine/model.py)
之后调用第一张图的第六行,调用Model类的predict方法(ultralytics/engine/model.py)执行检测(is_cli:flag,是否是直接在命令行输入命令)
继续调用_smart_load方法加载YOLOv10s模型的predictor (ultralytics/engine/model.py)
ultralytics/models/yolov10/model.py
YOLOv10DetectionPredictor继承自BasePredictor,调用__init__方法做初始化(ultralytics/engine/predictor.py)
初始化完成之后,第8附图的第434行调用方法,构建后端(ultralytics/engine/predictor.py)
调用AutoBackend类的__init__方法,初始化fp16、输入格式、步长、模型、权重融合等(ultralytics/nn/autobackend.py)
继续在ultralytics/nn/autobackend.py中更新metadata、locals以及disable gradients
最后将在ultralytics/engine/predictor.py中将模型设为评估模式
上述初始化完成之后,在ultralytics/engine/model.py中准备开始预测
调用BasePredictor类的__call__方法(ultralytics/engine/predictor.py)
继续调用BasePredictor类的stream_inference方法(调用ultralytics/engine/predictor.py)
调用BasePredictor类的setup_source方法准备数据;目标检测时第183行的transformers为None(ultralytics/engine/predictor.py)
在ultralytics/data/build.py中判断source类型,加载source
第294、295行加载图片和视频路径;第301行标记video_flag(ultralytics/data/loaders.py)
在记载source完成之后,在ultralytics/engine/predictor.py中继续初始化新建文件夹,warmup,准备开始测试