【DA-CLIP】图像复原在AutoDL上部署测试

news2024/10/6 18:26:59

起因:

虽然在本机Windows部署成功运行,但是由于计算资源少只有6G的GPU无法计算手机拍摄图像复原和其他一些数据集测试,尝试租用AutoDL的服务器部署测试

租AutoDL

 租的人很多,刚确定运行的镜像环境就报告说这个机子已经没卡了,又换了一台4090

上传权重文件、项目文件 

没用网盘和filezilla那些AutoDL帮助文档,一开始AutoDL文件存储 传了不同区,还有filezilla输了地址密码却连不上

我是直接JupyterLab上传的,因为本来以为能用ipynb输出Gradio的公网链接。

总共1.6G左右,接近花了20分钟才上传完成

文件夹是上传压缩包后解压的,只是演示的话只上传universal-image-restoration这个文件夹就行

修改test.yml文件里的权重文件地址,最好是绝对值地址

安装环境

requirement里面包含了torch和cudnn11的依赖。但是我选择的环境是与Windows相同的torch2.1.2+cu121并且已经安装好了。所以我把相关的依赖删了没有install免得重复。

运行

一开始我的考虑是懒得远程链接服务器,用ipynb创建一个Gradio公网链接。ipynb放在app.py文件目录下,对app.py的内容做了点界面修改。不能用命令行参数,我改为直接读yml文件。

但是没成功,有内网链接,但是我咋看啊?点进去啥也没有,frpc弄了但是没反应,可能是服务器挂了代理,开不了链接。

之前项目只用过pycharm专业版连服务器,不过认证过期了用不了,也懒得找种子卸载了。

转为vscode,跟了csdn的教程,本地链接打开能用,同样无公网链接

运行成功。 

疑问

显存占用问题:

  一开始是0显存占用

加载完模型没处理时是daclip模型的1.6G

处理完第一张图后是9个G

但是加载完第二张图准备复原时显存一下子到了16G并且报错OOM

 一时半会也搞不懂显存里有什么,而且计算量这么大吗,比模型参数都大了很多。

可能是有未释放的缓存和内存碎片?

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 3.83 GiB. GPU 0 has a total capacty of 23.64 GiB of which 1.73 GiB is free. Process 930717 has 1.79 GiB memory in use. Process 947502 has 17.54 GiB memory in use. Process 947745 has 2.58 GiB memory in use. Of the allocated memory 2.01 GiB is allocated by PyTorch, and 107.05 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

无从下手,ps -ef根本找不到对应的process

nvidia-smi 又只有一个process

一下子从5G到20G

感觉缺少释放显存的方式?但是运行明显不那么需要显存的图像时,显存并没有增长。 

手机照片和Gopro运动模糊OOM

感觉是不是跟图像尺寸有关

GOPRO图像,虽然图像不大,但是分辨率比其他LQ图像都要大,尺寸一般五六百左右

就算我用了这个24G的4090还是跑不起LQ-image的运动模糊

 File "/root/miniconda3/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
    return forward_call(*args, **kwargs)
  File "/root/autodl-tmp/universal-image-restoration/config/daclip-sde/models/modules/attention.py", line 180, in forward
    sim = einsum('b i d, b j d -> b i j', q, k) * self.scale
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 12.36 GiB. GPU 0 has a total capacty of 23.64 GiB of which 6.86 GiB is free. Process 94706 has 1.57 GiB memory in use. Process 177125 has 15.21 GiB memory in use. Of the allocated memory 14.55 GiB is allocated by PyTorch, and 192.95 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

两次都是重启了程序上传图片后一下子从3G跑到17G然后跟我讲OOM 

 

于是我用wps修改了一下图像的size,从右边改到左边,然后就跑出来了

手机拍摄的照片同理,这两张在白云山拍的本来分辨率4000左右直接缩小八倍 

但是问题是,在图像预处理明明设置了resize,而且读进去的图像在复原前也是224*224的图像大小,难道说这个插值计算花了显存?但是没to(device)啊,搞不懂哪里在吃显存

def clip_transform(np_image, resolution=224):
    # 这一行定义了一个名为clip_transform的函数,它接受两个参数:np_image(一个NumPy数组格式的图像)和resolution(一个可选参数,默认值为224,表示图像的目标分辨率)。
    pil_image = Image.fromarray((np_image * 255).astype(np.uint8))
    # 这一行将NumPy数组格式的图像转换为PIL(Python Imaging Library)图像。首先,将NumPy数组中的像素值乘以255,然后转换为无符号的8位整数格式,这是因为图像的像素值通常在0到255的范围内。
    return Compose([
        # 来自torchvision.transforms
        # 这一行开始定义一个转换流程,Compose是来自albumentations库的一个函数,用于组合多个图像转换操作。
        Resize(resolution, interpolation=InterpolationMode.BICUBIC),
        # 这一行使用Resize操作来调整图像大小到指定的分辨率。interpolation=InterpolationMode.BICUBIC指定了使用双三次插值方法来调整图像大小,这是一种高质量的插值算法。
        CenterCrop(resolution),
        # 这一行应用CenterCrop操作,将调整大小后的图像进行中心裁剪,以确保图像的尺寸严格等于指定的分辨率
        ToTensor(),
        # 这一行使用ToTensor操作将PIL图像转换为PyTorch张量。这是为了使图像能够被深度学习模型处理。
        Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711))])(pil_image)
    # 这一行应用Normalize操作,对图像的每个通道进行标准化。它使用两组参数,分别对应图像的均值和标准差。这些参数通常是根据预训练模型的要求来设置的。

 有没有朋友能提供一下思路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《QT实用小工具·二十八》基于qt开发的各种曲线

1、概述 源码放在文章末尾 该项目实现了各种曲线的绘制,下面是项目的demo演示: 项目部分代码如下: #include "frmsmoothcurve.h" #include "ui_frmsmoothcurve.h" #include "smoothcurve.h" #include "…

中颖51芯片学习7. printf重定向到串口与自定义日志输出函数

中颖51芯片学习7. printf重定向到串口与自定义日志输出函数 一、 printf 重定向1. 概念2. 实现方式3. C51 中printf数值格式化 二、日志函数1. 实现方案分析2. 代码(1)log_utils.h(2)main.c 3. 通过预定义宏实现日志分级输出&…

偏微分方程算法之二维初边值问题(紧交替方向隐格式)

目录 一、研究对象 二、理论推导 2.1 二维紧差分格式 2.2 紧交替方向格式 2.2.1 紧Peaceman-Rachford格式 2.2.2 紧D’Yakonov格式 2.2.3 紧Douglas格式 三、算例实现 四、结论 一、研究对象 继续以二维抛物型方程初边值问题为研究对象: 为了确保连续性,公式…

OpenHarmony移植的加解密库—libsodium [GN编译]

简介 libsodium主要是易用,可移植的加解密库。 下载安装 直接在OpenHarmony-SIG仓中搜索libsodium并下载。 使用说明 以OpenHarmony 3.1Beta的rk3568版本为例 库代码存放路径:./third_party/libsodium 修改添加依赖的编译脚本,路径&#…

区间图着色问题:贪心算法设计及实现

区间图着色问题:贪心算法设计及实现 1. 问题定义2. 贪心算法设计2.1 活动排序2.2 分配教室2.3 算法终止 3. 伪代码4. C语言实现5. 算法分析6. 结论7. 参考文献 在本文中,我们将探讨如何使用贪心算法解决一个特定的资源分配问题,即区间图着色问…

网站备案期间怎么关闭首页显示无法访问-文章及其它页面正常访问

自从做了开发者之后才发现每个人博主的需求都是不同的,的的确确颠覆了我的观点,无论是页面布局还是SEO相关的设置,可能是因为站点属性不同所以需求不同,慢慢的就会在主题加入一些自定接口来满足不同人的需求,有人需要P…

什么是IIoT?

什么是IIoT? IIoT,即工业物联网(Industrial Internet of Things),是指将物联网技术应用到工业领域,通过微型低成本传感器、高带宽无线网络等技术手段,实现工业设备、系统和服务的互联互通,从而提高生产效率、降低能耗和成本,实现智能化和自动化生产。 IIoT的应用范围…

使用isort和autopep8统一代码风格

前言 今天和大家分享一篇关于python代码风格统一的方法。我自己之前有使用过,但都是使用公司现成的,没有自己动手去实操,所以为了一探究竟,今天专门花了一点时间去研究,这个过程还挺顺利的,这里我将这个过…

【最新可用】Claude国内镜像,可上传图片,可用Claude3全系模型,包括Pro版本的Opus),亲测比GPT好用

Claude对话、上传图片的超详细教程来啦! 近期,Claude 3 Opus的发布引发了网络上的广泛关注与热议,有观点认为其性能已经凌驾于GPT-4之上。虽然网络上已经出现了大量基于这两款先进AI技术的实际应用案例,但仍有许多人对在国内如何…

利用代码批量删减文件夹里面指定数量的图片

这段代码会遍历 parent_directory_path 下的所有子文件夹,并在每个子文件夹中删除指定数量 num_to_keep_per_folder 的图片。请确保 parent_directory_path 变量指向了你的父文件夹路径,并根据需要修改 num_to_keep_per_folder。 import osdef delete_i…

day03-(Centos7安装Docker)

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

大模型的RAG(检索增强生成) ----大模型外挂

目录 1 什么是RAG 2 为什么需要RAG 3 如何使用RAG 3.1 RAG技术原理 3.2 RAG工作流程 3.2.1 最基础的RAG流程 3.2.2 增加预处理查询的 RAG 3.2.3 带有聊天历史的 RAG 3.2.4 增加自动排序的 RAG 1 什么是RAG 检索增强生成(RAG)是一个概念&#xff…

curlftpfs和fusermount

curlftpfs 是一种 Linux 系统下用来将 FTP 服务器挂载为文件系统的工具,这意味着可以通过本地目录来访问和操作 FTP 服务器上的文件。 挂载FTP服务器到本地系统 为了挂载FTP服务器到本地系统中,使用curlftpfs工具,可以按照以下格式书写命令…

鼎信通达语音网关怎么对接VOS3000

鼎信通达语音网关对接VOS3000的具体步骤可能会因版本和模型的不同而有所差异,但通常包括以下几个基本步骤: 登录VOS端:首先需要登录到VOS系统中,添加落地网关和账户。 添加账户:在账户管理中添加账户,并应…

线性表的链式存储(单循环链表)

文章目录 前言一、循环链表是什么?二、单循环链表三、单循环链表基本操作的实现总结 前言 T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版…

PyTorch深度解析:Tensor——神经网络的核心构建块

在深度学习和神经网络的研究与应用中,Tensor(张量)无疑是一个核心概念。特别是在PyTorch这一强大的深度学习框架中,Tensor更是扮演了举足轻重的角色。本文将深入探讨PyTorch中的Tensor,从其基本定义、特性、操作到实际…

对组合模式的理解

目录 一、场景1、题目描述 【[案例来源](https://kamacoder.com/problempage.php?pid1090)】2、输入描述3、输出描述4、输入示例5、输出示例 二、实现(假的组合模式)1、代码2、为什么上面的写法是假的组合模式? 三、实现(真的组合…

【嵌入式Linux】STM32P1开发环境搭建

要进行嵌入式Linux开发,需要在Windows、Linux和嵌入式Linux3个系统之间来回跑,需要使用多个软件工具。经过了4小时的安装(包括下载时间),我怕以后会忘记,本着互利互助的原则,我打算把这些步骤详…

51.基于SpringBoot + Vue实现的前后端分离-校园志愿者管理系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的校园志愿者管理系统设计与实现管理工…

基于SSM,JSP超市进销存管理系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 权限划分:用户管理员 用户: 登录,注销,查看基本信息,修改基本信息 进货管理: 进货信息:可以新增进货,查询进货&#xff0…