在 Caffe 中生成用于对象检测的 lmdb 文件

Posted

技术标签:

【中文标题】在 Caffe 中生成用于对象检测的 lmdb 文件【英文标题】:Generating lmdb files for object detection in Caffe 【发布时间】:2020-01-12 04:46:16 【问题描述】:

我正在尝试在 Caffe 中从头开始训练基于 SSD 的人脸检测器。我有一个图像数据集,其中人脸的边界框存储在 csv 文件中。到目前为止,在我遇到的所有教程和代码中,convert_annoset 工具用于生成用于对象检测的 lmdb 文件。然而,在 Github (https://github.com/BVLC/caffe) 上的最新 Caffe 版本中,该工具已被删除。

我看到处理这个问题的两个选项是:

    使用当前 Caffe 库中的函数重写 convert_annoset 工具

    使用其他 python 包(如 lmdb 和 OpenCV)从图像和边界框信息手动创建 lmdb 文件

我一直在尝试重写代码,但在原始代码中找不到某些类和函数,例如 AnnotatedDatum_AnnotationTypeLabelMap当前版本。

对于如何继续为对象检测问题创建 lmdb 有什么建议吗?

编辑: 我刚刚意识到 AnnotatedData 层不再存在于 Caffe 的主分支中。这是否意味着在这个版本中无法检测?我是否必须使用一些较旧的 fork,例如 https://github.com/weiliu89/caffe 进行检测,还是有其他选择?

【问题讨论】:

【参考方案1】:

由于原来的Caffe没有物体检测层(mobilenet-ssd)

所以使用这个 Caffe (https://github.com/weiliu89/caffe) ssd 分支

这个 Caffe 有一个可以生成 lmdb 的 convert_annoset。

【讨论】:

我已经这样做了,但是我在训练中遇到了错误。我按照此处 (github.com/opencv/opencv/blob/master/samples/dnn/face_detector/…) 的步骤创建了一个 LMDB。这是我得到的错误:multibox_loss_layer.cpp:139 Check failed: num_priors_ * loc_classes_ * 4 == bottom[0]->channels() (35312 vs. 35056) Number of priors must match number of location predictions。关于如何解决这个问题的任何想法?我怀疑这与 LMDB 的创建方式有关? 我认为问题是由于试图检测图片中太小的物体造成的。 这发生在训练期间,而不是检测期间。如果设置了 resize_height 和 resize_width,convert_annoset 不会调整图像大小吗? 看起来像在caffe/util/io.cpp的第113行:cv::resize(cv_img_origin, cv_img, cv::Size(width, height));所以我不明白检测到的对象的大小是如何影响训练的。有什么建议吗? 我的意思是图片不小,图片中的物体很小。

以上是关于在 Caffe 中生成用于对象检测的 lmdb 文件的主要内容,如果未能解决你的问题,请参考以下文章

深度学习文章3:将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件

3:将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件

3:将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件

Caffe使用:如何将一维数据或其他非图像数据转换成lmdb

用Python学习Caffe3. 图像训练测试数据集LMDB的生成

caffe 图片数据的转换成lmdb和数据集均值(转)