yolo.py代码精读

在阅读代码过程中碰到的一些小问题,大家可以查阅目录找找有没有自己需要的地方,分为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

C:\Users\Lenovo\AppData\Local\Programs\Python\Python313\python.exe C:\Users\Lenovo\Desktop\YOLOv8-main\yolo_train.py Traceback (most recent call last): File "C:\Users\Lenovo\Desktop\YOLOv8-main\yolo_train.py", line 5, in <module> model = YOLO('yolov8n.pt') File "C:\Users\Lenovo\Desktop\YOLOv8-main\ultralytics\yolo\engine\model.py", line 55, in __init__ {'.pt': self._load, '.yaml': self._new}[Path(model).suffix](model) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "C:\Users\Lenovo\Desktop\YOLOv8-main\ultralytics\yolo\engine\model.py", line 83, in _load self.model, self.ckpt = attempt_load_one_weight(weights) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\Lenovo\Desktop\YOLOv8-main\ultralytics\nn\tasks.py", line 341, in attempt_load_one_weight ckpt = torch.load(attempt_download(weight), map_location='cpu',weights_only=False) # load File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python313\Lib\site-packages\torch\serialization.py", line 1530, in load return _load( opened_zipfile, ...<3 lines>... **pickle_load_args, ) File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python313\Lib\site-packages\torch\serialization.py", line 2119, in _load result = unpickler.load() File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python313\Lib\site-packages\torch\serialization.py", line 2108, in find_class return super().find_class(mod_name, name) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ ModuleNotFoundError: No module named 'ultralytics.nn.modules.conv'; 'ultralytics.nn.modules' is not a package
08-16
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值