lliuz / ARFlow

The official PyTorch implementation of the paper "Learning by Analogy: Reliable Supervision from Transformations for Unsupervised Optical Flow Estimation".
MIT License
251 stars 50 forks source link

what are EPE_0 and EPE_1? #17

Closed RokiaAbdeen closed 3 years ago

RokiaAbdeen commented 3 years ago

during training the program printing these two values, could you please explain what is the difference?

lliuz commented 3 years ago

When multiple validation sets are used, the script prints the results of each validation set. For example, Sintel dataset will evaluate on Clean and Final passes, and KITTI dataset will evaluate on the set of 2012 and 2015. You can refer to https://github.com/lliuz/ARFlow/blob/master/datasets/get_dataset.py for more details.

RokiaAbdeen commented 3 years ago

so please how to know the training and testing EPE values ,.for Sintel dataset, for example?

lliuz commented 3 years ago

The printed results are all for the training set. For the test set, you should change the input dataset and save the predictions first, and then use the official toolkit to generate a result file to upload to the test server of the Sintel benchmark.

RokiaAbdeen commented 3 years ago

for example, if I got EPE_0=3.78 so it is the training EPE for sintel clean, and EPE_1=4.26 is the training EPE for sintel final ,right?

lliuz commented 3 years ago

yes

RokiaAbdeen commented 3 years ago

that's what I have determined for both database paths in config files: {"data": {"root_sintel": "/content/gdrive/My Drive/SimpleFlowNet/sintel", "root_sintel_raw": "/content/gdrive/My Drive/SimpleFlowNet/sintel/training/clean",

RokiaAbdeen commented 3 years ago

so is my program working only with sintel clean or with both of them? for root_sintel_raw I put the path for sintel clean dataset

RokiaAbdeen commented 3 years ago

I mean if I put the root_sintel_raw path for sintel clean dataset, are both EPE values referred to the training EPEs for just sintel clean or for both clean and sintel? because I didn't understand exactly why we should specify these two paths

lliuz commented 3 years ago

You can refer to https://github.com/lliuz/ARFlow/blob/master/datasets/get_dataset.py to see which path is used. For example, when using data type == 'Sintel_Raw', it will use root_sintel_raw for training and both clean and final pass in root_sintel for validation. Since the training and validation used different datasets, there are two paths.

RokiaAbdeen commented 3 years ago

so because I have specified my root_sintel_raw to clean folder of sintel dataset, so both EPE values are referred to the training values of sintel clean ,is it right? or both of them referred to EPE for validation ? sorry for my many questions

RokiaAbdeen commented 3 years ago

I just confused between the validation and training EPE values , when the program print the EPE for training and when it print it for validation

RokiaAbdeen commented 3 years ago

if I selected the data type == 'Sintel_Raw' , and root_sintel_raw is specified for sintel clean path, so the sintel clean will be used for training and sintel clean and finel will be used for validation and thus the EPE_0 value will refer to training EPE and EPE_1 will refer to validation EPE but if I selected the data type == Sintel_Flow ,so the sintel clean and final will be used for training and both of them also will be used for validation , what EPE_0 and EPE_1 should referred to?

lliuz commented 3 years ago

I just confused between the validation and training EPE values , when the program print the EPE for training and when it print it for validation

this program will never print EPE during training, and the EPE values are all printed in the validation stage.

if you selected the data type == 'Sintel_Raw', tand root_sintel_raw is specified for sintel clean path,

in this case, you will use the clean pass in training set for training, and both clean and final pass will be used for validation. EPE 0 refers to clean pass, and EPE 1 refers to final pass, both in the validation stage.

if I selected the data type == Sintel_Flow

in this case, the training and validation will use the same data, EPE 0 still refers to clean pass, and EPE 1 still refers to final pass.

RokiaAbdeen commented 3 years ago

thanks so much for your detailed answer

RokiaAbdeen commented 3 years ago

the final question please , this EPE value (2.79) which is mentioned in your paper as sintel clean training EPE, is it the validation EPE value (EPE_0) after the model has been trained on sintel clean dataset and validated by sintel clean dataset?

RokiaAbdeen commented 3 years ago

if you can explain please how did you get these training values for sintel clean and test (2.79) (3.73), as mentioned in your paper

RokiaAbdeen commented 3 years ago

did you get the training EPEs for sintel clean and final by training your model by (sintel clean) and validate them by clean and final, and your EPE values are the validation value (training EPE) for sintel clean and the validation value(training EPE) for sintel final?

lliuz commented 3 years ago

Hi @RokiaAbdeen, The results reported in Table 1 are training with sintel_raw.json as the pretrained model and then fine-tuned with the same data setting in sintel_ft_ar.json, which used the whole training set for training and validation (see train_subsplit=trainval in sintel_ft_ar.json). The results of other tables in the Ablation Study are all conduct on a new split of training set to avoid using the same data for training and validation(you can set train_subsplit=train and val_subsplit=val to reproduce these parts).

The data from the clean and final pass are all mixed up during training while evaluated respectively.

RokiaAbdeen commented 3 years ago

ok, I got it thanks a bunch