Open jiaweichaojwc opened 12 months ago
我也是这个问题,请问你解决了吗?
我也是这个问题,请问你解决了吗?
你好,我发现使用作者的maskadapter收敛是相当慢的,甚至不能收敛,我也查看了一些别的资料,我觉得是这种maskadapter好像不适合我的具体任务,我还有一种感觉好像是梯度不能反传,这个问题是一直困惑着我,我目前还是一个学生,我觉得以我的能力好像是暂时解决不了这个问题,如果你有更好的想法或者有解决方法,可以告诉一下我,谢谢
@jiaweichaojwc 我已经解决了,最主要的是optimizer优化器和get_scheduler学习率更新策略要自己看下,我这边都自己重新写了,目前可以loss可以正常减小。优化器我现在使用的是adam,另外损失函数部分你可以根据自己训练集场景再优化下。
@LiquorPerfect 我自己重写过adamw的优化器,我的loss能降低一部分,但是我的val的miou好像最高达到10,你的miou是否是正常的?我做的是语义分割的微调,感谢你的工作
@jiaweichaojwc 我就一个类别的分割,算上背景就2个类别,miou是正常上升的,最高能达到93左右。我损失函数使用的是bce,没有用作者提供的ce损失。我修了forward部分,使用了sam原始结构中forward的,使用了后处理后,并对mask进行sigmoid,因为我是二分类。
@LiquorPerfect 恭喜你的训练结果取得了不错的接果,我看作者发布的源码,大概就是将最后的输出变成了(b,n,h,w),而我修改了一部分encoder的部分,出现了loss不收敛,我接着使用原来sam的forward结构,还是不收敛,我倒是觉得不像是ce的loss的问题,虽然你是二分类的问题,但是我是多分类的问题,我觉得最后都要输出(b,n,h,w),您可以让我看一下你的训练配置文件吗? 这是我的优化器和训练策略,我改了好几次的训练策略,好像loss降低到0.2左右附近,然后出现了loss上下浮动,并且miou也维持到了8左右,我想应该是训练策略的问题
我后面没有通过配置文件创建,修改的直接在代码里。我感觉point和boxes不适合多类别语义分割,你的提示词是什么?mask or point or box?
add: 要不你看看下面两个。 https://github.com/UX-Decoder/Semantic-SAM https://github.com/UX-Decoder/Segment-Everything-Everywhere-All-At-Once
我后面没有通过配置文件创建,修改的直接在代码里。我感觉point和boxes不适合多类别语义分割,你的提示词是什么?mask or point or box?
add: 要不你看看下面两个。 https://github.com/UX-Decoder/Semantic-SAM https://github.com/UX-Decoder/Segment-Everything-Everywhere-All-At-Once
我使用的是https://github.com/ziqi-jin/finetune-anything,这个目前还不支持提示信息呀,作者是将提示的舍弃掉了,直接用的encoder和maskadapter,loss这个问题困惑我许久,直到最近你回答了这个问题,我觉得可以试一下,目前感觉还是很难解决,不知道什么原因,可能会暂时搁置一下了
我后面没有通过配置文件创建,修改的直接在代码里。我感觉point和boxes不适合多类别语义分割,你的提示词是什么?mask or point or box? add: 要不你看看下面两个。 https://github.com/UX-Decoder/Semantic-SAM https://github.com/UX-Decoder/Segment-Everything-Everywhere-All-At-Once
我在他的基础上加了boxes和point提示词,forward部分我没有用作者给的,还是使用的原生sam forward部分内容。
这样呀,虽然我的数据集有boxes的提示信息,但是当我在进行验证的时候是否还是需要一个人工交互的场景?我目前做的任务是安检语义分割的任务,如果我训练的时候使用boxes,但是当我部署下来使用的时候就会出现人工交互的场景,这样无疑是给人工带来了极大的不便,所以我觉得加提示信息不太适合我的任务,还是我的理解有误?如果你有更好的想法欢迎给出指导
这样呀,虽然我的数据集有boxes的提示信息,但是当我在进行验证的时候是否还是需要一个人工交互的场景?我目前做的任务是安检语义分割的任务,如果我训练的时候使用boxes,但是当我部署下来使用的时候就会出现人工交互的场景,这样无疑是给人工带来了极大的不便,所以我觉得加提示信息不太适合我的任务,还是我的理解有误?如果你有更好的想法欢迎给出指导
如果包含提示词,在实际使用中需要加入的效果好点,但是也不一定非要人工交互,可以模型生成boxes?,而且boxes和point是通用的,有了boxes point也就有了。我等会训个没有提示词的看看。我感觉sam不适合多类别语义分割,普通模型输出的是BCHW,C表示类别数。而这里multimask最多3个,是不是损失函数也有问题。
@LiquorPerfect 原本sam最后生成的是0和1的mask图,作者通过这个仓库进行了maskadapter,引入了num_class,让其能够适应多分类的任务了,但是我确实是loss不能下降,miou确实也是最高只能达到10左右
@jiaweichaojwc 多个类别分割的话,建议还是下面两个方法尝试。 https://github.com/UX-Decoder/Semantic-SAM https://github.com/UX-Decoder/Segment-Everything-Everywhere-All-At-Once
@LiquorPerfect 好的,谢谢你啊,我去看看这两个项目
@jiaweichaojwc 你好,请问现在SAM输出多分类语义信息上的问题解决了吗? 我也是用这个仓库的代码对SAM进行微调,三分类语义分割,虽然loss在下降但是最有的mIoU只有0.5;自己写了推理代码,但是发现推理出来的图片基本都是黑的,说明训练失败了,请问有解决方案吗
@bvcg204 我觉得是这种微调的架构有问题,我目前没有解决方法,这个问题困惑了我很久,现在已经放弃了
@LiquorPerfect 您好,我也是使用bce和sam原始结构中forward进行一个二分类的分割任务,结果出现了loss不下降的情况,感觉是梯度没有传过去,请问您具体是如何实现的呢
@LiquorPerfect 您好,我也是使用bce和sam原始结构中forward进行一个二分类的分割任务,结果出现了loss不下降的情况,感觉是梯度没有传过去,请问您具体是如何实现的呢
你好,我机会是基于原生sam修改的,只用了此作者的一个框架,需要注意的是mask_threshold会阻止梯度回传,导致梯度不更新。(我好像图片上传不了)
我后面没有通过配置文件创建,修改的直接在代码里。我感觉point和boxes不适合多类别语义分割,你的提示词是什么?mask or point or box?
add: 要不你看看下面两个。 https://github.com/UX-Decoder/Semantic-SAM https://github.com/UX-Decoder/Segment-Everything-Everywhere-All-At-Once
你好,请问一下,用这个项目预训练自己的多类语义分割模型,我只有无监督图片,以及少量的分割标注,我的prompt应该从哪里来呢?
感谢大佬非常优秀的工作 当我使用交叉熵loss进行训练时,loss一直不下降,而且mIoU一直是7左右,不知道有没有什么解决办法 Thank you for the compliment. When I train using cross-entropy loss, the loss consistently does not decrease, and the mIoU (mean Intersection over Union) remains around 7. I'm not sure if there is a solution to this issue."