使用新数据微调预训练网络

Fine tuning a pre-trained network with new data

我有一个专为图像识别设计的预训练网络(prototxt 定义和带有权重的二进制 caffe 模型)。我在网上得到它,不知道它是如何训练的,在哪些数据上,我还没有看到求解器文件。 该网络有 3 层(据我所知 - 我有 3 个 prototxt 文件)。

我正在尝试向网络添加另一个 "feature" - 让它也能识别一些姿势。

到目前为止我采取的步骤: - 将另一个输出添加到最后一层,类似于已经存在的输出 - 通过前两层处理图像数据库,并将输出保存到lmdb - 创建一个新的微调求解器 - 创建一个 train_test 用于微调最后一层

运行 "caffe train" 求解器会崩溃。 我尝试通过进入 python 和:

来了解更多信息
caffe.Net(train_test_file_path)

我得到了:

I0703 11:10:54.095563 21756 net.cpp:294] The NetState phase (1) differed from the phase (0) specified by a rule in layer data
I0703 11:10:54.095655 21756 net.cpp:51] Initializing net from parameters:
 <train_test_file_content>

I0703 11:10:54.096817 21756 layer_factory.hpp:77] Creating layer data
I0703 11:10:54.097033 21756 db_lmdb.cpp:35] Opened lmdb /home/user/yaw_db/test/lmdb/
I0703 11:10:54.097090 21756 net.cpp:84] Creating Layer data
I0703 11:10:54.097111 21756 net.cpp:380] data -> data         
I0703 11:10:54.097158 21756 net.cpp:380] data -> label
I0703 11:10:54.097657 21756 data_layer.cpp:45] output data size: 50,1,1,193536
I0703 11:10:54.097937 21756 net.cpp:122] Setting up data     
I0703 11:10:54.097960 21756 net.cpp:129] Top shape: 50 1 1 193536 (9676800)
I0703 11:10:54.097983 21756 net.cpp:129] Top shape: 50 (50)
I0703 11:10:54.097999 21756 net.cpp:137] Memory required for data: 38707400
I0703 11:10:54.098014 21756 layer_factory.hpp:77] Creating layer label_data_1_split
I0703 11:10:54.098047 21756 net.cpp:84] Creating Layer label_data_1_split
I0703 11:10:54.098063 21756 net.cpp:406] label_data_1_split <- label
I0703 11:10:54.098084 21756 net.cpp:380] label_data_1_split -> label_data_1_split_0             
I0703 11:10:54.098106 21756 net.cpp:380] label_data_1_split -> label_data_1_split_1                                                                                  
I0703 11:10:54.098131 21756 net.cpp:122] Setting up label_data_1_split
I0703 11:10:54.098145 21756 net.cpp:129] Top shape: 50 (50)                                                                                                                                                
I0703 11:10:54.098163 21756 net.cpp:129] Top shape: 50 (50)
I0703 11:10:54.098176 21756 net.cpp:137] Memory required for data: 38707800
I0703 11:10:54.098188 21756 layer_factory.hpp:77] Creating layer conv1_3
I0703 11:10:54.098212 21756 net.cpp:84] Creating Layer conv1_3
I0703 11:10:54.098227 21756 net.cpp:406] conv1_3 <- data      
I0703 11:10:54.098245 21756 net.cpp:380] conv1_3 -> conv1_3
F0703 11:10:54.098325 21756 blob.cpp:32] Check failed: shape[i] >= 0 (-1 vs. 0)
*** Check failure stack trace: ***                           
Aborted (core dumped)   

打开我创建的 lmdb 并在其上使用 stat() 生成:

{'branch_pages': 1,
 'depth': 2,
 'entries': 12651,
 'leaf_pages': 75,
 'overflow_pages': 561233,
 'psize': 4096}

网上搜索了一下,我大概是把处理过的图片存错了。 还有其他想法吗?

PS。我对咖啡、神经元网络等 非常 陌生,所以我什至可能会错过最简单的事情。

您将中间特征保存到 lmdb 文件中 ('/home/user/yaw_db/test/lmdb')。
那里的数据存储为 1x1x193,536 维特征的集合。您每次阅读一批 50 份。您可以在日志文件中看到:

I0703 11:10:54.097657 21756 data_layer.cpp:45] output data size: 50,1,1,193536 

现在您似乎正在尝试应用 3x3 卷积(在 'conv1_3' 层)。但是,输入 blob 的空间维度是 1x193,536。输入 blob 的 "height" 不足以进行 3x3 卷积,这就是您收到错误

的原因
F0703 11:10:54.098325 21756 blob.cpp:32] Check failed: shape[i] >= 0 (-1 vs. 0)