>- **🍨 本文为[🔗365天深度学习训练营(https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客**
>- **🍖 原作者:[K同学啊](https://mtyjkh.blog.youkuaiyun.com/)**
今天我们就依据yolov5的yaml文件来解析common.py。
首先看看需要导入那些包和基本配置:
import ast
import contextlib
import json
import math
import platform
import warnings
import zipfile
from collections import OrderedDict, namedtuple
from copy import copy
from pathlib import Path
from urllib.parse import urlparse
import cv2
import numpy as np
import pandas as pd
import requests
import torch
import torch.nn as nn
from PIL import Image
from torch.cuda import amp
从yaml文件我们可以找到经常出现的模块:Conv,C3,SPP,Concat。接下来对这些比较重要的模块进行介绍。
模块介绍
1.1 autopad
def autopad(k, p=None, d=1):
"""
用于Conv函数和Classify函数中
根据扩张系数d对卷积核的大小进行调整,再根据卷积核大小k自动计算卷积核padding数(0填充)
:params k: 卷积核的大小
:return p: 自动计算的需要pad值(默认为0填充)
:params d: 卷积核的扩张系数
"""
if d > 1:
k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k] # actual kernel-size
if p is None:
p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad
return p
这个模块可以根据输入的卷积核大小来计算pad值,主要再Conv和Classify模块中会使用到。
1.2 Conv
卷积模块,它由一个卷积层,Bn层和激活函数构成。