目标检测 YOLOv5 - 模型的样子

flyfish

文章目录

  • 目标检测 YOLOv5 - 模型的样子
    • 开始加载模型文件
    • 模型的层
    • 模型的属性
    • 模块的名称以及模块本身
    • 模型的权重
    • 模型权重的名字和权重
    • 完整的model
    • 完整模型图片展示

版本: YOLOv5:v5
以yolov5s.pt为例查看模型的样子

开始加载模型文件

yolov5s.pt
def attempt_load(weights, map_location=None):
模型内容如下

ckpt: {'epoch': -1,'best_fitness': array([0.37287]),'training_results': None,'model': Model((model): Sequential((0): Focus((conv): Conv((conv): Conv2d(12, 32, kernel_size = (3, 3), stride = (1, 1), padding = (1, 1), bias = False)(bn): BatchNorm2d(32, eps = 0.001, momentum = 0.03, affine = True, track_running_stats = True)(act): SiLU()))   ......(24): Detect((m): ModuleList((0): Conv2d(128, 255, kernel_size = (1, 1), stride = (1, 1))(1): Conv2d(256, 255, kernel_size = (1, 1), stride = (1, 1))(2): Conv2d(512, 255, kernel_size = (1, 1), stride = (1, 1)))))),'optimizer': None,'wandb_id': None
}

模型的层

具体哪一层可以通过model.model[下标]的形式获取。负数表示倒着获取

倒数第一层
model.model[-1]

Detect((m): ModuleList((0): Conv2d(128, 255, kernel_size=(1, 1), stride=(1, 1))(1): Conv2d(256, 255, kernel_size=(1, 1), stride=(1, 1))(2): Conv2d(512, 255, kernel_size=(1, 1), stride=(1, 1)))
)

倒数第二层
model.model[-2]


C3((cv1): Conv((conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU(inplace=True))(cv2): Conv((conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU(inplace=True))(cv3): Conv((conv): Conv2d(512, 512, kernel_size=(1, 1), stride=(1, 1))(act): SiLU(inplace=True))(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU(inplace=True))(cv2): Conv((conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU(inplace=True))))
)

模型的属性

for name,value in vars(model).items():print('%s=%s'%(name,value))

例如获取类别名称model.names
可以获取的属性包括以下内容

training = False
_parameters = OrderedDict()
_buffers = OrderedDict()
_non_persistent_buffers_set = set()
_backward_hooks = OrderedDict()
_forward_hooks = OrderedDict()
_forward_pre_hooks = OrderedDict()
_state_dict_hooks = OrderedDict()
_load_state_dict_pre_hooks = OrderedDict()
_modules = OrderedDict([('model', Sequential((0): Focus((conv): Conv((conv): Conv2d(12, 32, kernel_size = (3, 3), stride = (1, 1), padding = (1, 1))(act): SiLU(inplace = True)))
......(24): Detect((m): ModuleList((0): Conv2d(128, 255, kernel_size = (1, 1), stride = (1, 1))(1): Conv2d(256, 255, kernel_size = (1, 1), stride = (1, 1))(2): Conv2d(512, 255, kernel_size = (1, 1), stride = (1, 1))))
))])
yaml = {'nc': 80,'depth_multiple': 0.33,'width_multiple': 0.5,'anchors': [[10, 13, 16, 30, 33, 23],[30, 61, 62, 45, 59, 119],[116, 90, 156, 198, 373, 326]],'backbone': [[-1, 1, 'Focus', [64, 3]],[-1, 1, 'Conv', [128, 3, 2]],[-1, 3, 'C3', [128]],[-1, 1, 'Conv', [256, 3, 2]],[-1, 9, 'C3', [256]],[-1, 1, 'Conv', [512, 3, 2]],[-1, 9, 'C3', [512]],[-1, 1, 'Conv', [1024, 3, 2]],[-1, 1, 'SPP', [1024, [5, 9, 13]]],[-1, 3, 'C3', [1024, False]]],'head': [[-1, 1, 'Conv', [512, 1, 1]],[-1, 1, 'nn.Upsample', ['None', 2, 'nearest']],[[-1, 6], 1, 'Concat', [1]],[-1, 3, 'C3', [512, False]],[-1, 1, 'Conv', [256, 1, 1]],[-1, 1, 'nn.Upsample', ['None', 2, 'nearest']],[[-1, 4], 1, 'Concat', [1]],[-1, 3, 'C3', [256, False]],[-1, 1, 'Conv', [256, 3, 2]],[[-1, 14], 1, 'Concat', [1]],[-1, 3, 'C3', [512, False]],[-1, 1, 'Conv', [512, 3, 2]],[[-1, 10], 1, 'Concat', [1]],[-1, 3, 'C3', [1024, False]],[[17, 20, 23], 1, 'Detect', ['nc', 'anchors']]],'ch': 3
}
save = [4, 6, 10, 14, 17, 20, 23]
names = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign','parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella','handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard','surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange','broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush']
stride = tensor([8., 16., 32.])
nc = 80
hyp = {'lr0': 0.01,'lrf': 0.2,'momentum': 0.937,'weight_decay': 0.0005,'warmup_epochs': 3.0,'warmup_momentum': 0.8,'warmup_bias_lr': 0.1,'box': 0.05,'cls': 0.3,'cls_pw': 1.0,'obj': 0.7,'obj_pw': 1.0,'iou_t': 0.2,'anchor_t': 4.0,'fl_gamma': 0.0,'hsv_h': 0.015,'hsv_s': 0.7,'hsv_v': 0.4,'degrees': 0.0,'translate': 0.1,'scale': 0.9,'shear': 0.0,'perspective': 0.0,'flipud': 0.0,'fliplr': 0.5,'mosaic': 1.0,'mixup': 0.01
}
gr = 1.0
class_weights = tensor([1.20752e-02, ......, 2.12184e+00, 6.56878e-01, 1.56888e+01, 1.59711e+00
], dtype = torch.float64)
_is_full_backward_hook = None

模块的名称以及模块本身

代码


for name, module in model.named_modules():print(name)

这里只输出名字

model
model.0
model.0.conv
model.0.conv.conv
model.0.conv.act
model.1
model.1.conv
model.1.act
......
model.22
model.23
model.23.cv1
model.23.cv1.conv
model.23.cv1.act
model.23.cv2
model.23.cv2.conv
model.23.cv2.act
model.23.cv3
model.23.cv3.conv
model.23.cv3.act
model.23.m
model.23.m.0
model.23.m.0.cv1
model.23.m.0.cv1.conv
model.23.m.0.cv1.act
model.23.m.0.cv2
model.23.m.0.cv2.conv
model.23.m.0.cv2.act
model.24
model.24.m
model.24.m.0
model.24.m.1
model.24.m.2

模型的权重

代码

 list(model.parameters())[0]

内容

Parameter containing:
tensor([[[[-2.73007e-01, -1.44108e+00, -1.18709e+00],[-3.13122e-01, -9.47540e-01, -7.23963e-01],[ 4.31564e-01,  2.05478e+00,  1.50800e+00]],......[[ 8.07673e-01,  1.51624e+00,  2.86977e-01],[-1.81044e+00, -1.48112e+00, -6.51210e-01],[-5.19720e-01, -1.99577e-01,  1.39392e-01]]]])

模型权重的名字和权重

代码

list(model.named_parameters())

model.0.conv.conv.weight是名字

('model.0.conv.conv.weight', Parameter containing:
tensor([[[[-2.73007e-01, -1.44108e+00, -1.18709e+00],[-3.13122e-01, -9.47540e-01, -7.23963e-01],[ 4.31564e-01,  2.05478e+00,  1.50800e+00]],......[[ 8.07673e-01,  1.51624e+00,  2.86977e-01],[-1.81044e+00, -1.48112e+00, -6.51210e-01],[-5.19720e-01, -1.99577e-01,  1.39392e-01]]]]))

完整的model

Model((model): Sequential((0): Focus((conv): Conv((conv): Conv2d(12, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))(1): Conv((conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))(act): SiLU())(2): C3((cv1): Conv((conv): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv3): Conv((conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(32, 32, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))))(3): Conv((conv): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))(act): SiLU())(4): C3((cv1): Conv((conv): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv3): Conv((conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))(1): Bottleneck((cv1): Conv((conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))(2): Bottleneck((cv1): Conv((conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))))(5): Conv((conv): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))(act): SiLU())(6): C3((cv1): Conv((conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv3): Conv((conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))(1): Bottleneck((cv1): Conv((conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))(2): Bottleneck((cv1): Conv((conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))))(7): Conv((conv): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))(act): SiLU())(8): SPP((cv1): Conv((conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): ModuleList((0): MaxPool2d(kernel_size=5, stride=1, padding=2, dilation=1, ceil_mode=False)(1): MaxPool2d(kernel_size=9, stride=1, padding=4, dilation=1, ceil_mode=False)(2): MaxPool2d(kernel_size=13, stride=1, padding=6, dilation=1, ceil_mode=False)))(9): C3((cv1): Conv((conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv3): Conv((conv): Conv2d(512, 512, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))))(10): Conv((conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(11): Upsample(scale_factor=2.0, mode=nearest)(12): Concat()(13): C3((cv1): Conv((conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv3): Conv((conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))))(14): Conv((conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(15): Upsample(scale_factor=2.0, mode=nearest)(16): Concat()(17): C3((cv1): Conv((conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv3): Conv((conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))))(18): Conv((conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))(act): SiLU())(19): Concat()(20): C3((cv1): Conv((conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv3): Conv((conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))))(21): Conv((conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))(act): SiLU())(22): Concat()(23): C3((cv1): Conv((conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv3): Conv((conv): Conv2d(512, 512, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(m): Sequential((0): Bottleneck((cv1): Conv((conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))(act): SiLU())(cv2): Conv((conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(act): SiLU()))))(24): Detect((m): ModuleList((0): Conv2d(128, 255, kernel_size=(1, 1), stride=(1, 1))(1): Conv2d(256, 255, kernel_size=(1, 1), stride=(1, 1))(2): Conv2d(512, 255, kernel_size=(1, 1), stride=(1, 1)))))
)

完整模型图片展示

图片较大,可下载看

目标检测 YOLOv5 - 模型的样子相关推荐

  1. 【深度学习】目标检测 yolov5模型量化安装教程以及转ONXX,torchscript,engine和速度比较一栏表

    模型量化 yolov5 的模型量化,好好看看export.py # YOLOv5

  2. 《深度学习与目标检测 YOLOv5》

    <深度学习与目标检测 YOLOv5> flyfish 基础 深度学习基础 - 向量 深度学习基础 - 累加符号和连乘符号 深度学习基础 - 最大似然估计 深度学习基础 - 朴素贝叶斯 深度 ...

  3. 目标检测 YOLOv5 - 卷积层和BN层的融合

    目标检测 YOLOv5 - 卷积层和BN层的融合 即Conv2d和 BatchNorm2d融合 flyfish 为了减少模型推理时间,YOLOv5源码中attempt_load已经包括两层的合并,主要 ...

  4. 目标检测 YOLOv5 anchor设置

    目标检测 YOLOv5 anchor设置 1 anchor的存储位置 1.1 yaml配置文件中例如 models/yolov5s.yaml # anchors anchors:- [10,13, 1 ...

  5. 目标检测 YOLOv5 自定义网络结构

    目标检测 YOLOv5 自定义网络结构(YOLOv5-ShuffleNetV2) flyfish 版本:YOLOv5:v5 具体已经借鉴的自定义网络结构包括 YOLOv5-MobileNetV3 Mo ...

  6. 目标检测 YOLOv5 - ncnn模型的加密 C++实现封装库和Android调用库示例

    目标检测 YOLOv5 - ncnn模型的加密 C++实现封装库和Android调用库示例 flyfish 文章目录 目标检测 YOLOv5 - ncnn模型的加密 C++实现封装库和Android调 ...

  7. 目标检测 YOLOv5 - 如何提高模型的指标,提高精确率,召回率,mAP等

    目标检测 YOLOv5 - 如何提高模型的指标,提高精确率,召回率,mAP等 flyfish 文中包括了YOLOv5作者分享的提高模型指标小技巧和吴恩达(Andrew Ng)在做缺陷检测项目( ste ...

  8. 目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践

    目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践 flyfish 源码地址 https://github.com/shaoshengsong/rockc ...

  9. 目标检测 YOLOv5网络v6 0版本总结

    目标检测 YOLOv5网络v6.0版本总结 YOLOv5对比YOLOv4 输入端:在模型训练阶段,提出了Mosaic数据增强.自适应锚框计算.自适应图片缩放等: Backbone网络:融合其它检测算法 ...

最新文章

  1. 编写单元测试代码遵守BCDE原则,以保证被测试模块的交付质量,那么下列说法正确的是
  2. python迭代列表_Python迭代列表中列的元素
  3. Cocos2d:使用 CCCamera 做滚动效果 (Four Ways of Scrolling with Cocos2D)
  4. 在Eclipse中进行HotSpot的源码调试--转
  5. IDEA手动添加jar包
  6. Linux UOS(国产统信)系统下Qt无法打印日志的问题
  7. C#面向对象设计模式纵横谈——6.Prototype 原型模式(创建型模式)
  8. web策略类游戏开发(四)一个可以承载万人在线的架构
  9. c语言生成随机的坐标,C语言文件的随机读写
  10. linux用什么剪辑视频教程,Linux 上的开源视频剪辑软件Olive
  11. PHP案例:数组用法演示
  12. 红米性价比之王宣布!网友:干翻友商小米、干翻友商荣耀
  13. 在哪一瞬间,你意识到那个人不能深交?
  14. javaweb中服务器启动所执行的程序
  15. 对while((pid = waitpid(-1, stat, WNOHANG)) 0)不懂的地方,现在懂了
  16. 使用MongoDb连接数据库服务器
  17. turbo c语言编程,turbo c3.0官方版下载-Turbo C下载[编程工具]-天极下载
  18. mysql 建表 game_RPG游戏数据库设计
  19. visio画两条直线交叉但不弯曲不跨线
  20. ❁将xls批量转换成xlsx

热门文章

  1. Spring Boot默认异常处理BasicErrorController源码解读
  2. Linux SPI设备驱动
  3. ArcGIS10.6表统计数据
  4. Alpha版本冲刺(八)
  5. python生成文件夹以及压缩文件夹
  6. Linux Shell脚本中压缩包解压到目标目录下
  7. Gartner发布2022年云平台服务技术成熟度曲线,iPaaS、低代码将达到成熟期
  8. sql怎么发音mysql_[原创]SQL发音考证(搜寻SQL-86标准)
  9. (E4)ENVI-met运行结果处理
  10. 没有公网IP,怎么实现外网访问内网视频监控