了解longcw的YOLOv2中的平均精度功能

时间:2018-07-27 14:08:13

标签: python darknet

我一直在尝试使用longcw's YOLOv2 version.来实现自己的CNN模型(基于Tiny Yolo),但是20个VOC数据集类别中的每一个的最终AP值要么为0,-1,要么很小。我认为这是由于以下事实:自从我更改CNN模型以来就无法使用预训练模型,或者是/datasets/voc_eval.py文件中的代码部分,其中以下代码为:

def voc_eval(detpath,
         annopath,
         imagesetfile,
         classname,
         cachedir,
         ovthresh=0.5,
         use_07_metric=False):

    ...
    ...

    # read dets
    detfile = detpath.format(classname)
    with open(detfile, 'r') as f:
        lines = f.readlines()
    if any(lines) == 1:
        ...
else:
   *sets recall, precision, and ap to -1*

调用函数来自数据集目录中的pascal_voc.py:

rec, prec, ap = voc_eval(
    filename, annopath, imagesetfile, cls, cachedir, ovthresh=0.5,
    use_07_metric=use_07_metric)

我对if any(line) == 1语句如何与输入的参数一起使用以及为什么将其传递到else语句感到困惑,这给分类提供了负面的AP值。我相信我想避免使用else语句,但是我不确定if语句接受什么。

我尝试在没有预先训练的权重文件的情况下训练原始的yolov2程序,并且在大约158个历元之后,使用test.py文件测试对象检测结果得出了20个类的AP值的预期结果更高,范围约为0.15-0.5 。我认为更多地训练程序是减少AP负面结果数量的一种方法,但是我认为这不会解决整个yel语句与原始yolo代码相比要经过多少次的问题。

此外,我注意到的一件奇怪的事是,与使用单个GPU相比,使用并行处理时训练时的损失下降得更快。这可能是为什么我的AP结果如此之低和消极的原因吗?

0 个答案:

没有答案