项目场景:
我们在通过RT-detr官方给出的源码的时候,会出现以下一个报错情况:PIL.Image.DecompressionBombError: Image size (xxx pixels) exceeds limit of xxx pixels, could be decompression bomb DOS attack.
问题描述
RT-detr程序在跑的时候,会突然停止训练,并且抛出下面这一条报错情况:
原因分析:
这很明显是我们放入训练的图片过大,超过了178956970 pixels,通常意味着尝试加载的图像像素数量超过了Pillow库设置的安全限制。这个限制是为了防止所谓的“解压缩炸弹”攻击,这是一种恶意文件利用软件中的漏洞来消耗大量内存或处理能力的攻击方式,所以我们需要去压缩对应的图片大小来防止超出限制
解决方案:
1、通过代码操作
解决这个问题的方法是增加Pillow允许的最大像素限制。可以通过以下代码实现:
from PIL import Image
Image.MAX_IMAGE_PIXELS = None # 或者设置一个更大的值
这样就可以加载更大的图像了,但请注意,这样做可能会增加内存消耗,如果图像来源不可信,还可能存在安全风险。如果在确定图像是安全的,并且自己的系统有足够的资源处理大图像,那么这种方法是可行的 。
2、通过画图操作(笔者推荐)
解决这个问题的方法是通过画图工具去压缩图片大小:
首先打开画图工具,然后全选图片
其次,选择调整大小和扭矩,选择像素选项,将水平值和垂直值改成自己要的小一倍的数字,注意:在你更改水平值和垂直值其中任意一个值的时候,系统会自动帮你更改另外一个值。
之后保存图片并使用新的图片去训练即可