thuml / Transfer-Learning-Library

Transfer Learning Library for Domain Adaptation, Task Adaptation, and Domain Generalization
http://transfer.thuml.ai
MIT License
3.39k stars 553 forks source link

您好,关于引入其他数据集的疑问 #195

Closed murenma05 closed 1 year ago

murenma05 commented 1 year ago

作者您好,我是刚刚接触DA的初学者,非常感谢您提供的examples/domain_adaptation/object_detection

我在引入自制的数据集时遇到了错误,希望可以向您请教一下方法: 我在虚拟交通场景中生成了一个VOC格式的虚拟数据集,称之为VD,它共包含person car bus motorbike bicycle五类,我把它放置在对应位置,结构如下:

object_detction/datasets/VD
├── Annotations
├── ImageSets
└── JPEGImages

随后我运行命令, 试图 VOC+VD-> Clipart:

CUDA_VISIBLE_DEVICES=0 python source_only.py \
  --config-file config/faster_rcnn_R_101_C4_voc.yaml \
  -s VOC2007 datasets/VOC2007 VOC2012 datasets/VOC2012 ZN_Dataset datasets/ZN_Dataset -t Clipart datasets/clipart \
  --test VOC2007Test datasets/VOC2007 Clipart datasets/clipart --finetune \
  OUTPUT_DIR logs/source_only/faster_rcnn_R_101_C4/voc2clipart

得到了报错信息:

Traceback (most recent call last):
  File "source_only.py", line 190, in <module>
    launch(
  File "/home/lzn/anaconda3/envs/detection/lib/python3.8/site-packages/detectron2/engine/launch.py", line 82, in launch
    main_func(*args)
  File "source_only.py", line 122, in main
    args.source = utils.build_dataset(args.source[::2], args.source[1::2])
  File "/home/lzn/DA/Transfer-Learning-Library-dev-tllib/examples/domain_adaptation/object_detection/utils.py", line 123, in build_dataset
    dataset_lists.append(datasets.__dict__[dataset_category](root).name)
KeyError: 'VD'

请问您知道我应该如何将个人数据集“VD”加入到训练的源域当中吗?

另外还有一个不太清楚的地方,请问--test VOC2007Test datasets/VOC2007 Clipart datasets/clipart --finetune \ 这个语句,是指将训练后的模型分别在VOC2007Test(为什么VOC2007Test的路径和VOC2007一致?)和 clipart上做测试吗?

您的Transfer-Learning-Library对我学习Domain Adaptation有很大帮助,再次谢谢您的项目!

murenma05 commented 1 year ago

我现在的做法是把自己的VD数据集加在VOC2007数据集中去,执行VOC->Clipart命令,来达到VOC+VD->Clipart。

thucbx99 commented 1 year ago

关于这里您提到的几个问题

  1. 如何将VD加入到源域,也就是这里的报错,需要在数据集代码里实现这个VD数据集,参考我们已经实现好的VOC就可以
  2. --test VOC2007Test datasets/VOC2007 Clipart datasets/clipart --finetune 这个语句是在VOC2007Test和Clipart上做测试,--test的参数是一个列表,列表中的每一项是一个tuple,分别指定了数据集的名字和目录
  3. VOC2007Test和VOC2007目录是一致的,因为这里是通过split管理的,默认是trainval split,测试的时候使用的是test split,这也是一种常见的策略,可以看一下VOC的具体文件目录就理解了
murenma05 commented 1 year ago

感谢您提供的信息,对我很有帮助!现在训练更加便捷了。

请问对于上述命令中的 -s,-t,--test参数,我可以理解为-s是指定源域上的数据集(可以带标签),-t是指定目标域上的数据集(也可以带标签),--test是指定在什么数据集上测试经过域适应后的模型吗?(如果没有进行域适应这一步,那么就是最直接的没有任何对齐分布操作的实验结果),以 VOC->Clipart的实验结果 为例,单单执行以下命令并没有涉及domain adapt,所以表格中的source那一行对应的就是执行该命令后,在VOC上训练完模型直接在Clipart上做测试的实验结果。

请问不知我的理解是否正确,再次谢谢您提供的项目和回复!

CUDA_VISIBLE_DEVICES=0 python source_only.py \
  --config-file config/faster_rcnn_R_101_C4_voc.yaml \
  -s VOC2007 datasets/VOC2007 VOC2012 datasets/VOC2012  -t Clipart datasets/clipart \
  --test VOC2007Test datasets/VOC2007 Clipart datasets/clipart --finetune \
  OUTPUT_DIR logs/source_only/faster_rcnn_R_101_C4/voc2clipart
thucbx99 commented 1 year ago

你的理解是没问题的~

murenma05 commented 1 year ago

谢谢作者的耐心指导和回复:smile::smile::smile:!!!