.pth转.weights/openCV-python + YOLO v3实现目标检测

文章目录

  • 前言
  • 一、基于Pytorch框架的YOLO v3
  • 二、openCV-python
  • 三、.pth转.weights
  • 四 模型部署
  • 总结


前言

  毕设做的是水面目标的目标检测,因为要用Tkinter制作用户界面,于是采用openCV库来实现图像的处理,恰好openCV支持YOLO v3的部署……


一、基于Pytorch框架的YOLO v3

  因为对Python比较熟悉,综合考虑后选择用Pytorch框架实现,奈何自己太菜,只能去Github上找现成的YOLO v3代码,这个项目里面有详细的使用说明,很容易就上手了,非常感谢作者
  网络模型有了,加上数据就可以炼丹了,这里用的数据集是SeaShips(7000),格式是VOC格式,代码需要的也是VOC格式,所以改好文件夹路径就可以直接上了。训练用的是Google Colab,白嫖虽爽,但是也有很多不方便,后面再单独整理一篇使用记录吧

二、openCV-python

  openCV是很常用的图像处理库,支持python、C++等语言,这里用的是openCV-python
  openCV中的dnn模块实现了基于Darknet框架的YOLO v3网络,也就是说,模块给你搭好了网络,只需要你自己填入网络参数就好了,这个网络参数就是训练模型得到的权重文件
  训练模型时用的框架是Pytorch,而Pytorch框架下的权重文件是.pth格式,而openCV的dnn模块对于YOLO网络仅支持Darknet框架,于是乎,需要把.pth转为.weights格式(.weights是Darknet框架下的权重文件格式)

三、.pth转.weights

.pth转.weights/openCV-python + YOLO v3实现目标检测_第1张图片
图1-.pth权重文件的网络结构示意图
  图1是训练得到的权重文件的网络结构,实际上这个.pth文件保存的是网络结构+权重参数,具体来说是嵌套的ordereddict
.pth转.weights/openCV-python + YOLO v3实现目标检测_第2张图片
图2-转换格式的部分代码
  图2是转换格式的部分代码,因为在Darknet框架下,YOLO v3的cfg文件是不变的,因此对照cfg文件的网络配置,就可以一层一层的,按照顺序将.pth格式的网络权重参数(numpy数组)转换成.weights所需的二进制格式。如果需要转换代码的话,在评论区留邮箱吧

四 模型部署

  模型部署可以参考这篇博客的正文,代码都有注释,很容易理解


总结

  上面主要讲了对于YOLO v3网络,如何将.pth格式的权重文件转成.weights,其他的像训练模型、部署模型有很多现成的资料供参考,这里就不重复了

你可能感兴趣的:(图像处理/深度学习,目标检测,opencv,dnn)