前期准备
在学习过yolov3的相关原理后感觉距离实践是有一定差距的,在github上找到了一版源码。本文对这篇文章的源码进行中文注释,以求更加深入的了解实现的过程。
github的地址为
https://github.com/ayooshkathuria/pytorch-yolo-v3
这份代码目的是为了在pytorch框架下,使用原生的配置文件、权重文件,对获取到的新数据进行检测。
原作者提供了一个教程,连接如下
https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/
相对应的中文教程由两部分
https://www.jiqizhixin.com/articles/2018-04-23-3
https://www.jiqizhixin.com/articles/042602?from=synced&keyword=%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8BPyTorch%E9%A1%B9%E7%9B%AE%EF%BC%9AYOLO%20v3%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E5%AE%9E%E7%8E%B0
下面进行中文注释
darknet.py
parse_cfg
首先对配置文件进行了解析
def parse_cfg(cfgfile):
#解析配置文件
#输出为模块的list, 每个模块都对应着网络中的某一个模块
file = open(cfgfile, 'r') #打开文件
lines = file.read().split('\n') #按行读入
lines = [x for x in lines if len(x) > 0] #去除空行
lines = [x for x in lines if x[0] != '#'] #去除注释
lines = [x.rstrip().lstrip() for x in lines] #两边的空格
block = {
}
blocks = []
for line in lines:
if line[0] == "[": #查找模块的标识符,代表新模块的建立
if len(block) != 0: #如果block中包含其他信息,则先将数据存储并置空
blocks.append(block)
block = {
}
block["type"] = line[1:-1].rstrip() #去除两边的中括号
else:
key,value = line.split("=")