Googolxx/STF

Lightweight pre-trained model or

Closed this issue · 13 comments

Hello !
Running the pre-training model is beyond the capacity of the server .There is an error “cuda out of memory Tried to allocate 4.34 GiB (GPU 0; 31.75 GiB total capacity; 845.96 MiB already allocated; 3.41 GiB free; 858.00 MiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

So Is there a lightweight pre-trained model ?Or can we modify to reduce the number of images when running pre-trained model tests?
Any reply would be appreciated!

正常测试应该是不会爆显存的?一般为了得到编解码时延,测试的时候都是一张一张测试的,所以占用显存应该比较小。你看是不是其他地方出了问题?可能是你一次性编解码太多的图像,或者是图像分辨率过高了(比如4k,8k)?
相对来说,我记得cnn的那个模型显存占用会稍微少一点,但应该也是在同一个量级。

  哈哈哈,能用中文交流真是太好了!您回答的太有耐心啦!谢谢您不嫌我笨!
 我用的就是cnn模型,数据集的话用的您代码里下载的openimages 有三十万张图片。我查了一下这个数据集的图像大小是2700×2500左右的。
 如果是我一次编解码太多图像的话是应该在命令“CUDA_VISIBLE_DEVICES=1,2,3 python -m compressai.utils.eval_model -d openimages/test/data/ -r reconstruction -a cnn -p ckpt/cnn_0035_best.pth.tar --cuda”里设置一下参数吗?因为我找了您的代码eval_model中main.py没有找到设置一次编解码图像数量的地方。

嗯嗯,没事的哈。
compressai.utils.eval_model里面默认就是同时只编解码一张图像,所以可能是因为分辨率过高爆显存了。
测试的话是不用openimages的数据集的,一般会用kodak(768x512)或者clic竞赛(2k)的测试集。这个是Kodak的链接。

我用了Kodak24数据集测试预训练模型,得到了输出如下:
"name": "cnn",
"description": "Inference (ans)",
"results": {
"psnr": [
30.246818241885368
],
"ms-ssim": [
0.9517753049731255
],
"bpp": [
0.23629333333333336
],
"encoding_time": [
0.1030742625395457
],
"decoding_time": [
0.10673800110816956
]
这是不是就是说明执行成功了,只不过是压缩效果稍微还需要再调调参数?

是的,执行成功了,但压缩的效果还是差了一些。这个是你自己训练的模型吗?可能还需要降低学习率,然后继续优化,具体的训练策略可以参考这里

这是下载了您的预训练模型cnn_0035_best.pth.tar,在Kodak24数据集上执行的。对了,msssim的值不是在0-1之间嘛,但是我看您论文里的figure6和7第二张图为什么纵坐标msssim的值是十几到二十几呀?

msssim的值会有一个变换( ”-10 * (math.log((1-ms_ssim(x, out_dec["x_hat"], data_range=1.0).item()))/ math.log(10))“),方便对比。
以及我的那个预训练模型我刚测试了呀,结果是:
{
"name": "cnn",
"description": "Inference (ans)",
"results": {
"psnr": [
30.621830683704605
],
"ms-ssim": [
0.9524232124288877
],
"bpp": [
0.20509507921006945
],
"encoding_time": [
0.10250995556513469
],
"decoding_time": [
0.09354543685913086
]
}
}
你检查下是不是测试的时候哪里出了问题

上午在工作站测的,刚刚我又在服务器测了一下是:
"name": "cnn",
"description": "Inference (ans)",
"results": {
"psnr": [
30.404317576563955
],
"ms-ssim": [
0.9532364656527837
],
"bpp": [
0.21954133333333334
],
"encoding_time": [
0.1679484744866689
],
"decoding_time": [
0.17596302429835
]
}
这样的结果算是还可以的吗?会不会跟测试用的数据集有关,我用的是Kodak24.

这个效果还是差一些,我用的就是kodak24张图像

您好! cnn.py中 from compressai.ans import BufferedRansEncoder, RansDecoder,但是我没有在代码文件里找到compressai.ans呀,请问compressai.ans文件在哪?感谢~

Compressai中是用c++实现的编解码组件,具体在这里,好处是速度快,效率高。
也有pytorch版本的算术编解码实现,主要问题是python实现的速度比较慢,感兴趣的话也可以参考一下。

好的谢谢您!

作者您好!想问一下为什么我把ga和gs的5×5改成两个3×3再加上gdn层之后,训练的时候,在epoch0的最后一步test epoch的时候显存就爆了呀?感谢回答~