【问题标题】:Why YoloV3 has very poor detection rate in testing?为什么YoloV3在测试中检出率很差?
【发布时间】:2018-06-12 14:38:56
【问题描述】:

我训练了 YoloV3 进行对象检测。 我训练达到 Avg Recall:批次中所有图像的几乎 1.0,并且 Avg IOU 高于 0.9。 但是,当我使用未包含在训练中的图像(但它们与那些经过训练的图像非常相似)进行测试时,检测阈值需要设置为 0.1。 但是用训练中使用的那些图像进行测试,它们的检测率阈值可以设置得很高,比如 0.7。 什么可能是错误的或者我需要在培训中改变什么? 我的训练 cfg 是

[net]
# Testing
#batch=1
#subdivisions=1
# Training
 batch=16
 subdivisions=8
height=416
width=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.001
burn_in=1000
max_batches = 20000
policy=steps
steps=5000,10000
scales=.1,.1

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky


#######

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[route]
layers=-9

[convolutional]
batch_normalize=1
size=1
stride=1
pad=1
filters=64
activation=leaky

[reorg]
stride=2

[route]
layers=-1,-4

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=30
activation=linear


[region]
anchors =  2.00,1.24, 2.75,0.93, 2.84,1.75, 3.72,1.21, 4.63,1.59
bias_match=1
classes=1
coords=4
num=5
softmax=1
jitter=.3
rescore=1

object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1

absolute=1
thresh = .6
random=1

【问题讨论】:

    标签: neural-network deep-learning artificial-intelligence convolutional-neural-network yolo


    【解决方案1】:

    我在使用 Yolo 处理非方形图像时遇到了这样的问题。是你的情况吗? 在训练阶段,Yolo 将图像调整为需要的大小(即网络中的 416x416):https://github.com/pjreddie/darknet/blob/master/src/data.c#L971 但在测试阶段,它会调整图像保留纵横比的大小并为图像添加所需的边框:https://github.com/pjreddie/darknet/blob/master/examples/detector.c#L587(下面评论了带有愚蠢调整大小的替代代码行)。自然,如果输入图像不是正方形的,那么它们看起来与训练中的完全不同 :) 我使用https://github.com/AlexeyAB/darknet fork,这个问题最近在那儿得到了解决(https://github.com/AlexeyAB/darknet/commit/efaf684cb20b996db0cd6d99d20fabb4bc26859a)。但看来,原来的Yolo还是有的。 PS。虽然 Yolo 是一个很棒的工具,但它的代码有很多这样的东西,使用它时查看源代码和调试器是个好主意:)

    【讨论】:

      【解决方案2】:

      取消注释 batch = 1 和 subdivisions=1 并注释最后一行:

      # Testing
      #batch=1
      #subdivisions=1
      # Training  
      batch=16  
      subdivisions=8
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-14
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多