使用新数据微调预训练网络
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)
我有一个专为图像识别设计的预训练网络(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)