域适应这个概念不算新,但是任务本身似乎有难度,这篇工作的主要
这一篇是把源域和目标域的图像都输入到同一个网络里,只是在生成标签的时候,因为目标域是通过主动学习的一个习得函数来选择要标注的部分,一种是像素级,一种是区域级,
给我的感觉比DAFormer对显存要求更高而且训练时间更长;
这两个网络我都有爆显存的情况,一次可能是因为什么加速器,
6.1 ResNet网络结构,BN以及迁移学习详解_哔哩哔哩_bilibili
这里说到,迁移学习好在原本的大模型会在小数据集上过拟合,但是预训练微调的方式可以避免这种过拟合,而且由于预训练,节省了很多从头训练的时间。并讲了三种微调的方式:资源允许下的从头训练,资源不允许的训练最后几层,或加一层全连接只训练这里。
正愁DA没有域适应的数据,这就找到了,还得是CSDN;
检索词:心脏合成数据集 CT MRI
检索策略:尽量专业术语,精确点
结果:MICCAI 2020 Challenges相关数据集下载_asoca2020数据集_sigmoidAndRELU的博客-CSDN博客
Informations - Grand Challenge
虽然没找到合成数据集,但是找到了这个挑战赛,给我心里有点底了;
可惜上面这篇是神经外科的一个期刊,感觉走走太偏了,打算先不继续
因为自己在本地运行这个项目的脚本,训练一个source为gta在deeplabv2上的版本,这个项目没有给出预训练模型,自己也不知道怎么描述自己这个需求
今天在整理原来本地收集的很多论文,给他们归归类的时候,发现了这篇文章Shape-aware joint distribution alignment for cross-domain image segmentation,感觉和DA要解决的问题很类似,然后加了一个检索词: github到google上去搜,结果找到了一个整理好的DA方面论文的仓库GitHub - zhaoxin94/awesome-domain-adaptation: A collection of AWESOME things about domian adaptation,真的很意外,原来觉得这个方向的论文很少,也没有啥代码,结果就论文和预训练模型GitHub - BIT-DA/SePiCo: [TPAMI 2023] Official Implementation of SePiCo: Semantic-Guided Pixel Contrast for Domain Adaptive Semantic Segmentation https://arxiv.org/abs/2204.08808都找到了!
说明还是要经常整理自己收集过的文章,看看有没有感兴趣的,如果想深入,要去google上以github为条件搜下代码啥的,真的很幸运!
虽然如此,但是想到之前看的微信公众号paperweekly推的一篇文章说,这个领域的问题还是针对泛化性的问题设计一个在特定数据集上生效的问题,感觉自己的这点探索,道路还很漫长,索性,之前积累的一些文章和检索策略还是很管用,
插播一个小trick,我鼠标的微动出问题了,之前在小红书上搜到说用头发摩擦就好了,否则还得换,忘了当时怎么摩擦的了,好像是摩擦的底部,好了一阵又不行了,今天把壳子打开,用桌上的一根头发直接摩擦的微动,就划拉了一会,明显感觉点击之后能拖动窗口了,感觉很多土办法就是马斯克说的那种第一性原理,如果真就标准的拿去修,本地没有售后还得自己买微动,少说花几十块,而这样,一分钱都不用花,真的很感叹
再就是看看别人是怎么做的,关于如何使用kaggle和github项目的问题,主要是关注issue和discusion的部分,这块也是,自己要注意的一点,
本来想看github上的项目怎么部署到kaggle上,结果人家不提倡,认为kaggle的作用一个是讨论区,另外是竞赛和数据的那些描述,主要是怎么演示数据效果,大型项目不合适,其实这一点,之前mmsegmentation在github上有个仓库,用的是jupyter notebook,我觉得应该可以放到这来用吧,再就是 人家怎么把kaggle的代码拿来用,就是通过查关键词,比如数据转换,在一个相关的code的排序中搜mask
EDA:探索数据分析,就是初步认识数据的一个代码
这个代码复现了三周,原本的二分类问题,因为在这个场景不显著,于是换成个多分类,找数据和处理成和代码兼容的格式这块花了些时间,几度要放弃,索性最后勉强找了个CHAOS,把T1的试着迁移到T2上,在我调试到label_to_file发现确实有样本在类别间分布不平衡的问题的时候,总算是觉得前面这些没白折腾
https://blog.csdn.net/qq_42578970/article/details/127639134?spm=1001.2014.3001.5502
这里提到自监督在类别不平衡条件下比监督学习的表现优秀,具体那个曲线反应得什么?
本文是基于自训练的类别不平衡问题,提出的主动学习方法和两个相应指标缓解类别不平衡,改善分割性能的,本身应该属于监督学习领域
先是GPU莫名被占用了,然后试着断网,root用户也无法访问服务,以为是因为系统更新的原因,导致驱动不可用的,所以尝试还原系统到两周前的状态,结果被什么防病毒程序组织,失败,然后wsl2子系统也不能用了,说实话,这电脑拿来,我始终感觉好像它不受控制,
试着使用远程环境和调试,因为本地没有环境了,需要注意在edit config里把本地代码映射到远程,这样配置里的相对路径可以根据远程路径下的代码和数据情况生效,即使本地没有那些数据甚至没有环境也没事,然后一些配置参数比如OUTPUT要写在根部,opts这种的尽量注释掉,config莫名地没出问题,可能是因为parser自动可以解析他,至此,顺利地在本地没有环境的情况下,使用了远程调试,可惜数据还是得再来一份,具体的加载数据问题目前还没遇到,到目前为止一切ok,这就是探索的感觉,哈哈,从内心很感谢那个鼓励我说你试一下,结果不一定不好的人,坚持让我自己想办法和动脑的人,这比你自然地想要依靠一个人要困难些,但是让你懂得要自己成长
pycharm 远程debug的时候,以为是因为显存占用,所以导致调试一直出于连接状态,一直没发现是多线程的原因,直到显存空了还在connect,解决就是setting里设置兼容模式:gevent compatiable
在迭代了10K次,运行到主动学习采样的时候,张量没对上,具体地没看清,关了远程的卡,近端的终端掉线了,log莫名没有记录,要加tensorboard查看损失情况,
在default改动了设备编号,导致输入变量和权重张量的加载设备不匹配,具体:
关于本地改动的自动上传,当切换了远程设备的时候,需要手动上传,
在这里路径映射注意上面的local最后一个文件夹和下面的文件夹名称一致,避免上传以后嵌套一整个文件夹到目标路径
当你配置了多个远程终端的时候,每次要选一下,这样很麻烦
如果你直接点开终端的文件修改,以为能直接改变,不用上传,实际不行,还是得注意这条那个回车号那里空了没
直到调试遇到:Error running 'train': Cannot find remote credentials for target config com.jetbrains.plugins.remotesdk.target.webDeployment.WebDeploymentTargetEnvironmentConfiguration@44a272af
这里提到的都检查了,无果,评论区提到的ssh配置,于是我重新配置了下编译器,把原来很多重复的删了,因为怀疑上述调试的报错问题是因为我在上传项目的配置中发现自己以前配置过很多,有的路径写错了,我就直接删了,保留了一个最近自动上传成功的,结果这个保留的配置似乎和setting里的配置没对上,然后我就重新配置了,结果过文件都自动上传了,调试的报错也解决了;不过希望下次切换终端没这么麻烦
远程调试还有个特别注意要和终端命令保持一致的地方:你在run debug config里写的Parameters,这里是对应本来要输入终端的命令的,你调试的时候总有个入口要去写这块的参数,对于层次化的配置管理,你在core/config/default.py文件里改可以,但是注意下次切换别的实验的时候,也要改,否则报错,你在train的parser里改也可以,也是注意要切换,调试的时候不知道为什么,那个opts每次都错,所以我就把它注释了,可能就是这个原因导致的;然而不是,是命令里有两个配置,一个config 一个output_dir,所以要么都在train里设置,要么都在run config里设置;问题是都分别设置了之后还是不行,似乎是命令行v2里的传不进去,代码里的cfg.OUTPUT还是默认的default里的,所以只好改了default的,然后就好了,以后就改这个了
还有个问题,进程非正常退出,这代码没有自动释放内存,我就一直占着我都不知道的显存,还另外去开了卡,在用ctrl+C 或Z中断进程后,要用ps aux检查进程状态,是运行R 还是等待S还是终止T,如果用kill -9 pid,可以直接释放已经停止的进程所占用的内存
当同时进行几组实验的时候,如果要加载断点模型重新训练,不仅要在训练阶段的for循环前面加上从for循环处开始训练,而且要确保模型已经加载进去了,这块打印信息会有,我是在一台设备上,做实验二,发现加载了实验三的模型,报了Missing key(s) in state_dict: "conv2d_list.0.weight", "conv2d_list.0.bias", "conv2d_list.1.weight", "conv2d_list.1.bias", "conv2d_list.2.weight", "conv2d_list.2.bias", "conv2d_list.3.weight", "conv2d_list.3.bias".
Unexpected key(s) in state_dict: "parallel_branches.0.0.weight", "parallel_branches.0.1.weight", "parallel_branches.0.1.bias", "parallel_branches.0.1.running_mean", "parallel_branches.0.1.running_var", "parallel_branches.1.depthwise_conv.weight",这种当前架构和加载的模型不一致的问题,然后发现当前配置针对v2,而加载的预训练模型是v3,因为是在默认配置里写的,而不是在命令行,所以没有注意;也正是这里的错误,发现另外两处训练的地方没有加载预训练模型,但是改了iter从9999开始,虽然loss的效果很快迭代过来,但是毕竟和原始的实验设置不一样,而且一做就是几天,所以就中断后重新加载了;注意这里如果训练的迭代外面加for循环从9999开始到40K解释,在首次加载完预训练模型之后,并迭代完40K次之后,下一次,模型会从10020开始重新迭代;
在paperswithcode对CHAOS数据集的介绍中,CT和MRI使用两个单独的网络,再混合,是不允许的,但是MRI的两个序列,T1和T2却可以用两个单独的网络,这个很意外,我认为二者是更接近,用一个网络解决的,在我的情况里,都用的是deeplabv3
再者,无论T1还是T2,都有两个相位,我迁移的时候,只用了其中一个,因为不同相位有重复命名的
因为要和其他模型比较,从数据集是多器官分割,是MRI,是自训练或者半监督看,多器官分割还有个数据集就是synapse,只有CT的,还有个做腹部器官分割的模型是TransUNet,注意区分,做腹部器官分割,不一定是多器官分割,是MRI的,脑部的多,也有心脏的,TransUnet在ACDC上第三,但这个是3D的,半监督也有ACDC的;从伪标签看,那还是得理解这个主动学习的标签到底起什么作用
之所以选多器官,是因为这个主动学习的方法针对的场景是多类别分割,如果不执著于这个方法,也就不一定要多器官分割,之前是皮肤病的,二类别,ACDC呢;
Active Learning | Papers With Code
主动学习是个新坑,这种感觉就像C++给我的感觉一样,我在上述网站中,甚至没有找到它在医学方面的表现,模型也只有一个,确实是无从比较;
看到主动学习方面的数据集,有很抽象的MNIST,还有文本视频的;对于医学的数据集,比如DIMCO这个格式的,它自带了一些信息,怎么把这部分用进去,可能是主动学习或者跨模态任务后面要加入的点,也不一定要作为模型自动化的一部分,我觉得作为先验知识用在预处理或者伪标签的制作上的一个约束也是可以的;
CHAOS数据集在上述网站中没有benchmark
感觉无论是从数据集,还是从范式,还是从二者结合的角度,都没法找到一个基准来比较,这个我整不会了;
主动学习(十二)——可复现的主动学习(cvpr2022) - 知乎
这篇提到的关于超参设置也就是调试的问题,nnUNet开始是提出自适应,时隔两年之后提出了自配置,可见配置的这个变动是比其他方面更需要因数据和模型各种情况而异的,从做饭的角度看,如果你有一口大锅,一锅可以煮很多东西,如果要煮的东西少,而锅大水也多,那么很快煮熟,配置的调料需要依据这个东西也就是数据,以及水也就是算力来调整,
关于batch_size并非越大越好,应该选择最节省时间的,还是最大化使用现有资源的?文章说是前者;并且它不是一个单独的项,而是和其他参数比如优化器选择相关,比较敏感的,这块我没注意要调优化器这些;因为无监督学习哪篇来着提到batch_size非常大,可能任务不同,他那个是128的,效果好,所以我选择了尽可能最大化训练可用资源的32;
还提到了BN,但是没有细说,只说很复杂和Batch_size有关,我感觉调参这块可以多用用kaggle,因为迭代得多
transunet在acdc上第三,这篇的消融我记得不错,腹部器官也是多类,有分布的比较那种
这个是21年的我记得,也不能找太差的来比吧
远程连接存在数据不一致的问题,比如你直接在终端改并提交,但是你本地开了自动同步,如果你本地和远程的代码中数据不一致,仍有可能导致远程代码没有正确修改
有个训练中很困惑的问题,就是,deeplabv3+在改了类别和训练标签之后,time那变成13s了,而同样情况下,甚至标签的对比度更低的deeplabv2在用PA策略的时候,time是2s是比之前的0.1-0.5都是要花更长时间的;不同的地方,一个是设备,之前设备是单独使用,没有其他代码共享,batchsize是没调的,另一个就是;想不起了
我是有种感觉,主动学习可能真的对调参很敏感
还有和服务器的连接中断也会直接导致训练的终止,因为是由终端启动的,再就是数据不一致,包括自动同步和直接修改远程文件要记得点击上传箭头;
至于服务器连接超时,可能是ip不可达,之前目标主机修改了ip就有这个问题;然后我们的同学们发现这个问题,思路是看别人怎么解决的,直接点的是,到现场去看,那台设备可能是物理断连了;这种情况,训练当然会终止;
有时候你一个人遇到这个问题,你可能不会想着去解决,甚至觉得无法解决,但是,有了大家,你会想不是你一个人有这样的困惑,心态会不同
下载预训练模型,不用google去登录那个网站,可能要验证什么google账号很麻烦,直接服务器用wget 网址,这个网址可以在模型的github的issue找到,前人遇到的问题,会发布在这
上传文件时提示:不能复制文件到服务器某个位置,可能是因为磁盘空间满了,而不一定是路径映射问题,验证的:df -h /path 之间见过这种问题,解决的办法就是 用一个ln -s 链接到其他挂载点
每次重新运行模型,因为输出路径是固定的,又因为命名相同,原来的 模型会被 重写
这是运行遇到的问题
这个实验做完,因为是多类分割,也不知道怎么比模型,暂停了。