在 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_AnnotationType 和 LabelMap当前版本。
对于如何继续为对象检测问题创建 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