我已经使用固定大小的图像256x256训练了FCN model。我可以问专家,一旦图像尺寸从一个图像变为另一个图像,我如何训练相同的模型?
我非常感谢你的建议。 感谢
答案 0 :(得分:4)
您可以选择以下策略之一:
通过将每个图像作为不同的批处理进行培训,您可以reshape
数据层的forward()
(而不是reshape()
)中的网络,从而在每次迭代时更改网络。
+在reshape
方法中写一次forward
,您不再需要担心输入形状和大小。
- reshape
网络通常需要分配/取消分配CPU / GPU内存,因此需要时间。
- 您可能会发现批次中的单个图像太小而无法批量处理。
例如(假设您使用"Python"
图层进行输入):
def reshape(self, bottom, top):
pass # you do not reshape here.
def forward(self, bottom, top):
top[0].data.reshape( ... ) # reshape the blob - this will propagate the reshape to the rest of the net at each iteration
top[1].data.reshape( ... ) #
# feed the data to the net
top[0].data[...] = current_img
top[1].data[...] = current_label
您可以决定固定的输入尺寸,然后随机裁剪所有输入图像(以及相应的基础事实)
+每次迭代都需要reshape
(更快)
+在列车期间控制模型尺寸。
- 需要为图像和标签实施随机作物
将所有图像调整为相同尺寸(如SSD) +简单
- 如果并非所有图像具有相同的宽高比,则图像会失真 - 你没有规模不变