模型架构是按照配置文件yaml进行搭建的。不同的版本的yaml在model文件夹中,每一版本的模型分为两个部分backbone和head。
每一行代表了一个运算单元,这里按照YOLOV5结构图可以方便理解。每一行有四个参数,参数1:代表输入从运算单元获得,-1代表从上一个单元获得。参数2:代表该运算单元的重复次数。在yolov5中,不同版本就是控制操作单元的重复次数改变的。参数3:该操作单元的名字。参数4:输入的参数。
为了方便理解,说明yaml文件中CONV=下图的CBL,C3=下图的CSP。
model\yolo.py可以直接运行,方便理解模型的初始化过程。
parse_model开始按照yaml搭建每一层网络,最重要的是254行
m_就是初始化后的当前层的运算单元。
在model类中forward_once中定义了一次前向传播的过程,其中当当前操作单元需要两个输入时如contact,那么之前yaml文件中的第一个参数就派上用场了。
y是保存的是之前每一层的输出,如果当前的操作单元是多个输入,那么就按照yaml中层数取出之前的输出。