训练Caffe自定义人脸识别模型报错:Check failed: mdb_status == 0 (2 vs. 0)
解决Caffe训练时的LMDB文件找不到错误(mdb_status == 0 (2 vs. 0))
这个错误本质是Caffe无法定位到指定路径下的LMDB数据库文件,结合你用Docker+共享文件夹的场景,按下面的步骤逐一排查解决:
1. 核对train.prototxt中的数据源路径
Docker容器的文件系统和本地是隔离的,你本地的datasets/training_set_lmdb相对路径在容器里不一定有效:
- 先确认启动Docker容器时,本地的
execute_3_train_custom_model文件夹挂载到了容器的哪个目录(比如常见的/workspace)。 - 打开
models/custom_Model/train.prototxt,找到data层的source和mean_file字段,替换为容器内的绝对路径,示例如下:
注意把layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TRAIN } transform_param { mean_file: "/workspace/datasets/mean_training_image.binaryproto" } data_param { source: "/workspace/datasets/training_set_lmdb" batch_size: 32 backend: LMDB } }/workspace替换成你实际的挂载目录。
2. 检查LMDB文件的权限
共享文件夹的权限隔离可能导致容器内用户无法读取文件:
- 在本地终端,给LMDB文件夹及内部文件设置可读权限:
chmod -R 755 execute_3_train_custom_model/datasets/training_set_lmdb/ - 或者启动容器时,指定与本地用户相同的UID/GID,避免权限冲突:
docker run -v /本地绝对路径/execute_3_train_custom_model:/workspace --user $(id -u):$(id -g) 你的Caffe镜像名
3. 验证solver.prototxt的路径指向
确保solver.prototxt里的train_net字段指向容器内train.prototxt的正确绝对路径,示例:
train_net: "/workspace/models/custom_Model/train.prototxt"
4. 手动验证容器内的文件存在性
进入Docker容器,直接检查文件是否存在:
# 进入运行中的容器(替换为你的容器ID/名称) docker exec -it 你的容器ID bash # 查看LMDB文件 ls -l /workspace/datasets/training_set_lmdb/
如果能看到data.mdb和lock.mdb,说明路径设置正确;如果看不到,说明挂载或路径配置有误,需要重新核对挂载命令。
内容的提问来源于stack exchange,提问作者8-Bit Borges
相关产品推荐
相关产品推荐

