DA-CLIP中关于图像退化检测和复原处理,推理过程代码的整体理解(三)

时间:2024-04-14 07:13:00

这篇文章算是前两篇文章后面所有工作的汇总吧。然后埋下一些坑有时间再完善相关的解读。

前述成果

 前两篇文章中主要讲解了windows下DA-CLIP的部署和app.py中关于演示代码非检测复原部分的讲解。

DA-CLIP深度学习图像复原项目运行指导(一)_基于clip模型的图像修复-****博客https://blog.****.net/m0_60350022/article/details/136688746?spm=1001.2014.3001.5502项目演示代码讲解——以DA-CLIP深度学习图像复原项目为例(二)-****博客https://blog.****.net/m0_60350022/article/details/136817365?spm=1001.2014.3001.5502

个人心路历程

这篇文章拖了差不多将近一个月,内容也比较复杂需要大量铺垫,讲讲都做了些什么吧。

3.12前在整理多任务图像复原相关论文,与我的本科毕设相关。当时也看了Restormer、DeblurGAN啥的,选择DA-CLIP项目的主要原因是readme提供了有Gradio界面的信息,这样我运行起来更改方便很多,其次是退化类型多样,并且有退化类型检测这个模块,非常契合我的毕设要求,没看之前确实没找到有关退化类型分类的相关文章,还想着是不是要弄个分类器。

第一周:花了一天左右安装环境运行项目,接下来整理app.py演示代码非检测复原部分的运行逻辑,写第二篇文章。解决运行项目留下来的一些问题并完善第一篇文章。

第二周:退化类型检测相关对CLIP系列从论文到代码定义调用过程进行梳理。研究了一些生成数据集的代码。

第三周:这个时间已经接近4月1日毕设初稿提交时间。但是一、系统能运行但是没有我的工作点二、原理还没理清IRSDE论文和检测复原模块代码还没整理。只能先开论文,按照一天一章的进度和一天进行14小时的实验、论文整理折磨之后顺利提交初稿。期间尝试使用额外数据集old photo进行训练。在train的时候卡住了,tensor size不匹配,一时半会解决不了。也是搞了那么久才发现原理DA-CLIP和IRSDE作者是同一个团队,之前的文章解读都没提到这回事。Orz

第四周:论文进行一些格式修改、查重。没啥问题后摆烂几天。

第五周:没工作没考上研晚上睡不着一个通宵解决了train的报错问题,但是训练参数设置和对比学习过程没看,没跑什么结果。现在整理工作准备答辩。

相关工作CLIP、open_clip、BLIP、SDE、IRSDE

CLIP,论文使用该模型架构训练具有退化意识的模型da_clip

推荐小白先看b站沐神的CLIP论文精讲,可以快速了解模型结构、实验对比、成果、不足等各方面

下文是相关的精讲总结

李沐论文精读系列四:CLIP和改进工作串讲(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso)_n-vocabulary object detection via vision and langu-****博客https://blog.****.net/qq_56591814/article/details/127421979?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171082962316800185832229%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171082962316800185832229&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-127421979-null-null.142%5Ev99%5Epc_search_result_base7&utm_term=%E6%9D%8E%E6%B2%90clip%E7%9A%84%E5%AE%9E%E9%AA%8C&spm=1018.2226.3001.4187#t21根据沐神b站的论文精讲最后的小实验,我也根据代码做了一下复现实验,还是挺有意思的,确实能看出来CLIP图文训练时可能也包含某种“偏见”。通过代码可以了解CLIP 的使用过程和基本结构

沐神CLIP论文精读中的小实验-****博客https://blog.****.net/m0_60350022/article/details/136842756?spm=1001.2014.3001.5501

拿部分LQ图像进行CLIP退化准确率检测。实验显示对CLIP的结果基本差不多,然后acc较低的inpainting,可能是词没弄对?但是确实不容易识别

CLIP退化类型检测小实验-****博客https://blog.****.net/m0_60350022/article/details/136879790 DA-CLIP 退化检测代码先欠着,过几天写

 

 个人感觉准确率是高了,但是也没到十边形战士的地步,inpainting很多也还是不准的,很多也还是分不清noisy和JPEG压缩伪影

 open_clip是clip的开源实现,包含训练、测试、模型结构、开源数据集等相关代码。论文在该仓库基础上添加了自定义了daclip_model.py和daclip_ViT-B-32.json等文件

openai clip官方仓库主要关注于模型的原始实现,在自定义和扩展性方面提供的支持较少,未公开论文原始训练数据集。

 open_clip使用开源数据集训练,如LAION(Large-scale Image-Text Open-domain Non-Aligned)数据集,这是一个非常大的非对齐图像-文本数据集。该仓库也提供了更细粒度的控制选项,如梯度检查点、多种数据源的混合训练等。

博主对该仓库主要模型定义代码model.py进行了简单分析

open_clip仓库成分与模型文件model.py 介绍http://t.****img.cn/qzQwJ

 在此基础上回顾app.py文件中关于DACLIP模型创建过程【3万字代码解读】DA-CLIP/open_clip模型创建、模型配置读取、预训练权重地址读取_open-clip-****博客https://blog.****.net/m0_60350022/article/details/137052422

 BLIP,论文使用该模型生成所需的干净图像caption,并组合形成图像-文本-退化类型对


DA-CLIP关于使用BLIP生成数据集的代码注释https://mp.****.net/mp_blog/creation/editor/136825949?not_checkout=1

博主对DA-CLIP的生成数据集的相关代码进行解读,包含使用BLIP的小demo

【DA-CLIP】Windows下使用clip_interrogator/BLIP进行生成图像-文本-退化类型数据集的generate_caption.py代码运行逻辑_blip模型代码-****博客https://blog.****.net/m0_60350022/article/details/137061820

 关于BLIP的代码和原理,还没了解为什么BLIP代码需要CLIP代码相关去生成caption,但有了CLIP模型创建过程方便我理解BLIP的模型创建和debug,上面这篇文章主要是解决运行bug 。

【DA-CLIP】生成图像描述generate_captions.py代码理解+实践-****博客https://blog.****.net/m0_60350022/article/details/137180758这篇文章是生成caption和图像文本对的csv成功运行。

训练过程

有了数据集train.csv和val.csv可以开始训练模型了。

【DA-CLIP】使用train.py训练_torch was not compiled with flash attention-****博客https://blog.****.net/m0_60350022/article/details/137186089这篇文章主要是解决运行报错,将命令行输入进行训练转为运行py文件

【DA-CLIP】The size of tensor a (39) must match the size of tensor b (77) at non-singleton dimension 1-****博客https://blog.****.net/m0_60350022/article/details/137507694这篇文章是对训练报错进行探究和解决

训练过程代码讲解先欠着,好像只从CLIP训练你想要退化类型的退化意识DA-CLIP

模型评估

保存复原图像,计算并记录每个图像的PSNR、SSIM和LPIPS分数,打印出这些分数的平均值。

【DA-CLIP】test.py解读,调用DA-CLIP和IRSDE模型复原计算复原图与GT图SSIM、PSNR、LPIPS-****博客https://blog.****.net/m0_60350022/article/details/137381378?spm=1001.2014.3001.5502

SDE,论文使用改进的IRSDE进行图像复原

扩散模型。主要是逆扩散公式。score得分计算。博主还在学习中。

代码应该是从IRSDE项目改进过来的。但是是如何完成从单任务单模型,到一个模型处理那么多任务的转变这个研究先欠着

【IR-SDE】Image Restoration SDE项目演示运行app.py-****博客https://blog.****.net/m0_60350022/article/details/137690246?spm=1001.2014.3001.5502这是对IRSDE项目的derain模型演示运行讲解。

其他研究也先欠着,(暂时还不知道研究啥

[DA-CLIP]中图像复原IR-SDE模型创建和定义代码-****博客https://blog.****.net/m0_60350022/article/details/137093518回到DA-CLIP项目,这篇对里面的IRSDE模型创建代码解读

【DA-CLIP】复原过程代码解读-****博客https://blog.****.net/m0_60350022/article/details/137699012这篇文章从app.py运行使用到的IRSDE上下文代码调用过程深入解读。

但是这里欠了两篇文章一个是encode_image图像编码过程生成image_context, degra_context

另一个是代码和IRSDE论文里公式参数的一一对应关系

论文相关

DA-CLIP训练一个额外的控制器,该控制器适应固定的CLIP图像编码器来预测高质量的特征嵌入。通过交叉关注将嵌入嵌入到图像恢复网络中,我们能够引导模型学习高保真图像重建。

整体回顾

 

对于小白而言,实在还是有点抽象不知道怎么理解。我的思路是先看一下论文原文+代码研究

论文DA-CLIP的相关翻译也可见该文,我觉得讲的非常好,但是作为小白我还是不太理解。ControlNet的方法是什么,先mark一下。

他们使用类似于ControlNet的方法,对CLIP做微调,使CLIP可以根据输入LQ图像,得到HQ的内容编码和预测LQ的降质类型编码。这两个编码作为其他模型的条件实现All in one。

CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION_controlling vision-language models for universal i-****博客https://blog.****.net/qq_43800752/article/details/134670677

找个时间把论文提到的关键点的代码对应整理一下 ,并重写这一模块。