layumi / AICIty-reID-2020

:red_car: The 1st Place Submission to AICity Challenge 2020 re-id track (Baidu-UTS submission)
MIT License
449 stars 110 forks source link

prepare_2020.py 难以理解 #7

Open rrjia opened 4 years ago

rrjia commented 4 years ago

没有看到从哪里输入AI city 2020的数据开始处理的,全程没有注释,请问是那个参数是输入数据?

layumi commented 4 years ago

你好, 你可以看README 在 https://github.com/layumi/AICIty-reID-2020/tree/master/pytorch 感谢~ 从prepare开始处理数据 只要把下载的数据放在data文件夹下就行

rrjia commented 4 years ago

官方数据有两个:AIC20_ReID和AIC20_ReID_Simulation;其中AIC20ReID中的图片文件名是没有下划线的,但是我看代码中是对 /data/pytorch2020/2020AICITY 中所有的图片进行split("")取id,所以没有太明白,是不是现在的数据格式和你们比赛的时候的不同了

layumi commented 4 years ago

抱歉,是我的问题,今年我用的是paddlepaddle 那边处理好的数据。 链接是 https://github.com/PaddlePaddle/Research/tree/master/CV/PaddleReid/process_aicity_data 里面有预处理的东西,用来从xml中抽取 ID camID

layumi commented 4 years ago

@rrjia 如果你还遇到任何数据问题,问就好,真的感谢~~~ 另外,处理数据的同学@miraclebiu 也会回答你的问题~~

rrjia commented 4 years ago

File "train_2020.py", line 561, in copyfile('./train.py', dir_name+'/train.py')

FileNotFoundError: [Errno 2] No such file or directory: './train.py'

在源码中没有发现train.py ,请问这段代码可以注释嘛?

layumi commented 4 years ago

可以。这主要是为了防止多次改代码以后,忘记了设定,所以做的备份。你也可以改成 train_2020.py

感谢

rrjia commented 4 years ago

在test_2020.py 159行处: image_datasets = {x: datasets.ImageFolder( os.path.join(data_dir,x) ,data_transforms) for x in ['gall','query']} 输入应该是gallery和query两个文件夹,但是在prepare_2020.py中却没有生成gallery数据集,但是下面注释掉代码显示将train_real_save_path链接为gallery_large,请问是否将test_2020中的gallery修改为gallery_large,然后prepare_2020.py最后三行注释掉的代码取消注释生成gallery_large数据集就可以了?

layumi commented 4 years ago

嗯,是的。validation时候 我们采用的gallery 是所有real的训练集。

daiguangzhao commented 4 years ago

在test_2020.py 159行处: image_datasets = {x: datasets.ImageFolder( os.path.join(data_dir,x) ,data_transforms) for x in ['gall','query']} 输入应该是gallery和query两个文件夹,但是在prepare_2020.py中却没有生成gallery数据集,但是下面注释掉代码显示将train_real_save_path链接为gallery_large,请问是否将test_2020中的gallery修改为gallery_large,然后prepare_2020.py最后三行注释掉的代码取消注释生成gallery_large数据集就可以了?

你好,兄弟,我已经按照你的方式去改了,但是在pytest时候报错 test_2020.py:None (test_2020.py) test_2020.py:59: in opt = parser.parse_args() ../../../anaconda3/lib/python3.7/argparse.py:1758: in parseargs self.error(msg % ' '.join(argv)) ../../../anaconda3/lib/python3.7/argparse.py:2508: in error self.exit(2, ('%(prog)s: error: %(message)s\n') % args) ../../../anaconda3/lib/python3.7/argparse.py:2495: in exit _sys.exit(status) E SystemExit: 2 collected 0 items / 1 error

chenxyyy commented 4 years ago

@layumi 郑博士你好,请问一下label.mat在哪里??是算法生成的吗?我并没有找到啊?

layumi commented 4 years ago

@chenxyyy 这个label是之前产生的pseudo label 用不到,你可以skip这一部分。

layumi commented 4 years ago

@daiguangzhao 这个错有点奇怪。。。是opt = parser.parse_args() ? 这边没有import 么?

s20163081161 commented 4 years ago

@layumi 郑博士你好,我按照你给的paddlepaddle 预处理数据的那个连接进去,里边的2_prepare_syn_trainlist.py文件,有'colorID','typeID','orientation'这三个Item,但是我在train_label_utf8.xml文件中并没有找到这几个Item啊?

miraclebiu commented 4 years ago

@layumi 郑博士你好,我按照你给的paddlepaddle 预处理数据的那个连接进去,里边的2_prepare_syn_trainlist.py文件,有'colorID','typeID','orientation'这三个Item,但是我在train_label_utf8.xml文件中并没有找到这几个Item啊?

syn使用的和real使用的xml不是同一个xml文件,需要对应数据集读取处理

rrjia commented 4 years ago

'colorID','typeID','orientation'这三个Item 只有 AIC20_ReID_Simulation文件夹仿真生成的数据中才有,AIC20_ReID文件夹下数据中没有,对真实数据和生成数据要分别调用1_convert.py ,AIC20_ReID_Simulation文件夹下也有一个train_label.xml,然后在使用2_prepare_syn_trainlist.py处理仿真合成的数据,2_prepare_real_trainlist.py处理AIC20_ReID文件夹下的真实数据

rrjia commented 4 years ago

在test_2020.py 159行处: image_datasets = {x: datasets.ImageFolder( os.path.join(data_dir,x) ,data_transforms) for x in ['gall','query']} 输入应该是gallery和query两个文件夹,但是在prepare_2020.py中却没有生成gallery数据集,但是下面注释掉代码显示将train_real_save_path链接为gallery_large,请问是否将test_2020中的gallery修改为gallery_large,然后prepare_2020.py最后三行注释掉的代码取消注释生成gallery_large数据集就可以了?

你好,兄弟,我已经按照你的方式去改了,但是在pytest时候报错 test_2020.py:None (test_2020.py) test_2020.py:59: in opt = parser.parse_args() ../../../anaconda3/lib/python3.7/argparse.py:1758: in parseargs self.error(msg % ' '.join(argv)) ../../../anaconda3/lib/python3.7/argparse.py:2508: in error self.exit(2, ('%(prog)s: error: %(message)s\n') % args) ../../../anaconda3/lib/python3.7/argparse.py:2495: in exit _sys.exit(status) E SystemExit: 2 collected 0 items / 1 error

这个问题我没有遇到过,你是不是应该首先train_2020.py

s20163081161 commented 4 years ago

@layumi @rrjia 多谢两位。想再请教一下,prepare_2020.py里的这句代码“if int(ID[0])<=666:”,意思是ID小于666的都是真实数据,而大于666的都是生成数据吗?可我看真实数据集和生成数据集的ID都是从1开始的啊?感觉应该不是那样?

rrjia commented 4 years ago

AIC20_ReID文件夹下有个readme.txt

%**% % The AIC20 benchmark is captured by 40 cameras in real-world traffic surveillance environment. % % A total of 666 vehicles are annotated. 333 vehicles are used for training. The remaining 333 vehicles are for % % testing. % % There are 56277 images in total. 18290 images are in the test set, and 36935 images are in the training set. % %**%

rrjia commented 4 years ago

@layumi @rrjia 多谢两位。想再请教一下,prepare_2020.py里的这句代码“if int(ID[0])<=666:”,意思是ID小于666的都是真实数据,而大于666的都是生成数据吗?可我看真实数据集和生成数据集的ID都是从1开始的啊?感觉应该不是那样?

然后2_prepare_syn_trainlist.py 18行有一个d_start = 666,强行将模拟的数据的车辆id从666开始编号,改变了原始的车辆id

s20163081161 commented 4 years ago

@layumi @rrjia 多谢两位。想再请教一下,prepare_2020.py里的这句代码“if int(ID[0])<=666:”,意思是ID小于666的都是真实数据,而大于666的都是生成数据吗?可我看真实数据集和生成数据集的ID都是从1开始的啊?感觉应该不是那样?

然后2_prepare_syn_trainlist.py 18行有一个d_start = 666,强行将模拟的数据的车辆id从666开始编号,改变了原始的车辆id

但是我看到真实数据集好像只有478个,并没有666个??

miraclebiu commented 4 years ago

@layumi @rrjia 多谢两位。想再请教一下,prepare_2020.py里的这句代码“if int(ID[0])<=666:”,意思是ID小于666的都是真实数据,而大于666的都是生成数据吗?可我看真实数据集和生成数据集的ID都是从1开始的啊?感觉应该不是那样? 然后2_prepare_syn_trainlist.py 18行有一个d_start = 666,强行将模拟的数据的车辆id从666开始编号,改变了原始的车辆id

但是我看到真实数据集好像只有478个,并没有666个??

我们这样做的目的只是为了方便,另外加上query test上的id就是666了,真实集上的478不是连续的,具体的你可以参考https://www.aicitychallenge.org/2020-faqs/

s20163081161 commented 4 years ago

@layumi @rrjia 多谢两位。想再请教一下,prepare_2020.py里的这句代码“if int(ID[0])<=666:”,意思是ID小于666的都是真实数据,而大于666的都是生成数据吗?可我看真实数据集和生成数据集的ID都是从1开始的啊?感觉应该不是那样? 然后2_prepare_syn_trainlist.py 18行有一个d_start = 666,强行将模拟的数据的车辆id从666开始编号,改变了原始的车辆id

但是我看到真实数据集好像只有478个,并没有666个??

我们这样做的目的只是为了方便,另外加上query test上的id就是666了,真实集上的478不是连续的,具体的你可以参考https://www.aicitychallenge.org/2020-faqs/

好的

daiguangzhao commented 4 years ago

嗯,是的。validation时候 我们采用的gallery 是所有real的训练集。

@daiguangzhao 这个错有点奇怪。。。是opt = parser.parse_args() ? 这边没有import 么? 您好, Train Model python train_2020.py --name SE_imbalance_s1_384_p0.5_lr2_mt_d0_b24+v+aug --warm_epoch 5 --droprate 0 --stride 1 --erasing_p 0.5 --autoaug --inputsize 384 --lr 0.02 --use_SE --gpu_ids 0,1,2 --train_virtual --batchsize 24; 中这个是哪个网络name SE_imbalance_s1_384_p0.5_lr2_mt_d0_b24+v+aug,对应论文哪里呀? 此外,我显存是8G的,一天一夜才跑了6个epoch,这正常吗....想哭了

daiguangzhao commented 4 years ago

@layumi @rrjia 多谢两位。想再请教一下,prepare_2020.py里的这句代码“if int(ID[0])<=666:”,意思是ID小于666的都是真实数据,而大于666的都是生成数据吗?可我看真实数据集和生成数据集的ID都是从1开始的啊?感觉应该不是那样? 然后2_prepare_syn_trainlist.py 18行有一个d_start = 666,强行将模拟的数据的车辆id从666开始编号,改变了原始的车辆id 但是我看到真实数据集好像只有478个,并没有666个?? 我们这样做的目的只是为了方便,另外加上query test上的id就是666了,真实集上的478不是连续的,具体的你可以参考https://www.aicitychallenge.org/2020-faqs/

好的 这个意思应该是一共有666车被标注,但是不一定有666个种类的车

daiguangzhao commented 4 years ago

你好, 你可以看README 在 https://github.com/layumi/AICIty-reID-2020/tree/master/pytorch 感谢~ 从prepare开始处理数据 只要把下载的数据放在data文件夹下就行

您好,这个问题困扰我很久. 在官网下载的真实数据集中有train_label.xml,我们可以利用

你好, 你可以看README 在 https://github.com/layumi/AICIty-reID-2020/tree/master/pytorch 感谢~ 从prepare开始处理数据 只要把下载的数据放在data文件夹下就行

抱歉,是我的问题,今年我用的是paddlepaddle 那边处理好的数据。 链接是 https://github.com/PaddlePaddle/Research/tree/master/CV/PaddleReid/process_aicity_data 里面有预处理的东西,用来从xml中抽取 ID camID

您好,在官网下载的真实数据集有train_lable.xml的文件,我们可以利用Research/CV/PaddleReid/process_aicity_data/的方法去处理train的数据,在您的prepare_2020.py文件的第29-32行中生成的train_real_all应该是真实数据集中所有666辆车包括(The ranges of the training IDs are: 1-95 & 241-478

The ranges of the testing IDs are: 96-240 & 479-666),但是却没有生成.在原数据集中的image_query和image_test并没有被处理成标准形式.您推荐的那个处理数据的网址并没有这部分的内容,麻烦!

layumi commented 4 years ago

@daiguangzhao 你好。你说的是测试集image_query和image_test本来就没有label啊。。是比赛要用的。 如果你要验证结果,可以把模型的预测提交到官网(看submit py); 或者你使用我划的validation来验证,可以使用test py

image

daiguangzhao commented 4 years ago

@daiguangzhao 你好。你说的是测试集image_query和image_test本来就没有label啊。。是比赛要用的。 如果你要验证结果,可以把模型的预测提交到官网(看submit py); 或者你使用我划的validation来验证,可以使用test py

image

不好意思,郑博士,我理解错了! 是不是可以这样理解,官网给的真实数据集中,我们的代码仅仅只是用到了image_trian的36935张图片,而您在prepare_2020中只是对原数据集中image_train进行划分,依次是train_real_all(36395); train; query; gallery_large

layumi commented 4 years ago

@daiguangzhao 是的。 train_real_all 是 36395

s20163081161 commented 4 years ago

在test_2020.py 159行处: image_datasets = {x: datasets.ImageFolder( os.path.join(data_dir,x) ,data_transforms) for x in ['gall','query']} 输入应该是gallery和query两个文件夹,但是在prepare_2020.py中却没有生成gallery数据集,但是下面注释掉代码显示将train_real_save_path链接为gallery_large,请问是否将test_2020中的gallery修改为gallery_large,然后prepare_2020.py最后三行注释掉的代码取消注释生成gallery_large数据集就可以了?

@layumi @rrjia 是不是直接把train_real_save_path路径下的图片拷贝到gallery,而不用取消这三行注释也可以?