1

我在 Digits 中使用 python 层以随机大小裁剪每个训练图像,然后使用 cv2.resize 方法将大小调整为预期的顶部尺寸。

在保存的一批图像上离线使用时,调整大小按预期工作,numpy 数组的大小正确调整为形状 (128x3x227x227)。

但是,当以数字形式使用 python 层时,我得到代码 -11 错误。Caffe 输出日志显示:

I1212 12:11:41.999608 14949 solver.cpp:291] Solving
I1212 12:11:41.999610 14949 solver.cpp:292] Learning Rate Policy: fixed
I1212 12:11:42.001058 14949 solver.cpp:349] Iteration 0, Testing net (#0)
I1212 12:11:42.001065 14949 net.cpp:693] Ignoring source layer train-data
*** Aborted at 1481541102 (unix time) try "date -d @1481541102" if you are using GNU date ***
PC: @     0x7f7c46b63acf cv::resize()
*** SIGSEGV (@0x0) received by PID 14949 (TID 0x7f7c564d0ac0) from PID 0; stack trace: ***
@     0x7f7c53b734b0 (unknown)
@     0x7f7c46b63acf cv::resize()
@     0x7f67e132d736 pyopencv_cv_resize()
@     0x7f7c547a8c55 PyEval_EvalFrameEx
@     0x7f7c548d301c PyEval_EvalCodeEx
@     0x7f7c548292e0 (unknown)
@     0x7f7c547fc1e3 PyObject_Call
@     0x7f7c5487031c (unknown)
@     0x7f7c547fc1e3 PyObject_Call
@     0x7f7c548d2447 PyEval_CallObjectWithKeywords
@     0x7f7c54830f17 PyEval_CallFunction
@     0x7f67f34add85 caffe::PythonLayer<>::Forward_cpu()
@     0x7f7c55bc6207 caffe::Net<>::ForwardFromTo()
@     0x7f7c55bc6577 caffe::Net<>::Forward()
@     0x7f7c55be8dda caffe::Solver<>::Test()
@     0x7f7c55be992e caffe::Solver<>::TestAll()
@     0x7f7c55be9a4c caffe::Solver<>::Step()
@     0x7f7c55bea5e9 caffe::Solver<>::Solve()
@           0x40cf6f train()
@           0x4088e8 main
@     0x7f7c53b5e830 __libc_start_main
@           0x4091b9 _start
@                0x0 (unknown)

附加信息:

  • 我离线测试 resize 方法的环境(当它工作时)与我用于 Digits/caffe 的环境相同
  • 我可以改用 scipy misc.imresize 方法,它按预期工作,但是 scipy 方法不保留原始 numpy 值,将它们转换回 0-256 范围内的 uint8,所以我不能使用该方法。它也比 cv2 慢得多(在离线批次上测试)

如果有人可以建议一种替代插值方法来调整 numpy nd-array 的大小,这也将非常有用

非常感谢

4

1 回答 1

1

已解决,由于 cmake 标志和 virtualenv,caffe 安装存在问题。我正在从 opencv-python 版本为 3.1.0 的 virtualenv 运行数字,但是在安装 caffe 时,cmake 检查了系统 opencv-python 版本,即 2.4.9,并相应地构建了 caffe。这就是错误的原因,不正确的 python 绑定。为了解决这个问题,使用 opencv 2.4.9 创建了一个新的 virtualenv,并从该环境启动了 numbers。

于 2016-12-13T11:40:07.847 回答