找回密码
 会员注册
查看: 22|回复: 0

域自适应方法MIC代码复现流程及问题解决记录

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-11 12:04:40 | 显示全部楼层 |阅读模式
题目:MIC:MaskedImageConsistencyforContext-EnhancedDomainAdaptation论文:arxiv.org/pdf/2212.01322源码:https://github.com/lhoyer/MIC1.配置训练环境1.1获取代码直接在github上下载,解压后打开文件夹可以看到有分类(cls)、检测(det)、分割(seg)三个任务类型,此时右键cls用pycharm打开1.2创建虚拟环境在AnacondaPrompt中创建名为MIC的虚拟环境,根据项目中readme文件中的要求,选择python为3.8.5版本condacreate--nameMICpython=3.8.5此时即可打开pycharm中刚刚创建的项目界面,点击右下角解释器添加本地解释器,打开conda环境列表,选择刚刚创建的虚拟环境MIC然后在终端下载依赖pipinstall-rrequirements.txt2.训练脚本2.1参数配置对于论文中的实验,可以使用脚本自动生成不同的配置并对其进行训练pythonrun_experiments.py--exp打开experiments.py参阅有关可用实验及其分配ID的更多信息这里选择第二套实验配置elifid==2:architecture='resnet101'datasets=[('VisDA2017','Synthetic','Real'),]udas=[#udamethod,alpha,q,patch,ratio,aug('cdan_mcc_sdat_masking',0.9,None,64,0.7,True),]for(dataset,source,target),(uda,alpha,pseudo_label_weight,mask_block_size,mask_ratio,caug)\initertools.product(datasets,udas):ifcaug:#augmentationparametersfromDAFormermask_color_jitter_p,mask_color_jitter_s,mask_blur=0.2,0.2,Trueelse:mask_color_jitter_p,mask_color_jitter_s,mask_blur=0,0,Falsecfg=config_from_vars()cfgs.append(cfg)只需在终端输入以下命令即可选择该配置开始训练pythonrun_experiments.py--exp2在运行训练命令之前需要登录wandb网站,注册登录之后创建一个项目,项目命名为cls(任意命名),然后回到pycharm界面打开终端输入wandblogin按照提示登陆wandb,如果报错则更新wandb。然后打开examples下的cdan_mcc_sdat_masking.py文件,将project的值更改为刚才创建的项目名称。2.2数据集预下载(可选)实验配置2中用到的数据集是visda2017,可以在examples文件下按照如下结构创建目录下载网址: ("image_list","image_list.zip","https://cloud.tsinghua.edu.cn/f/c107de37b8094c5398dc/?dl=1"),("train","train.tar","http://csr.bu.edu/ftp/visda17/clf/train.tar"),("validation","validation.tar","http://csr.bu.edu/ftp/visda17/clf/validation.tar")如果需要提前下载另一个数据集Officehome,下载方法类似不提前下载也行,运行训练脚本时会自动下载,只要网络没问题结果是一样的。但是其中的image_list文件经常因为网络问题无法下载,即使提前下载也有可能下载不了,因个人网络情况而异,如果这个文件实在无法下载,可以等train和validation都下载并解压好了,在两个文件夹的最后分别可以找到一个image_list.txt文件,只需将这两个文件复制到image_list下,并将来自train文件夹中的txt文件改成train.txt,来自validation文件夹中的txt文件改成validation.txt。3.训练中的报错及解决方法3.1路径问题报错:Thesystemcannotfindthepathspecified.解决:run.experiments.py中用到cd方法,且使用不正确,注意cd方法一般是在命令行使用的快捷命令,用于修改工作目录,可改用cwd方法,代码修改如下,整体替换即可importargparseimportsubprocessfromexperimentsimportgenerate_experiment_cfgsif__name__=='__main__':parser=argparse.ArgumentParser()parser.add_argument('--exp',default='2',type=int,help='Experimentidasdefinedinexperiment.py',)parser.add_argument('--machine',type=str,default='local',choices=['local',])args=parser.parse_args()cfgs=generate_experiment_cfgs(args.exp)fori,cfginenumerate(cfgs):ifargs.machine=='local':print(f'Runconfig{i}/{len(cfgs)}:',cfg)sub_out=subprocess.run(cfg["EXEC_CMD"],shell=True,cwd=cfg["subfolder"])ifsub_out.returncode!=0:print(f"Errorexecuting{cfg['EXEC_CMD']}in{cfg['subfolder']}")else:raiseNotImplementedError(f"Machinetype{args.machine}isnotsupported.")另外运行训练脚本前要保证工作目录一定要在cls下,比如(MIC)PSF:\ME\downloading\MIC-master\cls,否则还会报错找不到路径3.2内存问题报错:RuntimeError:[enforcefailat..\c10\core\CPUAllocator.cpp:79]data.DefaultCPUAllocator:notenoughmemory:youtriedtoallocate102760448bytes.解决:如果是用cpu调试代码,一定会遇到内存不足的问题,可以在训练脚本cdan_mcc_sdat_masking.py中的342行把默认的batch-size调成2,356行的workers改成0parser.add_argument('-b','--batch-size',default=16,type=int,parser.add_argument('-j','--workers',default=0,type=int,metavar='N',3.3numpy更新语法弃用问题dalib/modules/grl.py文件中第71行有个过时的用法np.float需要更改,只需去掉np.3.4torch和cuda版本不对应导致无法调用GPU在GPU上训练时还是会显示内存不足,打开命令行输入命令nvidia-smi可以看到GPU占用情况,发现GPU没有被调用,训练时仅使用了CPU,那这种情况就很可能是torch和cuda版本不对应引起的,所以我们去这个网站(download.pytorch.org/whl/torch_stable.html)上下载和我们需要的版本接近的torch+cuda的二进制包,这里的包都是对应好的,另外还要再下载一个对应的torchvision包(版本对应参考下表)这里我选择了torch1.10.0,那么torchvision版本就是0.11.0注意两个文件的完整文件名,其余部分要选一样的,都有cu113,cp38,windows系统下载好之后使用pip指定路径安装,如果下载好文件位于C:\Users\ME路径下,则安装命令为pipinstallC:\Users\ME\torch-1.10.0+cu113-cp38-cp38-win_amd64.whlpipinstallC:\Users\ME\torchvision-0.11.0+cu113-cp38-cp38-win_amd64.whl
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-31 05:34 , Processed in 0.957724 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表