回答多位朋友提出的,如何在开源框架使用自有数据集。思路是理解开源代码的设计方法,根据其设计方法增加相应的代码。
具体方法如下:
1.查看开源代码提供者的说明
https://github.com/G-U-N/PyCIL#datasets,这里提供了入手的起点,即utils/data.py
2.查看相关代码增加自己数据集的类
在utils/data.py增加class iMyImageDS,写法和utils/data.py中的class iImageNet100(iData)基本相同。
3.在工具类中引入自己创建的类
在utils/data_manager.py中
在下面这句话引入自己的类
from utils.data import iCIFAR10, iCIFAR100, iImageNet100, iImageNet1000
即为
from utils.data import iCIFAR10, iCIFAR100, iImageNet100, iImageNet1000,iMyImageDS
并在
def _get_idata(dataset_name):name = dataset_name.lower()if name == "cifar10":return iCIFAR10()elif name == "cifar100":return iCIFAR100()elif name == "imagenet1000":return iImageNet1000()elif name == "imagenet100":return iImageNet100()else:raise NotImplementedError("Unknown dataset {}.".format(dataset_name))
增加
elif name == "imyimageds":return iMyImageDS()
4.使用方法:在模型json文件里修改为自己数据集的名字
例如在icarl.json里,
{"prefix": "reproduce","dataset": "cifar100","memory_size": 2000,"memory_per_class": 20,"fixed_memory": false,"shuffle": true,"init_cls": 10,"increment": 10,"model_name": "icarl","convnet_type": "resnet32","device": ["0","1","2","3"],"seed": [1993]}
修改数据集的名字为
"dataset": “imyimageds”,
这样运行时就可以使用自己的数据集了。
python main.py --config=./exps/[MODEL NAME].json