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

时间:2019-07-03 11:09:46

标签: caffe

我有一个预先训练的网络(带有权重的prototxt定义和二进制caffemodel)设计用于图像识别。我在线获得它,不知道它是如何训练的,关于哪些数据的,而且我还没有看到求解器文件。 网络有3层(据我所知-我有3个prototxt文件)。

我正在尝试向网络添加另一个“功能”-使它也可以识别某些姿势。

到目前为止,我已采取的步骤: -将另一个输出添加到最后一层,类似于已经存在的输出 -通过前两层处理图像数据库,并将输出保存到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。我对咖啡,神经元网络等非常陌生,所以我什至可能会错过最简单的东西。

1 个答案:

答案 0 :(得分:0)

您已将中间功能保存到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的“高度”不足以允许3x3卷积,这就是为什么会出现错误

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