如何在图像大小不固定且不同的情况下训练FCN网络?

时间:2018-01-24 07:04:48

标签: neural-network computer-vision deep-learning caffe image-segmentation

我已经使用固定大小的图像256x256训练了FCN model。我可以问专家,一旦图像尺寸从一个图像变为另一个图像,我如何训练相同的模型?

我非常感谢你的建议。 感谢

1 个答案:

答案 0 :(得分:4)

您可以选择以下策略之一:

1。批次= 1图像

通过将每个图像作为不同的批处理进行培训,您可以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

2。随机作物

您可以决定固定的输入尺寸,然后随机裁剪所有输入图像(以及相应的基础事实) +每次迭代都需要reshape(更快) +在列车期间控制模型尺寸。

- 需要为图像和标签实施随机作物

3。固定大小

将所有图像调整为相同尺寸(如SSD) +简单

- 如果并非所有图像具有相同的宽高比,则图像会失真 - 你没有规模不变