修改顺序
-
models/common.py —> 加入新增网络结构
如上图外卖再common.py文件中添加了SEAttention模块 -
models/yolov5*.yaml —>修改现有模型结构配置文件(当引入新的层时,要修改后序的结构中的from参数)
我们选择将其添加到backbone的最后一层,-1代表结果来自于上一层,1代表重复一次计算,SEAttention代表方法名字,[1024,2]其中1024代表通道数,和上一层一样,2的位置可以自己写,一般写2。
但是需要注意的是,如果我们再backbone的最后一层添加上了新的一层,那么下面的其他层引用的层序号也要随之改变,比如说像head层中,第12层就是引用了第6层的结果,但是它不需要改变,但是第19层中引用了14层的结果,但是现在14层得+1,所以引用的将会是第15层的结果。
-
models/yolo.py —>设定网络结构的传参细节(当新的自定义模块中存在输入输出维度时,要使用gw调整输出维度)
在def parse_model(d, ch): # model_dict, input_channels(3)方法中,添加一下内容
然后接着再打开train.py文件即可;
- trian.py —>训练时指定模型结构配置文件
相应模块内容讲解:
yolov*.yaml
- from:表示数据来源于哪一层,-1代表来自于上一层
- number:表示要执行几次该模块
- module:表示此模块的名称
- args:该模块的参数
- depth:和number进行计算的,比如说number=3 那么真正的重复次数是3*0.33=0.99<1,那么还是重复一次,如果小于1,那么会取1,大于1就取算出来的次数重复。
- width:是用于计算输出的实际通道数,比如说args第一个参数是64,那么64*0.5=32,那么实际的通道数会是32。
yolo.py
主要看懂下面这个模块的内容就会明白