更新1
停止裁剪图像的最简单方法是:将元组传递给size参数。
所以看起来像这样:
size=(299,299)
很遗憾,它不能解决我的问题。因此问题仍然存在。
我刚刚训练了我的鸟类模型。当我用细密的图片对其进行测试时,效果很好。
但是当我将照片移到相机更远的地方时,模型无法检测到鸟类。
我的猜测是在这行代码中
data = ImageDataBunch.from_folder(path=path_img, bs=48, valid_pct= 0.2, ds_tfms=get_transforms(), size=299, classes=['birds', 'others'])
get_transforms()
和
size = 299
功能和尺寸参数裁剪我的训练图像以使图像居中,从而使图像中的鸟类看起来更靠近相机。
如何解决?
答案 0 :(得分:3)
您的数据集在一定比例上偏向鸟类,即它们的大小(以像素为单位)跨很小的范围(您可以验证这一点)。
中心裁剪图像不会改变-鸟的大小(以像素为单位)不会改变。
因此,您的模型无法处理比例更改。
为了克服模型的这一局限性,您需要使其更具规模鲁棒性。
实现此目的最简单的方法是在数据加载器中添加 scale 扩充(在裁剪之前)。通过将随机比例尺引入每个训练图像,您可以有效地更改鸟类的大小(以像素为单位),从而模型可以“看到”具有更大范围的鸟类(以像素为单位)的鸟类。