在阅读代码过程中碰到的一些小问题,大家可以查阅目录找找有没有自己需要的地方,分为parse_model和class Detect两部分,不要细看写的很乱。
1.parse_model函数,读入模型yaml中的参数定义
self.model, self.save = parse_model(deepcopy(self.yaml), ch=[ch]) # model, savelist
1.1 ch的含义
input channels

第一列,即全是-1的这一列,代表输入层,如果是-1就代表是上一层。而Focus这一列是模块的名字,卷积核个数后面分别是卷积核尺寸和降采样尺寸。
m = eval(m) if isinstance(m, str) else m
eval()函数的解释在下面(4)中
1.2 layers, save, c2 = [ ], [ ], ch[-1]
- layers是用来放模型的积木的,在循环中逐渐把yaml里面的积木读取到里面去
- ch的解释在下面1.4 中
1.3 for i, (f, n, m, args) in enumerate( d['backbone'] + d['head'] ) :

- from:输入层,-1代表上一层
- number:卷积层的数量,后面有利用这个n和gd去算不同大小模型对应卷积层数量n = n_ = max(round(n * gd), 1) if n > 1 else n (在下面n的地方有介绍)
n = n_ = max(round(n * gd), 1) if n > 1 else n
1.4 eval()函数
在全局变量和局部变量的上下文中计算给定的源。m是module
for j, a in enumerate(args):
try:
args[j] = eval(a) if isinstance(a, str) else a # eval strings
except NameError:
pass
上面这些是解析args里面的str ,j是序号,a获取args中的数据,eval strings
像这种:

比如backbone

最低0.47元/天 解锁文章
1369

被折叠的 条评论
为什么被折叠?



