yolov3中CNN层的实际数量是多少?

5

我对yolov3的架构感到非常困惑,我已经阅读了有关它的文档和论文。有些人说它有103个卷积层,而其他人则说它只有53个卷积层。但是,当你在下载后查看.cfg文件中的卷积层时,大约只有75个!...这里错过了什么?我该怎么做来找到它?这个问题对我们很重要,因为我们需要在论文中引用这个架构,我们需要知道层的确切大小...

3个回答

7

1

在这种情况下,模型中可能有可变数量的层。在论文中,它说Darknet53有53层。但是在他们的train.py文件中,根据您使用的Darknet模型,他们对层数进行了截断。具体来说:

def load_darknet_weights(self, weights, cutoff=-1):
    # Parses and loads the weights stored in 'weights'
    # cutoff: save layers between 0 and cutoff (if cutoff = -1 all are saved)
    weights_file = weights.split(os.sep)[-1]

    # Try to download weights if not available locally
    if not os.path.isfile(weights):
        try:
            os.system('wget https://pjreddie.com/media/files/' + weights_file + ' -O ' + weights)
        except IOError:
            print(weights + ' not found')

    # Establish cutoffs
    if weights_file == 'darknet53.conv.74':
        cutoff = 75
    elif weights_file == 'yolov3-tiny.conv.15':
        cutoff = 15

这段代码的意思是,如果你使用的是Darknet convulsion 74文件,则层数的截止值为75。如果你使用的是Darknet convulsion 15文件,则层数的截止值为15。因此,你需要检查你下载的Darknet文件并确定你使用的版本。基于这一点,我建议选择75,因为似乎你使用的是darknet54.conv.74。
此外,如果你查看他们的weights Repo,你会发现如果只从Github上拉取而没有自定义,那么层数的截止值为75,因此他们的文件中有75个层。
值得注意的是,他们的论文发表于2018年4月,在这段时间里,他们可能已经在Github上增加了更多的CNN层。

1
非常感谢。这真的很有帮助。我在下载的文件中数了所有卷积层,大约有75层。根据你提到的内容,我认为75是正确答案。 - mahyar sadeghi
据我所知,Yolo在3个不同的尺度上进行检测,分别位于第82、94、106层。这就是为什么当您训练模型时,它总是显示这些层。那么为什么它被削减到只有75层呢? - gameon67
请查看此处:https://gist.github.com/fabito/a49bb6a5593594f26275bc90baba6e32,总层数为106。 - gameon67

0

YOLO v3总共有107个,你还应该计算快捷层路由层上采样层YOLO层(总共32个)。因此,总共有75+32=107个。当你在快捷层路由层中看到索引时,你会发现我们是从0开始计数的。因此,YOLO层位于82、94、106层。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接