JackYFL / DISC

The official implementation of CVPR2023 paper "DISC: Learning from Noisy Labels via Dynamic Instance-Specific Selection and Correction"
43 stars 6 forks source link

PermissionError #6

Closed macaulishxcoo closed 1 year ago

macaulishxcoo commented 1 year ago

hello,

when I run the program, the error is reported, I thought it was a file permission issue, but I couldn't find that file. how to solve it?

Traceback (most recent call last): File "F:\80_workspace02\pytorch_04\DISC-main\main.py", line 240, in main() File "F:\80_workspace02\pytorch_04\DISC-main\main.py", line 27, in main config = load_config(args.config, _print=False) File "F:\80_workspace02\pytorch_04\DISC-main\utils\tools.py", line 45, in load_config configfile = Config(filename=filename) File "F:\80_workspace02\pytorch_04\DISC-main\utils\config.py", line 30, in init cfg_dict = self._file2dict(filename, True) File "F:\80_workspace02\pytorch_04\DISC-main\utils\config.py", line 86, in _file2dict Config._substitute_predefined_vars(filename, File "F:\80_workspace02\pytorch_04\DISC-main\utils\config.py", line 65, in _substitute_predefined_vars with open(temp_config_name, 'w') as tmp_config_file: PermissionError: [Errno 13] Permission denied: 'C:\Users\xxx\AppData\Local\Temp\tmpka33seex\tmp4j0_xtf7.py'

looking forward to a reply

macaulishxcoo commented 1 year ago

作者,你好! 请问下,这个tmp_config_file临时配置文件是用来干什么的,源码中默认的写入的c盘文件地址我一直写不进去,我尝试把文件权限改了和重新改了个临时文件的地址,还是一直报错: PermissionError: [Errno 13] Permission denied: 'C:\Users\xxx\AppData\Local\Temp\tmpka33seex\tmp4j0_xtf7.py' 而且我发现,源码中 with tempfile.TemporaryDirectory() as temp_config_dir: temp_config_file = tempfile.NamedTemporaryFile( dir=temp_config_dir, suffix=fileExtname) temp_config_name = osp.basename(temp_config_file.name) 将tmp_config_file默认的文件地址已经确定了,要想将临时文件的路径改成指定路径还不是那么简单。 这种问题,您之前有遇到过吗?是怎么解决的呢?谢谢!

JackYFL commented 1 year ago

你好,感谢你对我们工作的关注。因为我之前是在Linux系统上跑的,所以并没有遇到过这样的问题,你可以在Linux上配置一下环境重新运行一下看看是否还会出现问题。

JackYFL commented 1 year ago

你好,

这些mode主要用于不同数据的加载。因为有些情况下,模型同时需要加载两种增广的数据,有些情况只需要弱增广数据,有些情况需要加载额外的样本索引用于挑选,因此设置了不同的加载模式。

祝好, 一帆

李一帆

@. | ---- Replied Message ---- | From | @.> | | Date | 8/31/2023 23:39 | | To | @.> | | Cc | @.> , @.***> | | Subject | Re: [JackYFL/DISC] PermissionError (Issue #6) |

作者,你好!我对代码里的一些细节有点疑问,想向您请教下: def getitem(self, index): if self.mode == 'train': img_id, target = self.train_imgs[index] img_path = self.train_dir + img_id image = Image.open(img_path).convert('RGB') img = self.transform_fixmatch(image) return img, target

elif self.mode == 'train_single':
    img_id, target = self.train_imgs[index]
    img_path = self.train_dir + img_id
    image = Image.open(img_path).convert('RGB')
    img = self.transform_train(image)
    return img, target

elif self.mode == 'train_index':
    ind = index
    img_id, target = self.train_imgs[index]
    img_path = self.train_dir + img_id
    image = Image.open(img_path).convert('RGB')
    img = self.transform_fixmatch(image)
    return img, target, ind

代码中把数据分成了很多份,train,train_single,train_index等,这么划分数据的目的是什么,每份数据起什么作用,划分有什么技巧吗?希望您解答下。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

macaulishxcoo commented 1 year ago

十分感谢您的回复!

如果我要训练一个本身已经带噪声的数据,并不需要再往数据中加入其他噪声,是不是只要设置percent=0,就代表我们训练的数据是我们原来的数据?

另外,我可能问题比较多,后续可能还会有些问题向您请教,非常感谢你的耐心答复。

JackYFL commented 1 year ago

是的,如果percent=0意味着使用原本的给定标签而不加入其他噪声。

macaulishxcoo commented 1 year ago

作者,你好!

请问论文中Inst.是什么噪声类型?和sym和asym噪声有什么区别?

源码disc方法中是没有加入warmup预热?我现在出现准确率在start_epoch训练范围内,准确率上升很快,但是超过这个范围,准确率出现异常,下降成很小,且不再更新?如果我想数据学习的更好,我是不是应该start_epoch设置得越大越好,前提是如果准确率一直在上升得情况下,这个值对最终得结果会影响很大吗?还是说主要用来降低训练过程中的过拟合?这个值在我训练我自己的数据集时应该怎么设置呢?

谢谢,期待回复!

JackYFL commented 1 year ago

感谢你对我们工作的关注,

inst. noise是一种样本相关的标签噪声,即对于不同样本采用不同的加噪方式,这里我们使用的是《Part-dependent label noise: Towards instance-dependent label noise》中的加噪方法。sym.和asym.为样本无关的标签噪声,即加噪过程与样本特征无关。

DISC中,start_epoch为控制warm-up的epoch数目。warm-up的时间并不一定是越大越好,和数据集有关系,warm-up时间太久容易记住原始数据集中的噪声标签。

macaulishxcoo commented 1 year ago

作者,你好!

在这几天调试代码跑我自己的数据集时,我突然想到了一个问题,在处理噪声数据集时,训练集是带噪声的,测试集或验证集我们应该选用干净的数据集还是从总的数据集里面进行随机划分?测试集或验证集带噪生是不是会对最后的测试结果产生很大影响?

JackYFL commented 1 year ago

验证集通常情况下应该与训练集同分布,但是实际情况需要和你对比的方法保持一致。测试集应该选用带有干净标签的数据集。验证集带噪声可能会对结果产生一定影响,因为利用带噪数据集挑选出来的模型不一定是最优的。

macaulishxcoo commented 1 year ago

作者,你好!

论文中对数据是否强弱增强是不是对最后的训练结果会产生很大的影响?我目前训练损失一直震荡的原因我猜可能是对数据增强导致原本的特征发生了很大的改变,尤其是强增强,因为我的数据是关于缺陷的数据,有很多缺陷是极其微小的,一个简单的数据增强操作就可能改变原来的特征,但是论文中对数据强弱增强又是disc算法中一个比较关键的操作。

JackYFL commented 1 year ago

强弱增广确实会对结果产生一定影响,你可以参考论文中对这个操作的消融实验。具体需要多大程度的强增广,需要根据数据的特点来决定,如果是缺陷检测任务不建议直接使用randaug里面的增广方式。