解析cfg文件在OpenCV DNN中使用YOLO-Darknet

时间:2018-02-01 08:12:57

标签: c++ opencv darknet

我已按照此链接使用我自己的数据集训练yolo。我没有使用CIAFR10数据。 https://pjreddie.com/darknet/train-cifar/

这是名为cifar.cfg的cfg文件

[net]
batch=128
subdivisions=1
height=28
width=28
channels=3
max_crop=32
min_crop=32

hue=.1
saturation=.75
exposure=.75

learning_rate=0.001
policy=poly
power=4
max_batches =1000
momentum=0.9
decay=0.0005

[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]
filters=4
size=1
stride=1
pad=1
activation=leaky

[avgpool]

[softmax]
groups=1

[cost]
type=sse

它正确地对Ubuntu 16.04上的测试图像进​​行分类。 我在OpenCV3.4 DNN模块中使用了这个cgf文件和相应的wights。我正在使用Visual Studio 2017。

 String modelFile = "cifar_small.cfg";
 String modelBinary = "cifar_small.weights";

执行以下行时,收到错误消息:

dnn::Net net = readNetFromDarknet(modelFile,modelBinary);

错误讯息: OpenCV错误:`cv :: dnn :: darknet :: ReadDarknetFromCfgFile中的解析错误(未知图层类型:avgpool),文件C:\ build \ master_winpack-build-win64-vc14 \ opencv \ modules \ dnn \ src \ darknet \ darknet_io .cpp,第503行

另外,对于sooftmax而言。看起来DNN无法理解这些条款。 有人能告诉我如何解决这些问题吗?

2 个答案:

答案 0 :(得分:0)

您使用相同的cfg文件吗?尝试将行结尾转换为特定于操作系统的行。

avgpool部分似乎是空的。如果你只是删除它会发生什么?

答案 1 :(得分:0)

如果我删除了avgpool,那么net.forward()的分类结果是不可读的。它是1通道的形式,行和列等于0.当我从tensorflow(.pb)传递另一个模型时,我得到每个类的4个概率。 谢谢