使用暗网训练后获得预测

Posted

技术标签:

【中文标题】使用暗网训练后获得预测【英文标题】:Getting predictions after training using darknet 【发布时间】:2017-08-16 23:08:44 【问题描述】:

我是 CNN 的新手,我正在尝试使用 CIFAR-10 数据集训练分类器。我跟着Pjreddie's Tutorial训练了一个10类数据集的简单分类器。

我使用下面的代码训练了模型,我得到了cifar_small.weights,后来我将其用于检测

./darknet classifier train cfg/cifar.data cfg/cifar_small.cfg

训练简单网络后,我尝试使用cifar_small.cfgcifar_small.weigths 进行检测

./darknet detect cfg/cifar_small.cfg cifar_small.weights data/dog.jpg

层过滤器大小输入输出 0 转化 32 3 x 3 / 1 28 x 28 x 3 -> 28 x 28 x 32 最大 1 个 2 x 2 / 2 28 x 28 x 32 -> 14 x 14 x 32 2 次转化 64 3 x 3 / 1 14 x 14 x 32 -> 14 x 14 x 64 最多 3 个 2 x 2 / 2 14 x 14 x 64 -> 7 x 7 x 64 4 次转化 128 3 x 3 / 1 7 x 7 x 64 -> 7 x 7 x 128 5 次转化 10 1 x 1 / 1 7 x 7 x 128 -> 7 x 7 x 10 6 平均 7 x 7 x 10 -> 10 7 softmax 10 8 成本 10 加载重量来自 cifar_small.weights...完成! data/dog.jpg:预测 0.007035 秒。 未使用 OpenCV 编译,改为保存到 predictions.png

它不预测终端中的值,也不在输出图像上绘制边界框。图像的输出与输入相同。 当我尝试使用yolo.cfg 和预训练的yolo.weights 对同一图像进行预测时,它的工作原理如下所示。

层过滤器大小输入输出 0 转化 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 最多 1 个 2 x 2 / 2 416 x 416 x 32 -> 208 x 208 x 32 2 次转化 64 3 x 3 / 1 208 x 208 x 32 -> 208 x 208 x 64 最多 3 个 2 x 2 / 2 208 x 208 x 64 -> 104 x 104 x 64 4 次转化 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128 5 次转化 64 1 x 1 / 1 104 x 104 x 128 -> 104 x 104 x 64 6 次转化 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128 最多 7 个 2 x 2 / 2 104 x 104 x 128 -> 52 x 52 x 128 8 次转化 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 9 转化 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 10 转化 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 最大 11 2 x 2 / 2 52 x 52 x 256 -> 26 x 26 x 256 12 转换 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 13 转换 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 14 转换 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 15 转换 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 16 转换 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 最大 17 2 x 2 / 2 26 x 26 x 512 -> 13 x 13 x 512 18 转换 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 19 转换 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 20 转换 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 21 转换 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 22 转换 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 23 转换 1024 3 x 3 / 1 13 x 13 x1024 -> 13 x 13 x1024 24 转换 1024 3 x 3 / 1 13 x 13 x1024 -> 13 x 13 x1024 25 路线 16 26 重组 / 2 26 x 26 x 512 -> 13 x 13 x2048 27 路线 26 24 28 转换 1024 3 x 3 / 1 13 x 13 x3072 -> 13 x 13 x1024 29 次转化 425 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 425 30 次检测 从 yolo.weights 加载权重...完成! data/dog.jpg:预测在 11.057513 秒内。 汽车:54% 自行车:51% 狗:56%

它在输出图像中与边界框一起按预期进行预测。

【问题讨论】:

【参考方案1】:

我认为你应该使用这个命令:

./darknet classify cfg/cifar_small.cfg cifar_small.weights data/dog.jpg

在这里查看:https://pjreddie.com/darknet/tiny-darknet/

【讨论】:

【参考方案2】:

在 /examples/darknet.c(从第 422~500 行)中,您可以看到暗网框架对 './darknet' 之后的每个函数输入做了什么。 在这种情况下,'/.darknet 分类 ~' 使函数 'predict_classifier' 在 examples/classifier.c 中运行。

预测结果由601~606行的部分打印出来(在classifier.c中)

for(i = 0; i < top; ++i)

    int index = indexes[i];
    printf("%5.2f%%: %s\n", predictions[index] * 100, names[index]);

【讨论】:

以上是关于使用暗网训练后获得预测的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Keras .h5 模型转换为暗网 yolo.weights 格式?

如何从这些预训练模型中获得预测?

预测时是不是可以从预训练的 vgg 模型中获得第 1 层和第 5 层输出? [复制]

在每个示例上使用 tensorflow 获得相同的预测

随机森林在训练和测试中获得 98% 的准确率,但总是预测相同的类别

R - H2O- 如何获得训练有素的模型预测/概率?